diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java index 5f62aee..ca0f962 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java @@ -1,8 +1,11 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; +import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -13,4 +16,5 @@ public interface IMesLoadingListService extends IBaseMesService @ApiOperation("根据发运单号查询装车单信息") MesLoadingList getMesLoadingListByShippingCode(String organizeCode, String shippingCode); + ResultBean doMesMesLoadingListPrint(List ids); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLoadingListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLoadingListController.java index 3314042..00997b7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLoadingListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLoadingListController.java @@ -1,16 +1,40 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @Api(description = "装车单主页面") @RestController @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesLoadingVehiclesOrder") public class MesLoadingListController extends BaseMesController { + @Autowired + private IMesLoadingListService loadingListService; - + @PostMapping(value = "/doPrint") + @ApiOperation(value = "打印未打印发运单后修改状态") + public ResultBean doMesMesLoadingListPrint(@RequestBody List ids) { + try { + // 数据校验 + return loadingListService.doMesMesLoadingListPrint(ids); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java index 3b6f0b2..8516898 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java @@ -3,14 +3,22 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListService; import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.mes.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; @@ -21,7 +29,10 @@ import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -47,6 +58,11 @@ public class MesLoadingListService extends BaseMesService implem private IMesPartShippingGroupService mesPartShippingGroupService; @Autowired private ISyncFuncService syncFuncService; + @Autowired + private IConfigService configService; + + @Autowired + private IMesTemplateService templateService; @Override public MesLoadingList insert(MesLoadingList bean) { @@ -243,4 +259,39 @@ public class MesLoadingListService extends BaseMesService implem DdlPreparedPack.getNumEqualPack(mesLoadingListDetail.getPid(),"id",packBean); return baseRDao.getByProperty(packBean); } + + private List getMesLoadingListByIds(String organizeCode, List ids) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(ids,"id",packBean); + return baseRDao.findByHqlWhere(packBean); + } + + @Override + public ResultBean doMesMesLoadingListPrint(List ids) { + String organizeCode = AuthUtilExt.getOrganizeCode(); + MesConfig config = configService.getConfigByCfgCode(MesExtConstWords.LOADING_LIST_PRINT_TEMPLATE, organizeCode); + if (null == config || StringUtils.isEmpty(config.getCfgValue())) { + MesException.throwBusiException("未配置装车单全局打印配置[%s]", MesExtConstWords.LOADING_LIST_PRINT_TEMPLATE); + } + + MesLabelTemplate labelTemplate = templateService.getMesLabelTemplate(config.getCfgValue(), organizeCode); + if (StringUtils.isEmpty(labelTemplate.getMethodCode())) { + MesException.throwBusiException("装车单打印模版[%s]未配置策略方法", config.getCfgValue()); + } + + List loadingLists = getMesLoadingListByIds(organizeCode, ids); + if (CollectionUtils.isEmpty(loadingLists)) { + return ResultBean.success("不存在需要打印的装车单").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } + + log.info("工厂{}装车单打印 --- 获取到打印数据:{}条 --- loadingLists:{} --- {}", + organizeCode, loadingLists.size(), JSONObject.toJSONString(loadingLists), Thread.currentThread().getName()); + + IPrintTemplateStrategyService printStrategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()); + ResultBean resultBean = printStrategyService.execute(loadingLists); + + log.info("工厂{}排序发运打印 --- 封装打印数据完成 --- {}", organizeCode, Thread.currentThread().getName()); + + return resultBean; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java index 18bfb71..d5f355e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java @@ -2,7 +2,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print; import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 根据不同的条码,封装不同的数据来源 content 是打印模板,dataList @@ -22,4 +28,8 @@ public interface IPrintTemplateStrategyService { */ MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule); + @ApiOperation(value = "装车单") + default ResultBean execute(List loadingLists) { + return null; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/loadingList/ChengDuLoadingListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/loadingList/ChengDuLoadingListPrintStrategy.java new file mode 100644 index 0000000..27f69c1 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/loadingList/ChengDuLoadingListPrintStrategy.java @@ -0,0 +1,160 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.loadingList; + +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.model.ChengDuLoadingListDetailPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.model.ChengDuLoadingListPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; +import cn.estsh.i3plus.pojo.mes.bean.seres.MesCimSeresSrmRunSheetJis; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.repository.MesLoadingListDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesLoadingListRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository; +import cn.estsh.i3plus.pojo.mes.repository.seres.IMesCimSeresSrmRunSheetJisRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.util.ResultBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 装配目视单标签打印 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/17 16:43 + * @Modify: + **/ +@Component +@Slf4j +public class ChengDuLoadingListPrintStrategy implements IPrintTemplateStrategyService { + @Autowired + private MesLoadingListRepository loadingListRDao; + @Autowired + private MesLoadingListDetailRepository loadingListDetailRDao; + @Autowired + private MesShippingOrderManagementRepository shippingOrderRDao; + @Autowired + private MesShippingOrderManagementDetailRepository shippingOrderDetailRDao; + @Autowired + private IMesCimSeresSrmRunSheetJisRepository runSheetJisRDao; + + @Override + public MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule) { + return null; + } + + @Override + public ResultBean execute(List loadingLists) { + List modelList = new ArrayList<>(); + for (MesLoadingList loadingList : loadingLists) { + ChengDuLoadingListPrintModel model = getPrintData(loadingList); + if (model != null) { + modelList.add(model); + } + } + return ResultBean.success("装车单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList); + } + + private ChengDuLoadingListPrintModel getPrintData(MesLoadingList loadingList) { + final String organizeCode = AuthUtilExt.getOrganizeCode(); + final String userName = AuthUtilExt.getUserName(); + + ChengDuLoadingListPrintModel model = new ChengDuLoadingListPrintModel(); + model.setPrintTime(TimeTool.getNowTime(true)); + model.setOrderCode(loadingList.getOrderCode()); + model.setTruckNo(loadingList.getTruckNo()); + model.setSendDockCode(loadingList.getSendDockCode()); + + int loadingListDetailSeq = 0; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(loadingList.getId(), "pid", packBean); + DdlPreparedPack.getOrderBy("shippingCode", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List loadingListDetails = loadingListDetailRDao.findByHqlWhere(packBean); + for (MesLoadingListDetail detail : loadingListDetails) { + ChengDuLoadingListDetailPrintModel detailPrintModel = new ChengDuLoadingListDetailPrintModel(); + if (StringUtils.isEmpty(detail.getShippingCode())) { + continue; + } + + DdlPackBean jisPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(detail.getShippingCode(), "docNo", jisPackBean); + MesCimSeresSrmRunSheetJis sheetJis = runSheetJisRDao.getByProperty(jisPackBean); + if (sheetJis == null) { + continue; + } + detailPrintModel.setProductClass(detail.getShippingCode()); + detailPrintModel.setGoOutTime(sheetJis.getGoOutTime()); + detailPrintModel.setGoToTime(sheetJis.getGoToTime()); + + DdlPackBean shippingPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(detail.getShippingCode(), "shippingCode", shippingPackBean); + MesShippingOrderManagement shippingOrder = shippingOrderRDao.getByProperty(shippingPackBean); + if (shippingOrder == null) { + continue; + } + detailPrintModel.setPartClass(shippingOrder.getShippingGroupCode()); + + double amount = 0; + DdlPackBean shippingDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(shippingOrder.getId(), "pid", shippingDetailPackBean); + List shippingOrderDetails = shippingOrderDetailRDao.findByHqlWhere(shippingDetailPackBean); + for (MesShippingOrderManagementDetail shippingOrderDetail : shippingOrderDetails) { + amount += shippingOrderDetail.getPlanQty(); + } + + detailPrintModel.setSeqNo(++loadingListDetailSeq); + detailPrintModel.setAmount(amount); + model.getDetails().add(detailPrintModel); + } + if (!CollectionUtils.isEmpty(model.getDetails())) { + model.setShippingCount(model.getShippingCount()); + + double totalAmount = 0.0; + String maxGoToTime = null; + String minGoOutTime = null; + for (ChengDuLoadingListDetailPrintModel detailPrintModel : model.getDetails()) { + totalAmount += detailPrintModel.getAmount(); + if (!StringUtils.isEmpty(detailPrintModel.getGoToTime())) { + if (StringUtils.isEmpty(maxGoToTime) || maxGoToTime.compareTo(detailPrintModel.getGoToTime()) < 0) { + maxGoToTime = detailPrintModel.getGoToTime(); + } + } + if (!StringUtils.isEmpty(detailPrintModel.getGoOutTime())) { + if (StringUtils.isEmpty(minGoOutTime) || detailPrintModel.getGoOutTime().compareTo(minGoOutTime) < 0) { + minGoOutTime = detailPrintModel.getGoOutTime(); + } + } + } + model.setGoToTime(maxGoToTime); + model.setGoOutTime(minGoOutTime); + model.setTotalAmount(totalAmount); + } + + //查询原有报文 根据shippingCode; + loadingList.setPrintCount(StringUtil.isEmpty(loadingList.getPrintCount())?1:loadingList.getPrintCount()+1); + loadingList.setLastPrintTime(TimeTool.getNowTime(true)); + loadingList.setLastPrintUser(userName); + ConvertBean.serviceModelUpdate(loadingList, userName); + loadingListRDao.update(loadingList); + return model; + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ChengDuLoadingListDetailPrintModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ChengDuLoadingListDetailPrintModel.java new file mode 100644 index 0000000..727e93b --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ChengDuLoadingListDetailPrintModel.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 成都装车单打印明细 + * @author jason.niu + * @description + * @date 2025/3/15 13:53 + */ +@Data +@ApiModel("成都装车单打印明细") +public class ChengDuLoadingListDetailPrintModel { + + @ApiModelProperty("序号") + private Integer seqNo; + + @ApiModelProperty("最迟到达时间") + private String goToTime; + + @ApiModelProperty("最早发运时间") + private String goOutTime; + + @ApiModelProperty("零件类") + private String partClass; + + @ApiModelProperty("产品类") + private String productClass; + + @ApiModelProperty("数量汇总") + private Double amount; +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ChengDuLoadingListPrintModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ChengDuLoadingListPrintModel.java new file mode 100644 index 0000000..40c664f --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/ChengDuLoadingListPrintModel.java @@ -0,0 +1,47 @@ +package cn.estsh.i3plus.ext.mes.pojo.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 成都装车单打印 + * @author jason.niu + * @description + * @date 2025/3/15 13:53 + */ +@Data +@ApiModel("成都装车单打印") +public class ChengDuLoadingListPrintModel { + + @ApiModelProperty("车牌号") + private String truckNo; + + @ApiModelProperty("发运道口") + private String sendDockCode; + + @ApiModelProperty("装车单号") + private String orderCode; + + @ApiModelProperty("打印时间") + private String printTime; + + @ApiModelProperty("最迟到达时间") + private String goToTime; + + @ApiModelProperty("最早发运时间") + private String goOutTime; + + @ApiModelProperty("小计") + private Integer shippingCount; + + @ApiModelProperty("数量汇总") + private Double totalAmount; + + @ApiModelProperty("明细") + private List details = new ArrayList<>(); +} + diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index df9c490..956c13b 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -466,4 +466,7 @@ public class MesExtConstWords { // 默认客户条码编码规则配置代码 public static final String DEFAULT_CUST_MATCH_RULE = "DEFAULT_CUST_MATCH_RULE"; + //装车单全局打印配置 + public static final String LOADING_LIST_PRINT_TEMPLATE = "LOADING_LIST_PRINT_TEMPLATE"; + }