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 1b5f617..effa39d 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 @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.api.base; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; /** @@ -10,4 +12,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; * @Modify: **/ public interface IMesLabelTemplateService extends IBaseMesService { + + ListPager queryMesLabelTemplateAndParamListByPager(MesLabelTemplate labelTemplate, Pager pager); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java new file mode 100644 index 0000000..b16b48c --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; + +/** + * @Description: + * @CreateDate 2024/09/09 + * @Author gsz + */ +public interface IMesPartInspectionService extends IBaseMesService { + + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java index b4c0da4..ea59b67 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPullingOrderInfoService.java @@ -12,4 +12,6 @@ import java.util.Map; public interface IMesPullingOrderInfoService extends IBaseMesService { Map doSPSForEquipment( String assemblyLine, String pullingGroupCode,String organizeCode ); + + void doCreatePullOrderByPullGroupAndWorkOrder(String organizeCode, String userName); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java index bbca02b..0054521 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -18,4 +18,7 @@ public interface IMesWorkOrderCutService extends IBaseMesService cutWorkOrderNos, String organizeCode, String userName); + @ApiOperation("打印裁片工单") + void doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateController.java index eb82a7a..7b1c2c1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesLabelTemplateController.java @@ -1,8 +1,24 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesLabelTemplateService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; +import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +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.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -17,4 +33,21 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesLabelTemplate") @Api(tags = "打印模板") public class MesLabelTemplateController extends BaseMesController { + + @Autowired + private IMesLabelTemplateService mesLabelTemplateService; + + @GetMapping("/query-template-param") + @ApiOperation(value = "查询打印模板和明细") + public ResultBean queryMesLabelTemplateAndParamListByPager(MesLabelTemplate labelTemplate, Pager pager) { + + try { + return ResultBean.success("查询成功").setListPager(mesLabelTemplateService.queryMesLabelTemplateAndParamListByPager(labelTemplate, pager)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java new file mode 100644 index 0000000..1834a31 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 零件检测 + */ +@Api("零件检测") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPartInspection") +public class MesPartInspectionController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java new file mode 100644 index 0000000..aa1545f --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderInfoController.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 拉动单 + */ +@Api("拉动单") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPullingOrderInfo") +public class MesPullingOrderInfoController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java new file mode 100644 index 0000000..1cf731a --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPullingOrderPartInfoController.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; +import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderPartInfo; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 拉动单 + */ +@Api("拉动单") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPullingOrderPartInfo") +public class MesPullingOrderPartInfoController extends BaseMesController { + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index 819c147..c03f0c3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -76,6 +76,8 @@ public class MesWhiteListController extends MesBaseController { private MesEquipmentRepository mesEquipmentRDao; @Autowired + private IMesPullingOrderInfoService pullingOrderInfoService; + @Autowired private IMesDowntimeRecordService downtimeRecordService; @PostMapping(value = "/meter/main-data") @ApiOperation(value = "Maximo仪表主数据", notes = "Maximo仪表主数据") @@ -277,4 +279,17 @@ public class MesWhiteListController extends MesBaseController { } return ResultBean.success("执行成功"); } + @GetMapping(value = "/doCreatePullOrder") + @ApiOperation(value = "根据拉动组和生产工单产生拉动单") + public ResultBean doCreatePullOrder(String organizeCode, String equ) { + //统计数据 + try { + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,"test"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + return ResultBean.success("执行成功"); + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java new file mode 100644 index 0000000..58a60dd --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesCreatePullOrderByPullGroupAndWorkOrderJob.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +import java.util.List; + +/** + * @Description : 根据拉动组和生产工单产生拉动单JOB + * @Reference : + * @Author : gsz + * @CreateDate 2024/9/4 10:01 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("根据拉动组和生产工单产生拉动单JOB") +public class MesCreatePullOrderByPullGroupAndWorkOrderJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesCreatePullOrderByPullGroupAndWorkOrderJob.class); + + private static final long serialVersionUID = -321526601595924818L; + + @Autowired + private IMesPullingOrderInfoService pullingOrderInfoService; + + @Autowired + private IMesConfigService mesConfigService; + + @Value("${server.port}") + private String serverPort; + @Value("${impp.server.ip}") + private String ip; + + public MesCreatePullOrderByPullGroupAndWorkOrderJob() { + super(MesCreatePullOrderByPullGroupAndWorkOrderJob.class, "根据拉动组和生产工单产生拉动单JOB"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + String jobParam = this.getJobParam(); + + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + String[] organizeCodeList = jobParam.split(","); + LOGGER.info("根据拉动组和生产工单产生拉动单JOB开始 -----start"); + String userName = "CreatePullOrderJob"; + for (String organizeCode : organizeCodeList) { + pullingOrderInfoService.doCreatePullOrderByPullGroupAndWorkOrder(organizeCode,userName); + } + LOGGER.info("根据拉动组和生产工单产生拉动单JOB开始结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("根据拉动组和生产工单产生拉动单JOB任务结束e:{}", e.toString()); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java index f851067..6a96e42 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java @@ -95,6 +95,7 @@ public class MesEquipmentVariableService extends BaseMesService implements IMesLabelTemplateService { + @Autowired + private MesLabelTemplateParamRepository mesLabelTemplateParamRDao; @Override protected void setPackQueryBean(MesLabelTemplate bean, DdlPackBean packBean) { @@ -25,4 +40,27 @@ public class MesLabelTemplateServiceImpl extends BaseMesService resultList = baseRDao.findByHqlWherePage(packBean, pager); + if (!CollectionUtils.isEmpty(resultList)){ + for (MesLabelTemplate mesLabelTemplate : resultList) { + // 根据模板代码查询模板参数信息 + List templateParamList = mesLabelTemplateParamRDao.findByProperty( + new String[]{"templateCode", MesPcnConstWords.IS_VALID, MesPcnConstWords.IS_DELETED, MesExtConstWords.ORGANIZE_CODE}, + new Object[]{mesLabelTemplate.getTemplateCode(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), + CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),labelTemplate.getOrganizeCode()}); + + if (!CollectionUtils.isEmpty(templateParamList)) { + mesLabelTemplate.setLabelTemplateParamList(templateParamList); + } + } + } + return new ListPager<>(resultList, pager); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java index 34a656e..185a7e4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPackingDefineServiceImpl.java @@ -1,13 +1,25 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPackingDefineService; +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.util.MesExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomer; import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; +import cn.estsh.i3plus.pojo.mes.repository.MesCustomerRepository; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 包装定义维护 @@ -20,6 +32,25 @@ import org.springframework.stereotype.Service; @Slf4j public class MesPackingDefineServiceImpl extends BaseMesService implements IMesPackingDefineService { + @Autowired + private MesCustomerRepository customerRepository; + + @Override + public void setBeanModel(List list) { + if(CollectionUtils.isEmpty(list)){ + return; + } + List custCodeList = list.stream().filter(o -> !StringUtils.isEmpty(o.getCustCode())).map(MesPackingDefine::getCustCode).filter(t -> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); + Map beanMap = CollectionUtils.isEmpty(custCodeList) ? new HashMap<>() : BeanMapUtilsExt.getBeanMap(customerRepository, MesExtConstWords.CUST_CODE, list.iterator().next().getOrganizeCode(), custCodeList); + if(!CollectionUtils.isEmpty(beanMap)){ + list.forEach(t->{ + if (!StringUtils.isEmpty(t.getCustCode()) && beanMap.containsKey(t.getCustCode())) { + t.setCustName(beanMap.get(t.getCustCode()).getCustName()); + } + }); + } + } + @Override protected void setPackQueryBean(MesPackingDefine bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getPackCode(), "packCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java new file mode 100644 index 0000000..68e037b --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java @@ -0,0 +1,31 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesPartInspectionService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class MesPartInspectionService extends BaseMesService implements IMesPartInspectionService { + + @Override + protected void setPackQueryBean(MesPartInspection bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getSn(), "sn", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getNcStatus(), "ncStatus", packBean); + if (StringUtils.isNotBlank(bean.getCreateDateTimeStart()) && StringUtils.isNotBlank(bean.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), "createDatetime", packBean, true); + } + if (StringUtils.isNotBlank(bean.getModifyDateTimeStart()) && StringUtils.isNotBlank(bean.getModifyDateTimeEnd())) { + DdlPreparedPack.timeBuilder(bean.getModifyDateTimeStart(), bean.getModifyDateTimeEnd(), "modifyDatetime", packBean, true); + } +// DdlPreparedPack.getStringLikerPack(bean.getInspectionDate(), "inspectionDate", packBean); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java index 73d4df1..db94ac6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartPullDetailService.java @@ -5,6 +5,7 @@ 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.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPartPullDetail; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ValidatorBean; @@ -16,7 +17,51 @@ import java.util.List; @Service @Slf4j public class MesPartPullDetailService extends BaseMesService implements IMesPartPullDetailService { + @Override + protected void onInsertBean(MesPartPullDetail item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); + //43112 MES:PC拉动单页面问题 6.同一拉动组-根据工位代码&零件号做唯一校验 + if (!StringUtil.isEmpty(item.getWorkCellCode())&&!StringUtil.isEmpty(item.getPartNo())){ + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", partPackBean); + boolean flg = baseRDao.isExitByHql(partPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("拉动组【%s】零件号【%s】工位【%s】已经存在,请检查数据", + item.getPullCode(), item.getPartNo(), item.getWorkCellCode()) + .build(); + } + } + } + @Override + protected void onUpdateBean(MesPartPullDetail item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); +// ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); + + //同一拉动组-根据工位代码&零件号做唯一校验 + if (!StringUtil.isEmpty(item.getWorkCellCode())&&!StringUtil.isEmpty(item.getPartNo())){ + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPullCode(), "pullCode", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partPackBean); + DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", partPackBean); + boolean flg = baseRDao.isExitByHql(partPackBean); + if (flg) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("拉动组【%s】零件号【%s】工位【%s】已经存在,请检查数据", + item.getPullCode(), item.getPartNo(), item.getWorkCellCode()) + .build(); + } + } + } protected void setPackQueryBean(MesPartPullDetail bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getPullCode(), "pullCode", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCellCode(), "workCellCode", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index dffdc0d..c789920 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -2,38 +2,65 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPartPullService; import cn.estsh.i3plus.ext.mes.api.base.IMesPullingOrderInfoService; +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.util.MesExtConstWords; +import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.util.WmsConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesPartPull; -import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo; -import cn.estsh.i3plus.pojo.mes.repository.MesPullingOrderPartInfoRepository; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.*; 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.ValidatorBean; +import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; @Service @Slf4j public class MesPullingOrderInfoService extends BaseMesService implements IMesPullingOrderInfoService { - + public static final Logger LOGGER = LoggerFactory.getLogger(MesPullingOrderInfoService.class); + @Autowired + private MesPullingOrderInfoRepository mesPullingOrderInfoRepository; @Autowired private MesPullingOrderPartInfoRepository mesPullingOrderPartInfoRepository; + @Autowired + private MesPartPullRepository mesPartPullRDao; + @Autowired + private MesPartPullDetailRepository mesPartPullDetailRDao; + @Autowired + private MesWorkOrderPartRepository workOrderPartRepository; + @Autowired + private MesWorkOrderRepository mesWorkOrderRepository; + @Autowired + private ICoreUtilCloud sysOrderNoRuleCloud; + @Autowired + private MesWorkCenterRepository mesWorkCenterRepository; + @Autowired + private MesPullingOrderExtendsRepository mesPullingOrderExtendsRepository; protected void setPackQueryBean(MesPullingOrderInfo bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getPullOrderType(), "pullOrderType", packBean); + DdlPreparedPack.getNumEqualPack(bean.getPrintStatus(), "printStatus", packBean); + DdlPreparedPack.getNumEqualPack(bean.getPullOrderStatus(), "pullOrderStatus", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); } @@ -63,6 +90,175 @@ public class MesPullingOrderInfoService extends BaseMesService pulliGroupList = mesPartPullRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(pulliGroupList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->{}拉动组不存在", organizeCode); + return; + } + Map> pullCodeMap = pulliGroupList.stream().collect(Collectors.groupingBy(MesPartPull::getPullCode)); + + DdlPackBean ddlPackBeanDetail = DdlPackBean.getDdlPackBean(organizeCode); + List pullDetailList = mesPartPullDetailRDao.findByHqlWhere(ddlPackBeanDetail); + if (CollectionUtils.isEmpty(pullDetailList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->{}拉动组明细不存在", organizeCode); + return; + } + Map> partPullDetailListMap = pullDetailList.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPartNo)); + //2.客户物料集合 [PART_NO] in 拉动组明细物料集合 + //3.产线数据 + DdlPackBean workPackBean = DdlPackBean.getDdlPackBean(organizeCode); + List workCenterList = pulliGroupList.stream().map(MesPartPull::getWorkCenterCode).collect(Collectors.toList()); + DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", workPackBean); + List mesWorkCenterList = mesWorkCenterRepository.findByHqlWhere(workPackBean); + if (CollectionUtils.isEmpty(mesWorkCenterList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},拉动组对应产线信息不存在-->{}", organizeCode, workCenterList); + return; + } + Map> workCenterListMap = mesWorkCenterList.stream().collect(Collectors.groupingBy(MesWorkCenter::getWorkCenterCode)); + + //4.生产工单 在加工状态 [PULLING_STATUS] =0 未创建 + DdlPackBean packBeanWorkOrder = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workCenterList, "workCenterCode", packBeanWorkOrder); + DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBeanWorkOrder); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.NOTCREATE.getValue(), "pullingStatus", packBeanWorkOrder); + List workOrderList = mesWorkOrderRepository.findByHqlWhere(packBeanWorkOrder); + if (CollectionUtils.isEmpty(workOrderList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线信息没有【未创建】【在加工】状态的工单-->{}", organizeCode, workCenterList); + return; + } + Map> workOrderListMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo)); + + DdlPackBean packBeanWorkOrderPart = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList()), "workOrderNo", workPackBean); + List mesWorkOrderPartList = workOrderPartRepository.findByHqlWhere(packBeanWorkOrderPart); + if (CollectionUtils.isEmpty(mesWorkOrderPartList)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线对应的工单对应工单零件不存在-->{}", organizeCode, workCenterList); + return; + } + //5.取工单零件和拉动组交集,根据拉动主表对应的类型 生成相应的拉动单和拉动单明细 + Map> workOrderNoListMap = mesWorkOrderPartList.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getWorkOrderNo)); + + + for (Map.Entry> stringListEntry : workOrderNoListMap.entrySet()) { + //需要生成拉动单的工单号 对应工单 + List mesWorkOrders = workOrderListMap.get(stringListEntry.getKey()); + MesWorkOrder mesWorkOrder = mesWorkOrders.get(0); + + //工单对应的工单零件号 + List workOrderParts = stringListEntry.getValue(); + //待生成的拉动组明细 + List pullDetailListNew = new ArrayList<>(); + for (MesWorkOrderPart workOrderPart : workOrderParts) { + if (!CollectionUtils.isEmpty(partPullDetailListMap.get(workOrderPart.getPartNo()))) { + pullDetailListNew.addAll(partPullDetailListMap.get(workOrderPart.getPartNo())); + } + } + if (CollectionUtils.isEmpty(pullDetailListNew)) { + LOGGER.info("根据拉动组和生产工单产生拉动单JOB-->工厂号{},产线-->{}对应的工单号-->{}没有需要生成拉动单零件", + organizeCode, mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getWorkOrderNo()); + continue; + } + Map> workOrderPartListMap = workOrderParts.stream().collect(Collectors.groupingBy(MesWorkOrderPart::getPartNo)); + //生成拉动单 如果是多个拉动组的话都要产生拉动单 + Map> pullCodeListMap = pullDetailListNew.stream().collect(Collectors.groupingBy(MesPartPullDetail::getPullCode)); + for (Map.Entry> stringListEntryDetail : pullCodeListMap.entrySet()) { + String pullCode = stringListEntryDetail.getKey(); + List mesPartPulls = pullCodeMap.get(pullCode); + MesPartPull mesPartPull = mesPartPulls.get(0);//拉动组明细拉动单号对应拉动组 + List mesPartPullDetails = stringListEntryDetail.getValue(); + //调用平台生成拉动单号流水 -yyyyMMdd00001 + String orderNo = ""; + if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue()) { + orderNo = "KITTING"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.JIS_PULL.getValue()) { + orderNo = "JIS"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.SPS_PULL.getValue()) { + orderNo = "SPS"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.BENZ_PULL.getValue()) { + orderNo = "BENZ"; + } else if (mesPartPull.getPullOrderType() == MesExtEnumUtil.PART_PULL_ORDER_TYPE.PICK_PULL.getValue()) { + orderNo = "PICK"; + } + + BaseResultBean orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.MES_PULL_ORDER_NO); + if (orderResutlBean != null && orderResutlBean.isSuccess()) { + orderNo += orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString(); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.WMS.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("生成单号失败") + .setErrorSolution("【MES_PULL_ORDER_NO】请重新操作或查看服务!") + .build(); + } + MesPullingOrderInfo pullingOrder = new MesPullingOrderInfo(); + pullingOrder.setOrganizeCode(organizeCode); + pullingOrder.setPullingOrderNo(orderNo); + pullingOrder.setPullOrderType(mesPartPull.getPullOrderType()); + pullingOrder.setPullGroupFid(mesPartPull.getId()); + pullingOrder.setCustOrderNo(StringUtil.isEmpty(mesWorkOrder.getCustOrderNo()) ? "" : mesWorkOrder.getCustOrderNo()); + pullingOrder.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + pullingOrder.setWorkOrderSeq(StringUtil.isEmpty(mesWorkOrder.getWorkOrderSeq()) ? "" : mesWorkOrder.getWorkOrderSeq()); + pullingOrder.setIsPrint(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + pullingOrder.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + pullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue()); + pullingOrder.setWorkCenterCode(mesPartPull.getWorkCenterCode()); + pullingOrder.setPullCode(mesPartPull.getPullCode()); + pullingOrder.setPartNo(mesWorkOrder.getPartNo()); + pullingOrder.setPartName(mesWorkOrder.getPartName()); + pullingOrder.setCustPartNo(mesWorkOrder.getCustPartNo()); + pullingOrder.setProduceSeq(StringUtil.isEmpty(mesWorkOrder.getProduceSeq()) ? 0 : mesWorkOrder.getProduceSeq()); + + ConvertBean.serviceModelInitialize(pullingOrder, userName); + mesPullingOrderInfoRepository.insert(pullingOrder); + + for (MesPartPullDetail partInfo : mesPartPullDetails) { + MesPullingOrderPartInfo pullingOrderPartInfo = new MesPullingOrderPartInfo(); + pullingOrderPartInfo.setOrganizeCode(organizeCode); + pullingOrderPartInfo.setPullCode(partInfo.getPullCode()); + pullingOrderPartInfo.setPullingOrderNo(pullingOrder.getPullingOrderNo()); + pullingOrderPartInfo.setWorkOrderNo(pullingOrder.getWorkOrderNo()); + pullingOrderPartInfo.setWorkOrderSeq(pullingOrder.getWorkOrderSeq()); + pullingOrderPartInfo.setCustOrderNo(pullingOrder.getCustOrderNo()); + pullingOrderPartInfo.setPartNo(partInfo.getPartNo()); + pullingOrderPartInfo.setPartName(partInfo.getPartName()); + MesWorkOrderPart mesWorkOrderPart = workOrderPartListMap.get(partInfo.getPartNo()).get(0); + pullingOrderPartInfo.setPullQty(mesWorkOrderPart.getItemQty()); + pullingOrderPartInfo.setCustOrderNo(pullingOrder.getCustOrderNo()); + pullingOrderPartInfo.setWorkOrderSeq(pullingOrder.getWorkOrderSeq()); + pullingOrderPartInfo.setWaterSeq(pullingOrder.getProduceSeq()); + pullingOrderPartInfo.setWorkCellCode(mesWorkOrderPart.getWorkCellCode()); + pullingOrderPartInfo.setEquipment(partInfo.getEquipment()); + pullingOrderPartInfo.setLocation(partInfo.getPullAddr());//todo + pullingOrderPartInfo.setStatus(MesExtEnumUtil.PULL_ORDER_PART_STATUS.UN_SENTED.getValue());///明细已送料为1,未送料为0 + pullingOrderPartInfo.setCustPartNo(pullingOrder.getCustPartNo()); + + ConvertBean.serviceModelInitialize(pullingOrderPartInfo, userName); + mesPullingOrderPartInfoRepository.insert(pullingOrderPartInfo); + } + //7.拉动组+加工单号+生成拉动单状态的对应关系中间表,每次新增都要记录 + MesPullingOrderExtends mesPullingOrderExtends= new MesPullingOrderExtends(); + mesPullingOrderExtends.setOrganizeCode(organizeCode); + mesPullingOrderExtends.setPullCode(pullingOrder.getPullCode()); + mesPullingOrderExtends.setPullingOrderNo(pullingOrder.getPullingOrderNo()); + mesPullingOrderExtends.setWorkOrderNo(pullingOrder.getWorkOrderNo()); + mesPullingOrderExtends.setPullOrderStatus(pullingOrder.getPullOrderStatus()); + ConvertBean.serviceModelInitialize(mesPullingOrderExtends, userName); + + mesPullingOrderExtendsRepository.insert(mesPullingOrderExtends); + } + //6.产生拉动单后更新工单拉动状态为已拉动 + mesWorkOrder.setPullingStatus(MesExtEnumUtil.WORK_ORDER_PULLING_STATUS.SUBMIT.getValue()); + mesWorkOrderRepository.update(mesWorkOrder); + + } + + } + + @Override public Map doSPSForEquipment(String assemblyLine, String pullingGroupCode, String organizeCode) { Map resultMap = new HashMap(); //查询拉动单状态为已扫描=20的 拉动单 @@ -72,7 +268,7 @@ public class MesPullingOrderInfoService extends BaseMesService byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); - resultMap.put("",mesPullingOrder); + resultMap.put("", mesPullingOrder); resultMap.put("success", true); - String message ="更新SPS状态成功,已发送SPS信息给设备! id:"+mesPullingOrder.getId()+ "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; + String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; resultMap.put("message", message); //更新主表状态 源系统为25配料完成 现在-【已发送设备-30】 mesPullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()); 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 f325175..633dea6 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 @@ -89,6 +89,11 @@ public class MesWorkOrderCutService extends BaseMesService impl Map> workOrderListMapByPartNo = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); + MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); + + if (cutScheme == null) + MesException.throwMesBusiException("裁片方案【%s】无效", cutCode); + List cutSchemeMaterialList = getCutSchemeMaterialList(cutCode, organizeCode); if (CollectionUtils.isEmpty(cutSchemeMaterialList)) MesException.throwMesBusiException("裁片方案【%s】缺少原材料配置", cutCode); @@ -116,9 +121,12 @@ public class MesWorkOrderCutService extends BaseMesService impl MesWorkOrder workOrder = workOrders.get(0); - if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) > 0) { - MesException.throwMesBusiException("零件号【%s】工单未完成数量【%s】不满足产成总数【%s】", cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), cutSchemeFg.getQty()); - } + if (!workOrder.getWorkCenterCode().equals(cutScheme.getWorkCenterCode())) + MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", workOrder.getWorkCenterCode(), cutScheme.getWorkCenterCode()); + + if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) > 0) + MesException.throwMesBusiException("零件号【%s】工单未完成数量【%s】不满足产成总数【%s】", + cutSchemeFg.getPartNo(), workOrder.getUnCompleteQty(), cutSchemeFg.getQty()); Double unCompleteQty = workOrder.getUnCompleteQty(); @@ -136,15 +144,18 @@ public class MesWorkOrderCutService extends BaseMesService impl } - MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode); - MesWorkOrderCut workOrderCut = new MesWorkOrderCut(); ConvertBean.serviceModelInitialize(workOrderCut, userName); workOrderCut.setCutCode(cutScheme.getCutCode()); workOrderCut.setCutName(cutScheme.getCutName()); workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()); workOrderCut.setRemark(remark); - workOrderCut.setCutWorkOrderNo(doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName)); + + String cutWorkOrderNo = doGenerateSerialNo(cutScheme.getCutCode(), organizeCode, userName); + + log.info("裁片工单号:{}", cutWorkOrderNo); + + workOrderCut.setCutWorkOrderNo(cutWorkOrderNo); workOrderCut.setOrganizeCode(organizeCode); workOrderCutDetailtList.forEach(o-> o.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo())); @@ -191,6 +202,8 @@ public class MesWorkOrderCutService extends BaseMesService impl if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()) MesException.throwMesBusiException("裁片工单【%】状态不为【%s】,当前状态为【%s】", cutWorkOrderNo, MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue(), MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus())); + workOrderCuts.add(workOrderCutDb); + } for (MesWorkOrderCut workOrderCut : workOrderCuts) { @@ -201,6 +214,27 @@ public class MesWorkOrderCutService extends BaseMesService impl workOrderCutRepository.saveAll(workOrderCuts); } + @Override + public void doPrintCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(cutWorkOrderNos, MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + List workOrderCutDbList = workOrderCutRepository.findByHqlWhere(packBean); + + List cutWorkOrderNoDbList = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutWorkOrderNo).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(cutWorkOrderNoDbList)) MesException.throwMesBusiException("裁片工单不存在"); + + cutWorkOrderNos.removeAll(cutWorkOrderNoDbList); + + if (!CollectionUtils.isEmpty(cutWorkOrderNos)) + MesException.throwMesBusiException("裁片工单【%s】不存在", cutWorkOrderNos); + + List cutCode = workOrderCutDbList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList()); + + + } + private String doGenerateSerialNo(String cutCode, String organizeCode, String userName) { return syncFuncService.syncSerialNo( new GenSerialNoModel(MesExtConstWords.CUT_WORK_ORDER_NO_FUL).dynamicRule(cutCode).year(TimeTool.pareDateToString(MesExtConstWords.DATE_FORMAT_YY, new Date())).organizeCode(organizeCode), 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 12d15d3..210409e 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 @@ -224,7 +224,9 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean); DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); - DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); + if (StringUtil.isEmpty(bean.getWorkOrderStatusQuery())) { + DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkOrderStatusQuery().split(MesExtConstWords.COMMA)), "workOrderStatus", packBean); + } else DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean); DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", packBean); DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(), "createDatetime", packBean); DdlPreparedPack.getStringSmallerPack(bean.getCreateDateTimeEnd(), "createDatetime", packBean); @@ -664,6 +666,10 @@ public class MesWorkOrderService extends BaseMesService implements } item.setWorkCenterCode(mesWorkCenter.getWorkCenterCode()); item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); + //校验产线零件是否存在 + if (!checkWorkCenterPartRelation(item.getWorkCenterCode(),item.getPartNo()) && (StringUtil.isEmpty(item.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag()))){ + MesException.throwMesBusiException(String.format("工单产线【%s】与工单零件【%s】没有维护产线零件关系",mesWorkCenter.getWorkCenterCode(),item.getPartNo())); + } //获取客户物料信息 MesCustomerPart customerPart = null == mesCustomerPartMap ? null : mesCustomerPartMap.get(item.getPartNo()); if (!Objects.isNull(customerPart)) { @@ -1038,15 +1044,21 @@ public class MesWorkOrderService extends BaseMesService implements return; } log.info("关闭工单个数{},工单:{}",mesWorkOrderList.size(),mesWorkOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toList())); - //关闭工单回传 - List partNoAndDataKey = mesWorkOrderList.stream().map(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getPartNo()).add(t.getProductVersion()).add(t.getPlanStartTime().substring(0, 10)).toString()).distinct().collect(Collectors.toList()); - List mesWorkOrderToSapList = new ArrayList<>(); - for (String partNoAndData : partNoAndDataKey) { - MesWorkOrderToSap orderToSap = new MesWorkOrderToSap(organizeCode, partNoAndData.split(MesExtConstWords.COMMA)[0], partNoAndData.split(MesExtConstWords.COMMA)[1], 0d, partNoAndData.split(MesExtConstWords.COMMA)[2]); - ConvertBean.serviceModelInitialize(orderToSap,userName); - mesWorkOrderToSapList.add(orderToSap); - } - mesWorkOrderToSapRepository.saveAll(mesWorkOrderToSapList); + //查询自制件零件 + List partNoList = mesPartSapService.findMesPartSapByPartNoList(mesWorkOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()), organizeCode).stream().filter(t -> t.getIsTestPiece() == CommonEnumUtil.FALSE).map(MesPartSap::getPartNo).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(partNoList)) { + //关闭工单回传 + List partNoAndDataKey = mesWorkOrderList.stream().filter(t -> !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(t.getOrderFlag()) && partNoList.contains(t.getPartNo())).map(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getPartNo()).add(t.getProductVersion()).add(t.getPlanStartTime().substring(0, 10)).toString()).distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(partNoAndDataKey)) { + List mesWorkOrderToSapList = new ArrayList<>(); + for (String partNoAndData : partNoAndDataKey) { + MesWorkOrderToSap orderToSap = new MesWorkOrderToSap(organizeCode, partNoAndData.split(MesExtConstWords.COMMA)[0], partNoAndData.split(MesExtConstWords.COMMA)[1], 0d, partNoAndData.split(MesExtConstWords.COMMA)[2]); + ConvertBean.serviceModelInitialize(orderToSap, userName); + mesWorkOrderToSapList.add(orderToSap); + } + mesWorkOrderToSapRepository.saveAll(mesWorkOrderToSapList); + } + } //关闭工单 baseRDao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus","systemSyncStatus"}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue(),CommonEnumUtil.FALSE}, ddlPackBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java index 6009bae..21c9e0a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java @@ -30,17 +30,9 @@ public class MesEquipmentLogDetailService extends BaseMesService map = new HashMap<>(); for (int i = 0; i < row.size(); i++) { - map.put(read.getHeader().get(i), row.get(i)); + String key = read.getHeader().get(i); + if (key.startsWith("\ufeff")) { + key = key.substring(1); + } + map.put(key, row.get(i)); } mapList.add(map); } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java index 7266a5a..1cb3a62 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java @@ -58,4 +58,5 @@ public class MesCommonConstant { public static final String CLIENT_HANDLE_ID = "CLIENT_HANDLE_ID"; public static final String QC_ORDER_PRINT_TEMPLATE = "QC_ORDER_PRINT_TEMPLATE"; + public static final String MES_PULL_ORDER_NO = "MES_PULL_ORDER_NO"; } 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 66a8837..1384413 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 @@ -257,4 +257,9 @@ public class MesExtConstWords { // 条码 public static final String SN = "sn"; + // 打印状态 + public static final String PRINT_STATUS = "printStatus"; + //客户编码 + public static final String CUST_CODE = "custCode"; + }