diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java index effa39d..b08eb00 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLabelTemplateService.java @@ -14,4 +14,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; public interface IMesLabelTemplateService extends IBaseMesService { ListPager queryMesLabelTemplateAndParamListByPager(MesLabelTemplate labelTemplate, Pager pager); + + MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java index ec73196..3ef1ea1 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartProdGroupService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; import java.util.List; +import java.util.Map; /** * @Description: @@ -28,4 +29,6 @@ public interface IMesPartProdGroupService extends IBaseMesService findDetailByCode(String partGroupCode,String organizeCode); + + Map getMesPartProdGroupMap(String organizeCode, List partProdGroupCodeList); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java index 9a46397..1a6d438 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkCenterService.java @@ -4,6 +4,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: * @CreateDate 2024/04/16 @@ -17,4 +19,7 @@ public interface IMesWorkCenterService extends IBaseMesService { @ApiOperation(value = "根据生产线代码查询生产线信息的ERP生产线代码") String getErpWorkCenterCode(String organizeCode, String workCenterCode); + @ApiOperation(value = "根据产线代码集合查询产线信息集合") + List queryMesWorkCenterList(List workCenterCodeList, String organizeCode); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 11c2105..03a6c0b 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; /** * @Description: @@ -45,6 +46,9 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("新增工单打印队列") void doSaveWorkOrderPrintQueue(MesWorkOrder workOrder); + @ApiOperation("装配目视单补打") + List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName); + List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); List getPreDayReportMesProduceSn(String organizeCode ,List mesProductionRecordList ); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index 085a71f..54cecc1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -198,6 +198,22 @@ public class MesWorkOrderController extends BaseMesController { } } + @PostMapping(value = "/work-order-reprint") + @ApiOperation(value = "装配目视单补打") + public ResultBean doSaveWorkOrderPrintQueue(@RequestBody Long[] ids) { + try { + + ValidatorBean.checkNotNull(ids,"工单不能为空"); + + mesWorkOrderService.doReprintWorkOrder(ids, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("装配目视单补打成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @PutMapping(value = "/reopen") @ApiOperation(value = "重新打开") public ResultBean doReopen(Long[] ids) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java index e9b2f6b..309eddc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLabelTemplateServiceImpl.java @@ -63,4 +63,19 @@ public class MesLabelTemplateServiceImpl extends BaseMesService(resultList, pager); } + + @Override + public MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) { + DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(templateCode, MesExtConstWords.TEMPLATE_CODE, templatePackBean); + MesLabelTemplate mesLabelTemplate = baseRDao.getByProperty(templatePackBean); + if (mesLabelTemplate != null) { + //级联获取labelTemplateParam + DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean); + List params = mesLabelTemplateParamRDao.findByHqlWhere(templateParamPackBean); + mesLabelTemplate.setLabelTemplateParamList(params); + } + return mesLabelTemplate; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java index cc804f7..9fe911f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPartProdGroupService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -9,6 +10,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintQueue; import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupDetailRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; @@ -17,10 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; @Service @@ -58,6 +58,14 @@ public class MesPartProdGroupService extends BaseMesService im return mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean); } + @Override + public Map getMesPartProdGroupMap(String organizeCode, List partProdGroupCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partProdGroupCodeList, MesExtConstWords.PART_PROD_GROUP_CODE, packBean); + List partProdGroupList = baseRDao.findByHqlWhere(packBean); + return partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x, y) -> y)); + } + protected void setPackQueryBean(MesPartProdGroup bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupCode(), "partProdGroupCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java index 4b848e3..12b13f2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterService.java @@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.util.List; + @Service @Slf4j public class MesWorkCenterService extends BaseMesService implements IMesWorkCenterService { @@ -41,4 +43,13 @@ public class MesWorkCenterService extends BaseMesService implemen return null != workCenterDb ? workCenterDb.getErpWorkCenter() : null; } + @Override + public List queryMesWorkCenterList(List workCenterCodeList, String organizeCode) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workCenterCodeList, MesExtConstWords.WORK_CENTER_CODE, packBean); + return workCenterRepository.findByHqlWhere(packBean); + + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java index cc8ebfb..01947d2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderCutService.java @@ -322,6 +322,7 @@ public class MesWorkOrderCutService extends BaseMesService impl MesException.throwMesBusiException("裁片工单【%s】已打印过标签,无法再次打印", o.getCutWorkOrderNo()); }); + // 返回结果 List> resultMapList = new ArrayList<>(); List cutCodeList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutCode) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 68a8b35..0bd64fe 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -3,9 +3,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.*; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.apiservice.util.DateUtil; @@ -29,17 +31,20 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.model.wms.WmsProductModel; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.CaseInsensitiveMap; import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -125,6 +130,18 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private MesPrintQueueRepository printQueueRepository; + @Autowired + private MesCustomerCarModelRepository customerCarModelRepository; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRepository; + + @Autowired + private IMesLabelTemplateService labelTemplateService; + + @Autowired + private IMesPartProdGroupService partProdGroupService; + @Override public MesWorkOrder insert(MesWorkOrder bean) { //校验产线与工位的关系 @@ -1160,6 +1177,118 @@ public class MesWorkOrderService extends BaseMesService implements } + @Override + public List> doReprintWorkOrder(Long[] ids, String organizeCode, String userName) { + + List mesWorkOrderList = getMesWorkOrderList(ids, organizeCode); + + // 根据工单号对工单分组 + Map workOrderMapByWorkOrderNo = mesWorkOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); + + // 产线代码集合 + List workCenterCodeList = mesWorkOrderList.stream().map(MesWorkOrder::getWorkCenterCode).distinct().collect(Collectors.toList()); + + // 根据产线代码节后获取产线信息集合 + List mesWorkCenters = workCenterService.queryMesWorkCenterList(workCenterCodeList, organizeCode); + + // 产线名称集合 + Map workCenterNameMap = mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); + + // 生产零件号 + List partProdGroupCodeList = mesWorkOrderList.stream().map(MesWorkOrder::getPartProdGroupCode).distinct().collect(Collectors.toList()); + + // 根据零件生产组代码分组 + Map partProdGroupMap = partProdGroupService.getMesPartProdGroupMap(organizeCode, partProdGroupCodeList); + + // 客户车型配置名称MAP + Map carModelMapByCode = getMesCustomerCarModelMap(organizeCode, mesWorkOrderList); + + // 工单装配件 + Map> workOrderAssemblyMapByWorkOrderNo = getWorkOrderAssemblyMapByWorkOrderNo(organizeCode, workOrderMapByWorkOrderNo); + + // 返回结果 + List> resultMapList = new ArrayList<>(); + + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { + + if (mesWorkOrder == null) { + log.info("doReprintWorkOrder --- 工单为空 暂不输出打印"); + continue; + } + + mesWorkOrder.setWorkCenterName(workCenterNameMap.get(mesWorkOrder.getWorkCenterCode())); + + MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()); + + String printTemplate = mesPartProdGroup.getPrintTemplate(); + + if (StringUtils.isEmpty(printTemplate)) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); + } + + MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(printTemplate, organizeCode); + + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + + //模板信息丢失抛出异常 + if (StringUtils.isEmpty(labelTemplate.getMethodCode())) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】为空", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode()); + } + + Map modelMap = new HashMap<>(); + modelMap.put("mesWorkOrder", mesWorkOrder); + modelMap.put("mesPartProdGroup", mesPartProdGroup); + + MesCustomerCarModel customerCarModel = carModelMapByCode.get(mesWorkOrder.getCarModelCode()); + if (customerCarModel != null) { + modelMap.put("mesCustomerCarModel", customerCarModel); + } + List workOrderAssemblyListByWorkOrderNo = workOrderAssemblyMapByWorkOrderNo.get(mesWorkOrder.getWorkOrderNo()); + if (!CollectionUtils.isEmpty(workOrderAssemblyListByWorkOrderNo)) { + modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyListByWorkOrderNo); + } + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setSourceData(modelMap); + mesProduceSnPrintModel.setPrinter(mesPartProdGroup.getPrinter()); + + MesProduceSnPrintModel snPrintModel = null; + try { + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null); + } catch (BeansException e) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】打印模板【%s】策略类【%s】执行异常", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode(), labelTemplate.getTemplateCode(), labelTemplate.getMethodCode()); + } + + resultMapList.addAll(snPrintModel.getPrintContextList()); + + } + + return resultMapList; + + } + + private Map getMesCustomerCarModelMap(String organizeCode, List workOrderList) { + List carModelCodeList = workOrderList.stream().map(MesWorkOrder::getCarModelCode).distinct().collect(Collectors.toList()); + // 客户车型配置 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(carModelCodeList, MesExtConstWords.CAR_MODEL_CODE, packBean); + List customerCarModelList = customerCarModelRepository.findByHqlWhere(packBean); + + return customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); + } + + private Map> getWorkOrderAssemblyMapByWorkOrderNo(String organizeCode, Map workOrderMapByWorkOrderNo) { + List workOrderNoList = workOrderMapByWorkOrderNo.keySet().stream().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + List workOrderAssemblyList = workOrderAssemblyRepository.findByHqlWhere(packBean); + Map> workOrderAssemblyMapByWorkOrderNo = workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); + return workOrderAssemblyMapByWorkOrderNo; + } + private List getMesProductOffLineList(WmsProductModel model, String nowTime) { //查询报工数据 List oldProductOffLineList = mesProductOffLineService.findMesProductOffLineByProductSn(model.getSn(), model.getOrganizeCode()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java new file mode 100644 index 0000000..3929865 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -0,0 +1,104 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.strategy; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 装配目视单标签打印 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/17 16:43 + * @Modify: + **/ +@Component +@Slf4j +public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategyService { + + @Override + public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, MesNumberRule numberRule) { + + Map modelMap = (Map) model.getSourceData(); + + // 工单信息 + MesWorkOrder workOrder = (MesWorkOrder) modelMap.get("mesWorkOrder"); + // 零件生产组信息 + MesPartProdGroup partProdGroup = (MesPartProdGroup) modelMap.get("mesPartProdGroup"); + // 客户车型配置信息 + MesCustomerCarModel customerCarModel = modelMap.containsKey("mesCustomerCarModel") ? (MesCustomerCarModel) modelMap.get("mesCustomerCarModel") : null; + // 工单装配件信息 + List workOrderAssemblyList = modelMap.containsKey("mesWorkOrderAssemblyList") ? (List) modelMap.get("mesWorkOrderAssemblyList") : null; + workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> o.getDisplaySeq() != null && o.getDisplaySeq() != 0).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(workOrderAssemblyList)) workOrderAssemblyList.sort(Comparator.comparing(MesWorkOrderAssembly::getDisplaySeq)); + // 返回的结果集合 + List> printDataMapList = new ArrayList<>(); + // 单个标签参数值 + Map resultMap = new HashMap<>(); + // 工单号 + resultMap.put(MesExtConstWords.WORK_ORDER_NO, workOrder.getWorkOrderNo()); + // 产线名称 + resultMap.put(MesExtConstWords.WORK_CENTER_NAME, workOrder.getWorkCenterName()); + // 车型名称 + resultMap.put(MesExtConstWords.CAR_MODEL_NAME, customerCarModel == null ? "" : customerCarModel.getCarModelName()); + // vinCode + resultMap.put(MesExtConstWords.VIN_CODE, workOrder.getVinCode()); + // vinCode 后四位 + resultMap.put(MesExtConstWords.VIN_CODE_AFTER_FOUR, workOrder.getVinCode()); + // 总成零件号 + resultMap.put(MesExtConstWords.PART_NO, workOrder.getPartNo()); + // 工单标识 + resultMap.put(MesExtConstWords.ORDER_FLAG, workOrder.getOrderFlag()); + // 客户订单号 + resultMap.put(MesExtConstWords.CUST_ORDER_NO, workOrder.getCustOrderNo()); + // 客户零件号 + resultMap.put(MesExtConstWords.CUST_PART_NO, workOrder.getPartNo()); + // 客户条码 + resultMap.put(MesExtConstWords.SN, workOrder.getSn()); + // 备注 + resultMap.put(MesExtConstWords.REMARK, customerCarModel == null ? "" : customerCarModel.getRemark()); + // 重打印 + resultMap.put(MesExtConstWords.REPRINT, "重打印"); + // 打印时间 + resultMap.put(MesExtConstWords.PRINT_TIME, TimeTool.getNowTime("yyyyMMdd HH:mm:ss")); + // EDI接口时间 取工单plan_start_time + resultMap.put(MesExtConstWords.EDI_REC_TIME, workOrder.getPlanStartTime()); + + // 总个数 + Integer totalCount = partProdGroup.getTotalCount(); + // 为空时显示内容 + String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); + for (Integer index = 0; index < totalCount; index++) { + String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(0).getDisplayValue(); + + resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? "" : displayValue); + } + + printDataMapList.add(resultMap); + + model.setPrintContextList(packResultMapList(model, printDataMapList)); + + return model; + } + + private List> packResultMapList(MesProduceSnPrintModel printModel, List> printTemplateDateList) { + List> resultMapList = new ArrayList<>(); + Map resultMap = new HashMap<>(); + resultMap.put(MesExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesExtConstWords.TEMPLATE_DATA, printTemplateDateList); + resultMap.put(MesExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesExtConstWords.PRINTER, printModel.getPrinter()); + resultMapList.add(resultMap); + return resultMapList; + } + +} 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 8020612..9b6a257 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 @@ -299,5 +299,28 @@ public class MesExtConstWords { // 打印时间 public static final String PRINT_TIME = "printTime"; + // 车型名称 + public static final String CAR_MODEL_NAME = "carModelName"; + // VIN_CODE + public static final String VIN_CODE = "vinCode"; + // VIN_CODE 后四位 + public static final String VIN_CODE_AFTER_FOUR = "vinCodeAfterFour"; + // 工单标识 + public static final String ORDER_FLAG = "orderFlag"; + // 重打印 + public static final String REPRINT = "reprint"; + // EDI接收时间 + public static final String EDI_REC_TIME = "ediRecTime"; + // 装配件参数 + public static final String ASSEMBLY_PARAM = "assemblyParam"; + // 客户订单号 + public static final String CUST_ORDER_NO = "custOrderNo"; + //客户零件号 + public static final String CUST_PART_NO = "custPartNo"; + // 车型大类 + public static final String CAR_MODEL_CODE = "carModelCode"; + //零件生产组代码 + public static final String PART_PROD_GROUP_CODE = "partProdGroupCode"; + }