diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxManualReportTravelService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxManualReportTravelService.java new file mode 100644 index 0000000..955f8f0 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxManualReportTravelService.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.api.busi.jx; + +import cn.estsh.i3plus.ext.mes.pojo.bean.MesManualReportTravel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; + +public interface IJxManualReportTravelService { + + /** + * 手动报工履历报表 + * @param manualReportTravel + * @return + */ + ListPager queryManualReportTravelByPager(MesManualReportTravel manualReportTravel, Pager pager); + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxWorkOrderService.java new file mode 100644 index 0000000..2db02b0 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/jx/IJxWorkOrderService.java @@ -0,0 +1,49 @@ +package cn.estsh.i3plus.ext.mes.api.busi.jx; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; + +public interface IJxWorkOrderService { + + /** + * 删除返工条码 + * @param workOrderNo + * @return + */ + void deleteSnRepairByType(String workOrderNo, String[] produceSnArr, String organizeCode, String userName); + + /** + * 删除返工条码 + * @param workOrderNo + * @return + */ + void deleteProduceSnRepair(String workOrderNo, String[] produceSnArr, String organizeCode, String userName); + + /** + * 删除返工条码 + * @param workOrderNo + * @return + */ + void deletePackageNoRepair(String workOrderNo, String[] packageNoArr, String organizeCode, String userName); + + /** + * 查询组件返工条码 + * @param workOrderNo + * @return + */ + ListPager queryRepairSnByPager(String workOrderNo, String packageNo, String organizeCode, Pager pager); + + /** + * 查询组件返工条码 + * @param workOrderNo + * @return + */ + ListPager queryRepairPackageByPager(String workOrderNo, String packageNo, String organizeCode, Pager pager); + + /** + * 查询本体返工条码 + * @param workOrderNo + * @return + */ + ListPager queryRepairProduceSnByPager(String workOrderNo, String sn, String organizeCode, Pager pager); +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/bu/BuWorkOrderExtController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/bu/BuWorkOrderExtController.java index bf185ee..9ef085d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/bu/BuWorkOrderExtController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/bu/BuWorkOrderExtController.java @@ -257,7 +257,7 @@ public class BuWorkOrderExtController extends MesBaseController { public ResultBean doBindProduceSn(String produceSnList, String workOrderNo) { boolean flag = true; // 该redis 锁与 解绑条码绑定导入 一致 - String moduleKey = AuthUtil.getOrganize().getOrganizeCode() + ":MES_EXT_IMPORT_MODULE:" + MesExtEnumUtil.MES_EXT_EXCEL.MES_WORK_BIND_UNBIND_SN; + String moduleKey = AuthUtil.getOrganize().getOrganizeCode() + ":MES_EXT_IMPORT_MODULE:" + MesExtEnumUtil.MES_EXT_EXCEL.MES_REWORK_ORDER_BIND_UNBIND_SN; try { if (!doLock(moduleKey)) { flag = false; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/JxManualReportTravelController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/JxManualReportTravelController.java new file mode 100644 index 0000000..1fed052 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/JxManualReportTravelController.java @@ -0,0 +1,46 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base.jx; + +import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxManualReportTravelService; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesManualReportTravel; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +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 io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @PROJECT_NAME: i3plus-mes-panasonic-jx + * @DESCRIPTION: + * @USER: xinwang.yi + * @DATE: 2023-10-27 10:14 + */ +@RestController +@Api(tags = "手动报工 控制层") +@RequestMapping(CommonConstWords.BASE_URL_MES + "/manual-report-travel") +public class JxManualReportTravelController { + + @Autowired + private IJxManualReportTravelService manualReportTravelService; + + @GetMapping(value = "/query-pager") + public ResultBean queryManualReportTravelByPager(MesManualReportTravel manualReportTravel, Pager pager) { + + try { + manualReportTravel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setListPager(manualReportTravelService.queryManualReportTravelByPager(manualReportTravel, pager)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } 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/busi/jx/JxWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/jx/JxWorkOrderController.java new file mode 100644 index 0000000..021de37 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/jx/JxWorkOrderController.java @@ -0,0 +1,68 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.busi.jx; + +import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxWorkOrderService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.impp.framework.base.controller.MesBaseController; +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @PROJECT_NAME: i3plus-mes-panasonic-jx + * @DESCRIPTION: + * @USER: xinwang.yi + * @DATE: 2023-10-30 15:26 + */ +@RestController +@Api(tags = "嘉兴生产工单 控制层") +@RequestMapping(CommonConstWords.BASE_URL_MES + "/jx/work-order") +public class JxWorkOrderController extends MesBaseController { + + @Autowired + private IJxWorkOrderService jxWorkOrderService; + + @PostMapping("/delete-rework-sn") + @ApiOperation("删除返工条码") + public ResultBean deleteProduceSnRepair(String workOrderNo, String[] snArr) { + try { + + ValidatorBean.checkNotNull(workOrderNo, "工单号不能为空"); + ValidatorBean.checkNotNull(snArr, "条码不能为空"); + + jxWorkOrderService.deleteSnRepairByType(workOrderNo, snArr, 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); + } + } + + @GetMapping("/query-repair-sn-by-pager") + @ApiOperation("查询返工条码 组件/本体") + public ResultBean deletePackageSnRepairByPager(String workOrderNo, String sn, Pager pager) { + try { + ValidatorBean.checkNotNull(workOrderNo, "工单号不能为空"); + return ResultBean.success("修改成功") + .setListPager(jxWorkOrderService.queryRepairSnByPager(workOrderNo, sn, AuthUtil.getOrganize().getOrganizeCode(), pager)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } 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/daoimpl/FirstOrderDetailDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/FirstOrderDetailDao.java index 59c8163..8bd255f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/FirstOrderDetailDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/FirstOrderDetailDao.java @@ -35,7 +35,8 @@ public class FirstOrderDetailDao implements IFirstOrderDetailDao { "forder.shiftCode,fdetail.processCode,fdetail.processName,fdetail.checkMessage,fdetail.checkStand,fdetail.checkValue," + "fdetail.checkResult,fdetail.spotCheckUser,fdetail.spotCheckTime,fdetail.teamConfirmUser," + "fdetail.teamConfirmTime,fdetail.qualityConfirmUser,fdetail.qualityConfirmTime,fdetail.orderNo,forder.createDatetime," + - "fdetail.isQualityConfirm,fdetail.isTeamConfirm,fdetail.upLimit,fdetail.downLimit,fdetail.resultValue)" + + "fdetail.isQualityConfirm,fdetail.isTeamConfirm,fdetail.upLimit,fdetail.downLimit,fdetail.resultValue,fdetail.importanceSafePartNo," + + "fdetail.checkFrequency,fdetail.sampleQty,fdetail.confirmMethod)" + " from MesFirstOrderDetail fdetail" + " LEFT JOIN MesOrderJob forder on fdetail.orderNo = forder.orderNo" + " and fdetail.organizeCode = forder.organizeCode and fdetail.isValid = forder.isValid " + @@ -82,6 +83,22 @@ public class FirstOrderDetailDao implements IFirstOrderDetailDao { if (!StringUtils.isEmpty(mesFirstOrderDetail.getCheckResult())) { hql += " and fdetail.checkResult = :checkResult "; } + + if (!StringUtils.isEmpty(mesFirstOrderDetail.getImportanceSafePartNo())) { + hql += " and fdetail.importanceSafePartNo = :importanceSafePartNo "; + } + + if (!StringUtils.isEmpty(mesFirstOrderDetail.getCheckFrequency())) { + hql += " and fdetail.checkFrequency = :checkFrequency "; + } + + if (!StringUtils.isEmpty(mesFirstOrderDetail.getSampleQty())) { + hql += " and fdetail.sampleQty = :sampleQty "; + } + + if (!StringUtils.isEmpty(mesFirstOrderDetail.getConfirmMethod())) { + hql += " and fdetail.confirmMethod = :confirmMethod "; + } hql += " order by fdetail.spotCheckTime desc "; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/PartExtDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/PartExtDao.java index ae79b42..0fd7de6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/PartExtDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/PartExtDao.java @@ -116,7 +116,7 @@ public class PartExtDao implements IPartExtDao { " pe.japanDesc, pe.goodsCode, pe.prefix, pe.qualityAssureCode, pe.identifyCode, pe.snLastCode, pe.fileId, " + " pe.fileOriginName, pe.uploadDatetime, pe.organizeCode, pe.createUser, pe.createDatetime, pe.modifyUser, pe.modifyDatetime, " + " f.fileUrl, pe.packNoPrintTimes, pe.snPrintTimes, pe.bigProcessMatchType, pe.snPrintColumnNumber, pe.isPrintQualityAssureIndia , pe.shiXiangDiCode," + - " pe.model , pe.productNumber , pe.snPackagePrintColumnNumber , pe.bigPackageMatchType , pe.isRepairWorkReport, pe.partPrice ) "); + " pe.model , pe.productNumber , pe.snPackagePrintColumnNumber , pe.bigPackageMatchType , pe.isRepairWorkReport, pe.partPrice, pe.isManualReport ) "); packHqlForQueryPart(hql, partExt); hql.append(" order by pe.modifyDatetime desc "); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/PartExtDataService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/PartExtDataService.java index 5b747ec..9ad1858 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/PartExtDataService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/PartExtDataService.java @@ -266,6 +266,7 @@ public class PartExtDataService implements IPartExtDataService { partExtDb.setSnPackagePrintColumnNumber(partExt.getSnPackagePrintColumnNumber()); partExtDb.setBigPackageMatchType(partExt.getBigPackageMatchType()); partExtDb.setIsRepairWorkReport(partExt.getIsRepairWorkReport()); + partExtDb.setIsManualReport(partExt.getIsManualReport()); new ConvertBeanExt(partExtDb).convertBean(partExtDb); MesPartExt mesPartExt = partExtRepository.save(partExtDb); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/bu/BuWorkOrderExtService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/bu/BuWorkOrderExtService.java index 76dfa58..aabbe93 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/bu/BuWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/bu/BuWorkOrderExtService.java @@ -191,7 +191,7 @@ public class BuWorkOrderExtService implements IBuWorkOrderExtService { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("物料【】不存在",mesWorkOrderExt.getPartNo()) + .setErrorDetail("物料【%s】不存在",mesWorkOrderExt.getPartNo()) .build(); } //如果是返工工单 设置是否生成条码为不生成 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxManualReportTravelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxManualReportTravelService.java new file mode 100644 index 0000000..3057a06 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxManualReportTravelService.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.jx; + +import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxManualReportTravelService; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesManualReportTravel; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesManualReportTravelRepository; +import cn.estsh.i3plus.ext.mes.pojo.sqlpack.MesExtHqlPack; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @PROJECT_NAME: i3plus-mes-panasonic-jx + * @DESCRIPTION: + * @USER: xinwang.yi + * @DATE: 2023-10-27 10:18 + */ +@Service +public class JxManualReportTravelService implements IJxManualReportTravelService { + + @Autowired + private MesManualReportTravelRepository manualReportTravelRepository; + + @Override + public ListPager queryManualReportTravelByPager(MesManualReportTravel manualReportTravel, Pager pager) { + + DdlPackBean packBean = MesExtHqlPack.getMesManualReportTravel(manualReportTravel); + + pager = PagerHelper.getPager(pager, manualReportTravelRepository.findByHqlWhereCount(packBean)); + + packBean.setOrderByStr(manualReportTravel.orderBy()); + + return new ListPager(manualReportTravelRepository.findByHqlWhere(packBean), pager); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxWorkOrderService.java new file mode 100644 index 0000000..574b93e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/jx/JxWorkOrderService.java @@ -0,0 +1,255 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.jx; + +import cn.estsh.i3plus.ext.mes.api.busi.jx.IJxWorkOrderService; +import cn.estsh.i3plus.ext.mes.pojo.bean.*; +import cn.estsh.i3plus.ext.mes.pojo.model.AntiStaticCheckModel; +import cn.estsh.i3plus.ext.mes.pojo.model.jx.JxReworkSnModel; +import cn.estsh.i3plus.ext.mes.pojo.repository.*; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.sqlpack.MesHqlPack; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.data.ldap.DataLdapTest; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @PROJECT_NAME: i3plus-mes-panasonic-jx + * @DESCRIPTION: + * @USER: xinwang.yi + * @DATE: 2023-10-30 15:44 + */ +@Service +public class JxWorkOrderService implements IJxWorkOrderService { + + @Autowired + private MesProduceSnExtRepository produceSnExtRepository; + + @Autowired + private MesWorkOrderExtRepository workOrderExtRepository; + + @Autowired + private MesWorkCenterExtRepository workCenterExtRepository; + + @Autowired + private MesProduceSnRepairRepository produceSnRepairRepository; + + @Autowired + private MesSubassemblyRemadeRecordRepository subassemblyRemadeRecordRepository; + + // 产品条码 + public static final Integer PRODUCT_SN_TYPE = 10; + // 包装条码 + public static final Integer PACKAGE_SN_TYPE = 20; + + @Override + public void deleteSnRepairByType(String workOrderNo, String[] snArr, String organizeCode, String userName) { + + MesWorkCenterExt workCenterExt = getMesWorkCenterExt4WorkOrderNo(workOrderNo); + + if (workCenterExt.getLineType().equals(MesExtEnumUtil.LINE_TYPE.ONTOLOGY_LINE.getDescription())) { + // 本体 + deleteProduceSnRepair(workOrderNo, snArr, organizeCode, userName); + } else { + // 组件 + deletePackageNoRepair(workOrderNo, snArr, organizeCode, userName); + } + } + + @Override + public void deleteProduceSnRepair(String workOrderNo, String[] produceSnArr, String organizeCode, String userName) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, MesExtConstWords.WORK_ORDER_NO, packBean); + DdlPreparedPack.getInPackArray(produceSnArr, MesExtConstWords.PRODUCT_SN, packBean); + List produceSnRepairList = produceSnRepairRepository.findByHqlWhere(packBean); + + Map produceSnRepairListByPs = produceSnRepairList.stream().collect(Collectors.toMap(MesProduceSnRepair::getProductSn, Function.identity(), (x, y) -> y)); + + if (CollectionUtils.isEmpty(produceSnRepairList)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("条码无效") + .build(); + } + + String nowTime = TimeTool.getNowTime(true); + + updateProduceSn(produceSnArr, produceSnRepairListByPs, organizeCode, userName, nowTime); + + for (MesProduceSnRepair produceSnRepair : produceSnRepairList) { + produceSnRepair.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + produceSnRepair.setModifyUser(userName); + produceSnRepair.setModifyDatetime(nowTime); + produceSnRepair.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + } + + produceSnRepairRepository.saveAll(produceSnRepairList); + + } + + @Override + public void deletePackageNoRepair(String workOrderNo, String[] packageNoArr, String organizeCode, String userName) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackArray(packageNoArr, MesExtConstWords.PACKAGENO, packBean); + DdlPreparedPack.getStringEqualPack(workOrderNo, MesExtConstWords.WORK_ORDER_NO, packBean); + List subassemblyRemadeRecordList = subassemblyRemadeRecordRepository.findByHqlWhere(packBean); + + if (CollectionUtils.isEmpty(subassemblyRemadeRecordList)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("返工条码[%s]不存在") + .build(); + } + + for (MesSubassemblyRemadeRecord subassemblyRemadeRecord : subassemblyRemadeRecordList) { + subassemblyRemadeRecord.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + ConvertBean.serviceModelUpdate(subassemblyRemadeRecord, userName); + subassemblyRemadeRecord.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + } + + subassemblyRemadeRecordRepository.saveAll(subassemblyRemadeRecordList); + } + + @Override + public ListPager queryRepairSnByPager(String workOrderNo, String sn, String organizeCode, Pager pager) { + + MesWorkCenterExt workCenterExt = getMesWorkCenterExt4WorkOrderNo(workOrderNo); + + if (workCenterExt.getLineType().equals(MesExtEnumUtil.LINE_TYPE.ONTOLOGY_LINE.getDescription())) { + + // 本体 + return queryRepairProduceSnByPager(workOrderNo, sn, organizeCode, pager); + + } else { + + // 组件 + return queryRepairPackageByPager(workOrderNo, sn, organizeCode, pager); + + } + } + + private MesWorkCenterExt getMesWorkCenterExt4WorkOrderNo(String workOrderNo) { + MesWorkOrderExt workOrderExt = workOrderExtRepository.getByProperty( + new String[]{MesExtConstWords.ORDER_NO, MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID}, + new Object[]{workOrderNo, AuthUtil.getOrganize().getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}); + + if (workOrderExt == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("工单[%s]不存在", workOrderNo) + .build(); + } + + if (StringUtils.isEmpty(workOrderExt.getWorkCenterCode())) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("工单[%s]未维护产线") + .build(); + } + + MesWorkCenterExt workCenterExt = workCenterExtRepository.getByProperty( + new String[]{MesExtConstWords.WORK_CENTER_CODE, MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID}, + new Object[]{workOrderExt.getWorkCenterCode(), AuthUtil.getOrganize().getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}); + + if (workCenterExt == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("产线[%s]不存在", workOrderExt.getWorkCenterCode()) + .build(); + } + return workCenterExt; + } + + @Override + public ListPager queryRepairPackageByPager(String workOrderNo, String packageNo, String organizeCode, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, MesExtConstWords.WORK_ORDER_NO, packBean); + DdlPreparedPack.getStringEqualPack(packageNo, MesExtConstWords.PACKAGENO, packBean); + pager = PagerHelper.getPager(pager, subassemblyRemadeRecordRepository.findByHqlWhereCount(packBean)); + packBean.setOrderByStr(" order by modifyDatetime desc "); + List subassemblyRemadeRecordList = subassemblyRemadeRecordRepository.findByHqlWherePage(packBean, pager); + + List jxReworkSnModels = new ArrayList<>(); + + for (MesSubassemblyRemadeRecord subassemblyRemadeRecord : subassemblyRemadeRecordList) { + JxReworkSnModel jxReworkSnModel = new JxReworkSnModel(); + jxReworkSnModel.setWorkOrderNo(workOrderNo); + jxReworkSnModel.setSn(subassemblyRemadeRecord.getPackageNo()); + jxReworkSnModels.add(jxReworkSnModel); + } + + return new ListPager(jxReworkSnModels, pager); + } + + @Override + public ListPager queryRepairProduceSnByPager(String workOrderNo, String sn, String organizeCode, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, MesExtConstWords.WORK_ORDER_NO, packBean); + DdlPreparedPack.getStringEqualPack(sn, MesExtConstWords.PRODUCT_SN, packBean); + pager = PagerHelper.getPager(pager, produceSnRepairRepository.findByHqlWhereCount(packBean)); + packBean.setOrderByStr(" order by modifyDatetime desc "); + List produceSnRepairList = produceSnRepairRepository.findByHqlWherePage(packBean, pager); + List jxReworkSnModels = new ArrayList<>(); + + for (MesProduceSnRepair produceSnRepair : produceSnRepairList) { + JxReworkSnModel jxReworkSnModel = new JxReworkSnModel(); + jxReworkSnModel.setWorkOrderNo(workOrderNo); + jxReworkSnModel.setSn(produceSnRepair.getProductSn()); + jxReworkSnModels.add(jxReworkSnModel); + } + + return new ListPager(jxReworkSnModels, pager); + } + + private void updateProduceSn(String[] productSnArr, Map produceSnRepairListByPs, + String organizeCode, String userName, String nowTime) { + DdlPackBean packBean1 = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackArray(productSnArr, MesExtConstWords.PRODUCT_SN, packBean1); + List produceSnExtList = produceSnExtRepository.findByHqlWhere(packBean1); + + for (MesProduceSnExt produceSnExt : produceSnExtList) { + if (produceSnRepairListByPs.containsKey(produceSnExt.getProductSn())) { + produceSnExt.setLastWorkOrderNo(produceSnRepairListByPs.get(produceSnExt.getProductSn()).getInitWorkOrderNo()); + produceSnExt.setModifyUser(userName); + produceSnExt.setModifyUserExt(userName); + produceSnExt.setModifyDatetime(nowTime); + produceSnExt.setModifyUserExt(nowTime); + produceSnExt.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + produceSnExt.setSystemSyncStatusExt(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + } else { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("返工条码[%s]不存在", produceSnExt.getProductSn()) + .build(); + } + } + + produceSnExtRepository.saveAll(produceSnExtList); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/PartExtExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/PartExtExcelService.java index 7689cc3..31175ec 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/PartExtExcelService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/PartExtExcelService.java @@ -427,6 +427,13 @@ public class PartExtExcelService implements IExcelImportExtService { } catch (Exception e) { } + //是否可手动报工 + String isManualReport = null; + try { + row.getCell(36).setCellType(CellType.STRING); + isRepairWorkReport = row.getCell(36, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } boolean isExist = false; //校验物料代码不重复 @@ -681,6 +688,14 @@ public class PartExtExcelService implements IExcelImportExtService { } } + if (!StringUtils.isEmpty(isRepairWorkReport)) { + if (StringUtils.isEmpty(MesExtEnumUtil.IS_REPAIR_WORK_REPORT.valueOfDescription(Integer.parseInt(isRepairWorkReport)))) { + ++errorNum; + cellNum = cellNum + "AJ;"; + errorInfo = errorInfo + "第AJ列数据无效;"; + } + } + if (errorNum == 0) { MesPartExt mesPart; if (isExist) { @@ -773,6 +788,7 @@ public class PartExtExcelService implements IExcelImportExtService { mesPart.setSnPackagePrintColumnNumber(StringUtils.isEmpty(snPackagePrintColumnNumber) ? 0 : Integer.parseInt(snPackagePrintColumnNumber)); mesPart.setBigPackageMatchType(StringUtils.isEmpty(bigPackageMatchType) ? MesExtEnumUtil.ENCODE_MATCH_TYPE.PART.getValue() : MesExtEnumUtil.ENCODE_MATCH_TYPE.descriptionOfValue(bigPackageMatchType)); mesPart.setIsRepairWorkReport(StringUtils.isEmpty(isRepairWorkReport) ? MesExtEnumUtil.IS_REPAIR_WORK_REPORT.YES.getValue() : Integer.parseInt(isRepairWorkReport)); + mesPart.setIsManualReport(StringUtils.isEmpty(isManualReport) ? MesExtEnumUtil.IS_MANUAL_REPORT.YES.getValue() : Integer.parseInt(isManualReport)); new ConvertBeanExt(mesPart).convertBean(mesPart); partExtList.add(mesPart); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/ProcessFirstItemExtExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/ProcessFirstItemExtExcelService.java index f59b479..ac6a218 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/ProcessFirstItemExtExcelService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/ProcessFirstItemExtExcelService.java @@ -154,7 +154,7 @@ public class ProcessFirstItemExtExcelService implements IExcelImportExtService { String manageType = null; try { row.getCell(2).setCellType(CellType.STRING); - partNo = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + manageType = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } @@ -162,7 +162,7 @@ public class ProcessFirstItemExtExcelService implements IExcelImportExtService { String importanceSafePartNo = null; try { row.getCell(3).setCellType(CellType.STRING); - partNo = row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + importanceSafePartNo = row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } @@ -178,7 +178,7 @@ public class ProcessFirstItemExtExcelService implements IExcelImportExtService { String checkFrequency = null; try { row.getCell(5).setCellType(CellType.STRING); - partNo = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + checkFrequency = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } @@ -186,7 +186,7 @@ public class ProcessFirstItemExtExcelService implements IExcelImportExtService { String sampleQty = null; try { row.getCell(6).setCellType(CellType.STRING); - partNo = row.getCell(6, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + sampleQty = row.getCell(6, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } @@ -194,31 +194,31 @@ public class ProcessFirstItemExtExcelService implements IExcelImportExtService { String confirmMethod = null; try { row.getCell(7).setCellType(CellType.STRING); - partNo = row.getCell(7, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + confirmMethod = row.getCell(7, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //检测标准 String checkStand = null; try { - row.getCell(4).setCellType(CellType.STRING); - checkStand = row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(8).setCellType(CellType.STRING); + checkStand = row.getCell(8, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //上限值 String upLimits = null; try { - row.getCell(5).setCellType(CellType.STRING); - upLimits = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(9).setCellType(CellType.STRING); + upLimits = row.getCell(9, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //下限值 String downLimits = null; try { - row.getCell(5).setCellType(CellType.STRING); - downLimits = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(10).setCellType(CellType.STRING); + downLimits = row.getCell(10, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } @@ -254,7 +254,7 @@ public class ProcessFirstItemExtExcelService implements IExcelImportExtService { if (StringUtils.isEmpty(manageType)) { errorNum++; cellNum += "C;"; - errorInfo += "第C列数据必填;"; + errorInfo += "第C列数据无效;"; } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/bu3/SxWorkOrderBindUnbindSnExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/bu3/SxWorkOrderBindUnbindSnExcelService.java deleted file mode 100644 index 7ea73de..0000000 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/bu3/SxWorkOrderBindUnbindSnExcelService.java +++ /dev/null @@ -1,385 +0,0 @@ -package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.bu3; - -import cn.estsh.i3plus.ext.mes.api.base.IExcelImportExtService; -import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.CommonExtService; -import cn.estsh.i3plus.ext.mes.pojo.bean.*; -import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportErrorExtModel; -import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportResultExtModel; -import cn.estsh.i3plus.ext.mes.pojo.repository.*; -import cn.estsh.i3plus.ext.mes.pojo.util.ConvertBeanExt; -import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; -import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.platform.common.tool.MathOperation; -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.tool.DdlPreparedPack; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; -import org.springframework.beans.BeanUtils; -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.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * @Description : 解绑条码绑定导入 - * @Reference : - * @Author : wangjie - * @CreateDate : 2019-04-23 - * @Modify: - **/ -@Service -public class SxWorkOrderBindUnbindSnExcelService implements IExcelImportExtService { - - @Autowired - private MesProduceSnExtRepository produceSnExtRepository; - - @Autowired - private MesWorkOrderExtRepository workOrderExtRepository; - - @Autowired - private MesUnbindProduceSnRepository unBindProduceSnRepository; - - @Autowired - private MesUnbindProduceSnTravelRepository unBindProduceSnTravelRepository; - - @Autowired - private CommonExtService commonExtService; - - /** - * SOP导入 - * @param workbook - * @param organizeCode - * @param userName - * @return - */ - @Override - public ExcelImportResultExtModel insertDataByExcel(Workbook workbook, String organizeCode, String userName) { - //读取表格 - ExcelImportResultExtModel excelImportResultExtModel = this.sheetExtractUnbindSnBind(workbook.getSheetAt(0), organizeCode, userName); - return excelImportResultExtModel; - } - - /** - * SOP导入-读取表格 - * @param sheetAt - * @param organizeCode - * @param userName - * @return - */ - private ExcelImportResultExtModel sheetExtractUnbindSnBind(Sheet sheetAt, String organizeCode, String userName) { - //从0行开始读取 - int totalNumberOfRows = sheetAt.getLastRowNum() + 1; - - Map workOrderMapByOrderNo = new HashMap<>(); - // 工单待绑定条码数量 - Map boundProdSnQtyMapByOrderNo = new HashMap<>(); - // 工单已绑定数量 - //Map> produceSnMapByOrderNo = new HashMap<>(); - Map existProduceSnMap = new HashMap<>(); - List produceSnDbList = new ArrayList<>(); - List unBindProduceSnDbList = new ArrayList<>(); - List unBindProduceSnTravelList = new ArrayList<>(); - - // 根据物料编码分组解绑条码集合 - Map> unbindProduceSnMapByPartNo = new HashMap<>(); - - //成功数量 - Integer successRowNum = 0; - //失败数量 - Integer failRowNum = 0; - //错误的行号 - String errorRows = ""; - - //错误行信息集合 - List excelImportErrorExtModels = new ArrayList<>(); - - String nowTime = TimeTool.getNowTime(MesExtConstWords.DATE_FORMAT_YM); - - //从excel表的第5行数据开始导入,getFirstRowNum是从0行开始读取 - for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i++) { - Row row = sheetAt.getRow(i); - //空行跳过 - if (null == row) { - continue; - } - - //获取总列数 - Short lastCellNum = row.getLastCellNum(); - if (lastCellNum > 0) { - - int rowNum = i + 1; //当前行号 - int errorNum = 0; //错误数量 - String cellNum = ""; //错误列号 - String errorInfo = ""; //错误信息 - - //工单号 - try { - //第一列必须有值,否则跳过 - row.getCell(0).setCellType(CellType.STRING); - } catch (Exception e) { - continue; - } - String workOrderNo = row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); - //本体条码 - String produceSn = null; - try { - row.getCell(1).setCellType(CellType.STRING); - produceSn = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); - } catch (Exception e) { - } - - MesWorkOrderExt workOrderExt = null; - - //校验工单是否为空 - if (StringUtils.isEmpty(workOrderNo)) { - errorNum ++; - cellNum += "A;"; - errorInfo += "第A列数据必填;"; - } else { - //校验工单是否存在,如果不存在则从数据库获取,如果存在则从集合中获取 - if (!workOrderMapByOrderNo.containsKey(workOrderNo)) { - - workOrderExt = workOrderExtRepository.getByProperty( - new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.ORDER_NO}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workOrderNo}); - - if (workOrderExt == null) { - errorNum ++; - cellNum += "A;"; - errorInfo += "第A列数据不存在;"; - } else if (workOrderExt.getWorkOrderStatus() != MesExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue()) { - errorNum ++; - cellNum += "A;"; - errorInfo += "第A列数据当前状态为【"+ MesExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()) +"】,不为【创建】状态;"; - } else if (workOrderExt.getPlanQty() != 0) { - errorNum ++; - cellNum += "A;"; - errorInfo += "第A列数据当前存在改造数量;"; - } else if (workOrderExt.getWorkOrderType() != MesExtEnumUtil.WORK_ORDER_TYPE.STANDARD_ORDER.getValue()) { - errorNum ++; - cellNum += "A;"; - errorInfo += "第A列数据不为正常工单;"; - } else { - - List produceSnExtList = produceSnExtRepository.findByProperty( - new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.WORK_ORDER_NO}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workOrderNo}); - - Double boundSnQty = MathOperation.sub(MathOperation.sub(workOrderExt.getQty(), workOrderExt.getPlanQty()), produceSnExtList.size()); - - if (boundSnQty <= 0) { - errorNum ++; - cellNum += "A;"; - errorInfo += "第A列工单:" + workOrderNo + "已绑定足额条码,无需再绑定;"; - } else { - workOrderMapByOrderNo.put(workOrderNo, workOrderExt); - boundProdSnQtyMapByOrderNo.put(workOrderNo, boundSnQty); - } - } - - } else { - workOrderExt = workOrderMapByOrderNo.get(workOrderNo); - } - } - - MesUnbindProduceSn unbindProduceSn = null; - - MesProduceSnExt produceSnExt = null; - - if (errorNum == 0) { - //校验播放时长 - if (StringUtils.isEmpty(produceSn)) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据必填;"; - } else if (existProduceSnMap.containsKey(produceSn)) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据与 "+ existProduceSnMap.get(produceSn) +"行B列重复;"; - } else { - - Map unbindProduceSnMapBySn; - - if (unbindProduceSnMapByPartNo.containsKey(workOrderExt.getPartNo())) { - unbindProduceSnMapBySn = unbindProduceSnMapByPartNo.get(workOrderExt.getPartNo()); - - if (unbindProduceSnMapBySn.containsKey(produceSn)) { - unbindProduceSn = unbindProduceSnMapBySn.get(produceSn); - - if (unbindProduceSn.getBindStatus() == MesExtEnumUtil.BIND_STATUS.BINGDING.getValue()) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据已绑定工单:"+ unbindProduceSn.getWorkOrderNo() +";"; - } else { - Double boundSnQty = boundProdSnQtyMapByOrderNo.get(workOrderNo); - boundSnQty--; - // 判断该行条码是否已超工单计划数量 - if (boundSnQty < 0 ) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据已超工单计划数量,请重新调整导入;"; - } else { - - produceSnExt = produceSnExtRepository.getByProperty( - new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.SERIAL_NUMBER}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), produceSn}); - - if (produceSnExt == null) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据本体条码已不存在;"; - } - - boundProdSnQtyMapByOrderNo.put(workOrderNo, boundSnQty); - } - } - - - } else { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据无效;"; - } - - } else { - List unbindProduceSnList = getMesUnbindProduceSns(organizeCode, nowTime, workOrderExt); - if (CollectionUtils.isEmpty(unbindProduceSnList)) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据不存在;"; - } else { - unbindProduceSnMapBySn = unbindProduceSnList.stream().collect(Collectors.toMap( MesUnbindProduceSn::getSerialNumber, Function.identity(), (x, y) -> y)); - if (unbindProduceSnMapBySn.containsKey(produceSn)) { - unbindProduceSnMapByPartNo.put(workOrderExt.getPartNo(), unbindProduceSnMapBySn); - unbindProduceSn = unbindProduceSnMapBySn.get(produceSn); - if (unbindProduceSnMapBySn.containsKey(produceSn)) { - if (unbindProduceSn.getBindStatus() == MesExtEnumUtil.BIND_STATUS.BINGDING.getValue()) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据已绑定工单:"+ unbindProduceSn.getWorkOrderNo() +";"; - } else { - Double boundSnQty = boundProdSnQtyMapByOrderNo.get(workOrderNo); - boundSnQty--; - if (boundSnQty < 0 ) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据已超工单计划数量,请重新调整导入;"; - } else { - - produceSnExt = produceSnExtRepository.getByProperty( - new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.SERIAL_NUMBER}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), produceSn}); - - if (produceSnExt == null) { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据本体条码已不存在;"; - } - - boundProdSnQtyMapByOrderNo.put(workOrderNo, boundSnQty); - - } - } - } else { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据不存在;"; - } - - } else { - errorNum ++; - cellNum += "B;"; - errorInfo += "第B列数据不存在;"; - } - } - } - } - } - - //没有错误的时候,封装MesUnbindProduceSn - if (errorNum == 0) { - - // 记录已录入条码 - existProduceSnMap.put(produceSn, rowNum); - - produceSnExt.setWorkOrderNo(workOrderNo); - produceSnExt.setLastWorkOrderNo(workOrderNo); - produceSnExt.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); - ConvertBean.serviceModelUpdate(produceSnExt, userName); - new ConvertBeanExt(produceSnExt).convertBean(produceSnExt); - produceSnDbList.add(produceSnExt); - - unbindProduceSn.setWorkOrderNo(workOrderNo); - unbindProduceSn.setBindStatus(MesExtEnumUtil.BIND_STATUS.BINGDING.getValue()); - unbindProduceSn.setWorkCenterCode(workOrderExt.getWorkCenterCode()); - unbindProduceSn.setStartTime(workOrderExt.getStartTime()); - unbindProduceSn.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); - ConvertBean.serviceModelUpdate(unbindProduceSn, userName); - unBindProduceSnDbList.add(unbindProduceSn); - MesUnbindProduceSnTravel unbindProduceSnTravel = new MesUnbindProduceSnTravel(); - BeanUtils.copyProperties(unbindProduceSn, unbindProduceSnTravel, MesExtConstWords.ID, MesExtConstWords.CREATE_USER, MesExtConstWords.CREATE_DATE_TIME, MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME); - ConvertBean.serviceModelUpdate(unbindProduceSnTravel, userName); - unBindProduceSnTravelList.add(unbindProduceSnTravel); - successRowNum ++; - } else { - //封装错误行信息ExcelImportErrorExtModel - excelImportErrorExtModels = commonExtService.getExcelImportErrorModels(excelImportErrorExtModels, rowNum, errorNum, cellNum, errorInfo); - - errorRows += rowNum + ";"; - failRowNum ++; - } - } - } - - //校验EXCEL数据 - commonExtService.checkExcelData(failRowNum, successRowNum, errorRows); - - //封装返回结果 - ExcelImportResultExtModel excelImportResultExtModel = commonExtService.getExcelImportResultModel(failRowNum, successRowNum, excelImportErrorExtModels, errorRows); - excelImportResultExtModel.setExcelList((failRowNum > 0) ? null : unBindProduceSnDbList); - - List workOrderExtList = new ArrayList<>(); - for (Map.Entry workBoundProdSnQty : boundProdSnQtyMapByOrderNo.entrySet()) { - if (workBoundProdSnQty.getValue() == 0) { - MesWorkOrderExt workOrderExt = workOrderMapByOrderNo.get(workBoundProdSnQty.getKey()); - workOrderExt.setSnCreateStatus(MesExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.CREATED.getValue()); - new ConvertBeanExt(workOrderExt).convertBean(workOrderExt); - workOrderExtList.add(workOrderExt); - } - } - - if (failRowNum == 0) { - insertExcelMesUnbindProduce(unBindProduceSnDbList, unBindProduceSnTravelList, produceSnDbList, workOrderExtList); - } - return excelImportResultExtModel; - } - - private List getMesUnbindProduceSns(String organizeCode, String nowTime, MesWorkOrderExt workOrderExt) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringRightLikerPack(nowTime, MesExtConstWords.START_TIME, packBean); - DdlPreparedPack.getStringEqualPack(workOrderExt.getPartNo(), MesExtConstWords.PART_NO, packBean); - return unBindProduceSnRepository.findByHqlWhere(packBean); - } - - /** - * 已解绑条码绑定工单导入-数据入库 - * @param unbindProduceSns - * @param unbindProduceSnTravels - */ - private void insertExcelMesUnbindProduce(List unbindProduceSns, List unbindProduceSnTravels, List produceSnExtList, List workOrderExtList) { - //导入数据 - if (!CollectionUtils.isEmpty(unbindProduceSns)) unBindProduceSnRepository.saveAll(unbindProduceSns); - if (!CollectionUtils.isEmpty(unbindProduceSnTravels)) unBindProduceSnTravelRepository.saveAll(unbindProduceSnTravels); - if (!CollectionUtils.isEmpty(produceSnExtList)) produceSnExtRepository.saveAll(produceSnExtList); - if (!CollectionUtils.isEmpty(workOrderExtList)) workOrderExtRepository.saveAll(workOrderExtList); - } -} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/SxReworkOrderBindSnExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/SxReworkOrderBindSnExcelService.java new file mode 100644 index 0000000..8e96f82 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/SxReworkOrderBindSnExcelService.java @@ -0,0 +1,356 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.jx; + +import cn.estsh.i3plus.ext.mes.api.base.IExcelImportExtService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.CommonExtService; +import cn.estsh.i3plus.ext.mes.pojo.bean.*; +import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportErrorExtModel; +import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportResultExtModel; +import cn.estsh.i3plus.ext.mes.pojo.repository.*; +import cn.estsh.i3plus.ext.mes.pojo.util.ConvertBeanExt; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.beans.BeanUtils; +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.*; +/** + * @Description : 解绑条码绑定导入 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-04-23 + * @Modify: + **/ +@Service +public class SxReworkOrderBindSnExcelService implements IExcelImportExtService { + + @Autowired + private MesProduceSnExtRepository produceSnExtRepository; + + @Autowired + private MesProduceSnRepairRepository produceSnRepairRepository; + + @Autowired + private MesWorkOrderExtRepository workOrderExtRepository; + + @Autowired + private MesReworkOrderBindSnTravelRepository reworkOrderBindSnTravelRepository; + + @Autowired + private CommonExtService commonExtService; + + /** + * SOP导入 + * @param workbook + * @param organizeCode + * @param userName + * @return + */ + @Override + public ExcelImportResultExtModel insertDataByExcel(Workbook workbook, String organizeCode, String userName) { + //读取表格 + ExcelImportResultExtModel excelImportResultExtModel = this.sheetExtractUnbindSnBind(workbook.getSheetAt(0), organizeCode, userName); + return excelImportResultExtModel; + } + + /** + * SOP导入-读取表格 + * @param sheetAt + * @param organizeCode + * @param userName + * @return + */ + private ExcelImportResultExtModel sheetExtractUnbindSnBind(Sheet sheetAt, String organizeCode, String userName) { + //从0行开始读取 + int totalNumberOfRows = sheetAt.getLastRowNum() + 1; + + Map workOrderMapByOrderNo = new HashMap<>(); + Map finalWorkOrderNoBySn = new HashMap<>(); + // 工单待绑定条码数量 + Map boundProdSnQtyMapByOrderNo = new HashMap<>(); + // 工单已绑定数量 + //Map> produceSnMapByOrderNo = new HashMap<>(); + Map existProduceSnMap = new HashMap<>(); + List produceSnDbList = new ArrayList<>(); + List produceSnRepairList = new ArrayList<>(); + List reworkOrderBindSnTravelList = new ArrayList<>(); + + //成功数量 + Integer successRowNum = 0; + //失败数量 + Integer failRowNum = 0; + //错误的行号 + String errorRows = ""; + + //错误行信息集合 + List excelImportErrorExtModels = new ArrayList<>(); + + //String nowTime = TimeTool.getNowTime(MesExtConstWords.DATE_FORMAT_YM); + + //从excel表的第5行数据开始导入,getFirstRowNum是从0行开始读取 + for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i++) { + Row row = sheetAt.getRow(i); + //空行跳过 + if (null == row) { + continue; + } + + //获取总列数 + Short lastCellNum = row.getLastCellNum(); + if (lastCellNum > 0) { + + int rowNum = i + 1; //当前行号 + int errorNum = 0; //错误数量 + String cellNum = ""; //错误列号 + String errorInfo = ""; //错误信息 + + //工单号 + try { + //第一列必须有值,否则跳过 + row.getCell(0).setCellType(CellType.STRING); + } catch (Exception e) { + continue; + } + String workOrderNo = row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + //本体条码 + String produceSn = null; + try { + row.getCell(1).setCellType(CellType.STRING); + produceSn = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + + MesWorkOrderExt workOrderExt = null; + + //校验工单是否为空 + if (StringUtils.isEmpty(workOrderNo)) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据必填;"; + } else { + //校验工单是否存在,如果不存在则从数据库获取,如果存在则从集合中获取 + workOrderExt = getMesWorkOrderExt(organizeCode, workOrderMapByOrderNo, workOrderNo); + + if (workOrderExt == null) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据不存在;"; + } else if (workOrderExt.getWorkOrderStatus() != MesExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue()) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据当前状态为【"+ MesExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()) +"】,不为【创建】状态;"; + } else if (workOrderExt.getPlanQty() != 0) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据当前存在改造数量;"; + } else if (workOrderExt.getWorkOrderType() != MesExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue()) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据不为返工工单;"; + } else { + + Double boundSnQty = getBoundSnQty(organizeCode, boundProdSnQtyMapByOrderNo, workOrderNo); + + if (boundSnQty > workOrderExt.getQty()) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列工单:" + workOrderNo + "已绑定足额条码,无需再绑定;"; + } else { + workOrderMapByOrderNo.put(workOrderNo, workOrderExt); + boundProdSnQtyMapByOrderNo.put(workOrderNo, boundSnQty); + } + } + } + + MesProduceSnExt produceSnExt = null; + + if (errorNum == 0) { + //校验播放时长 + if (StringUtils.isEmpty(produceSn)) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据必填;"; + } else if (existProduceSnMap.containsKey(produceSn)) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据与 "+ existProduceSnMap.get(produceSn) +"行B列重复;"; + } else { + + produceSnExt = produceSnExtRepository.getByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.PRODUCT_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), produceSn}); + + if (null == produceSnExt) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + produceSn + "]不存在;"; + } else { + if (MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() != produceSnExt.getSnStatus()) { + if (MesExtEnumUtil.PRODUCE_SN_STATUS.REPAIR.getValue() == produceSnExt.getSnStatus()) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + produceSn +"]状态为返工,已绑定返工工单["+ produceSnExt.getLastWorkOrderNo() + "];"; + } else { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + produceSn + "]状态为["+ MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSnExt.getSnStatus()) + "];"; + } + } + + if (MesExtEnumUtil.PRODUCE_SN_QC_STATUS.QUALIFIED.getValue() != produceSnExt.getQcStatus()) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + produceSn +"]质量状态为["+ MesExtEnumUtil.PRODUCE_SN_QC_STATUS.valueOfDescription(produceSnExt.getQcStatus()) + "];"; + } + + if (!produceSnExt.getPartNo().equals(workOrderExt.getPartNo())) { + errorNum ++; + cellNum += "B;"; + errorInfo += "工单[" + workOrderNo +"]关联的物料编码["+ workOrderExt.getPartNo() +"]与产品条码["+ produceSnExt.getProductSn() +"]关联的物料编码["+ produceSnExt.getPartNo() +"]不一致;"; + } + + MesProduceSnRepair produceSnRepairBySn = getProduceSnRepairBySn(organizeCode, produceSn); + + if (produceSnRepairBySn != null) { + if (produceSnRepairBySn.getWorkOrderNo().equals(workOrderNo)) { + errorNum ++; + cellNum += "B;"; + errorInfo += "条码["+ produceSnExt.getProductSn() +"]已经绑定过返工工单["+ produceSnRepairBySn.getWorkOrderNo() +"];"; + } else if (StringUtils.isEmpty(produceSnRepairBySn.getOutWorkCenterTime())) { + errorNum ++; + cellNum += "B;"; + errorInfo += "条码["+ produceSnExt.getProductSn() +"]已经绑定过其他的返工工单["+ workOrderNo +"]且未下线;"; + } + } + } + } + } + + //没有错误的时候,封装MesUnbindProduceSn + if (errorNum == 0) { + + // 记录已录入条码 + existProduceSnMap.put(produceSn, rowNum); + + MesProduceSnRepair produceSnRepair = new MesProduceSnRepair(); + produceSnRepair.setSerialNumber(produceSnExt.getSerialNumber()); + produceSnRepair.setProductSn(produceSnExt.getProductSn()); + produceSnRepair.setPartNo(produceSnExt.getPartNo()); + produceSnRepair.setPartNameRdd(produceSnExt.getPartNameRdd()); + produceSnRepair.setWorkCenterCode(workOrderExt.getWorkCenterCode()); + produceSnRepair.setWorkOrderNo(workOrderNo); + produceSnRepair.setInitWorkOrderNo(produceSnExt.getLastWorkOrderNo()); + produceSnRepair.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.REWORK_SN.getValue()); + produceSnRepair.setOrganizeCode(organizeCode); + ConvertBean.serviceModelInitialize(produceSnRepair, userName); + produceSnRepair.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + + MesReworkOrderBindSnTravel reworkOrderBindSnTravel = new MesReworkOrderBindSnTravel(); + BeanUtils.copyProperties(produceSnRepair, reworkOrderBindSnTravel); + reworkOrderBindSnTravel.setBindStatus(MesExtEnumUtil.BIND_STATUS.BINGDING.getValue()); + reworkOrderBindSnTravelList.add(reworkOrderBindSnTravel); + produceSnRepairList.add(produceSnRepair); + + finalWorkOrderNoBySn.put(produceSnExt.getProductSn(), workOrderNo); + + produceSnDbList.add(produceSnExt); + successRowNum ++; + } else { + //封装错误行信息ExcelImportErrorExtModel + excelImportErrorExtModels = commonExtService.getExcelImportErrorModels(excelImportErrorExtModels, rowNum, errorNum, cellNum, errorInfo); + + errorRows += rowNum + ";"; + failRowNum ++; + } + } + } + + //校验EXCEL数据 + commonExtService.checkExcelData(failRowNum, successRowNum, errorRows); + + //封装返回结果 + ExcelImportResultExtModel excelImportResultExtModel = commonExtService.getExcelImportResultModel(failRowNum, successRowNum, excelImportErrorExtModels, errorRows); + + List workOrderExtList = new ArrayList<>(); + for (Map.Entry workBoundProdSnQty : boundProdSnQtyMapByOrderNo.entrySet()) { + if (workBoundProdSnQty.getValue() == 0) { + MesWorkOrderExt workOrderExt = workOrderMapByOrderNo.get(workBoundProdSnQty.getKey()); + workOrderExt.setSnCreateStatus(MesExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.NO_CREATE.getValue()); + new ConvertBeanExt(workOrderExt).convertBean(workOrderExt); + workOrderExtList.add(workOrderExt); + } + } + + if (failRowNum == 0) { + + for (MesProduceSnExt produceSnExt : produceSnDbList) { + ConvertBean.serviceModelUpdate(produceSnExt, userName); + new ConvertBeanExt(produceSnExt).convertBean(produceSnExt); + produceSnExt.setLastWorkOrderNo(finalWorkOrderNoBySn.get(produceSnExt.getProductSn())); + produceSnExt.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + } + + insertExcel(produceSnDbList, workOrderExtList, produceSnRepairList, reworkOrderBindSnTravelList); + } + return excelImportResultExtModel; + } + + private Double getBoundSnQty(String organizeCode, Map boundProdSnQtyMapByOrderNo, String workOrderNo) { + if (boundProdSnQtyMapByOrderNo.containsKey(workOrderNo)) { + return boundProdSnQtyMapByOrderNo.get(workOrderNo); + } else { + List produceSnRepairDbList = produceSnRepairRepository.findByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.WORK_ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workOrderNo}); + + return CollectionUtils.isEmpty(produceSnRepairDbList) ? 0.0 : produceSnRepairDbList.size(); + } + } + + private MesWorkOrderExt getMesWorkOrderExt(String organizeCode, Map workOrderMapByOrderNo, String workOrderNo) { + MesWorkOrderExt workOrderExt; + if (!workOrderMapByOrderNo.containsKey(workOrderNo)) { + + workOrderExt = workOrderExtRepository.getByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workOrderNo}); + } else { + workOrderExt = workOrderMapByOrderNo.get(workOrderNo); + } + return workOrderExt; + } + + /** + * 已解绑条码绑定工单导入-数据入库 + * @param produceSnExtList 产品条码 + * @param workOrderExtList 工单 + * @param produceSnRepairList 返修条码 + * @param reworkOrderBindSnTravelList 返工工单绑定条码履历 + */ + private void insertExcel(List produceSnExtList, List workOrderExtList, List produceSnRepairList, List reworkOrderBindSnTravelList) { + //导入数据 + if (!CollectionUtils.isEmpty(produceSnExtList)) produceSnExtRepository.saveAll(produceSnExtList); + if (!CollectionUtils.isEmpty(workOrderExtList)) workOrderExtRepository.saveAll(workOrderExtList); + if (!CollectionUtils.isEmpty(produceSnRepairList)) produceSnRepairRepository.saveAll(produceSnRepairList); + if (!CollectionUtils.isEmpty(reworkOrderBindSnTravelList)) reworkOrderBindSnTravelRepository.saveAll(reworkOrderBindSnTravelList); + } + + private MesProduceSnRepair getProduceSnRepairBySn(String organizeCode, String productSn) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) { + return null; + } + List produceSnRepairList = produceSnRepairRepository.findByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.PRODUCT_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn}, + " order by createDatetime desc "); + return !CollectionUtils.isEmpty(produceSnRepairList) ? produceSnRepairList.get(0) : null; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/SxReworkOrderBindZjSnExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/SxReworkOrderBindZjSnExcelService.java new file mode 100644 index 0000000..193d2f5 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/SxReworkOrderBindZjSnExcelService.java @@ -0,0 +1,357 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.jx; + +import cn.estsh.i3plus.ext.mes.api.base.IExcelImportExtService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.CommonExtService; +import cn.estsh.i3plus.ext.mes.pojo.bean.*; +import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportErrorExtModel; +import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportResultExtModel; +import cn.estsh.i3plus.ext.mes.pojo.repository.*; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description : 组件条码绑定导入 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-04-23 + * @Modify: + **/ +@Service +public class SxReworkOrderBindZjSnExcelService implements IExcelImportExtService { + + @Autowired + private MesPackageExtRepository packageExtRepository; + + @Autowired + private MesSubassemblyRemadeRecordRepository subassemblyRemadeRecordRepository; + + @Autowired + private MesPartExtRepository partExtRepository; + + @Autowired + private MesWorkOrderExtRepository workOrderExtRepository; + + @Autowired + private CommonExtService commonExtService; + + /** + * SOP导入 + * @param workbook + * @param organizeCode + * @param userName + * @return + */ + @Override + public ExcelImportResultExtModel insertDataByExcel(Workbook workbook, String organizeCode, String userName) { + //读取表格 + ExcelImportResultExtModel excelImportResultExtModel = this.sheetExtractUnbindSnBind(workbook.getSheetAt(0), organizeCode, userName); + return excelImportResultExtModel; + } + + /** + * SOP导入-读取表格 + * @param sheetAt + * @param organizeCode + * @param userName + * @return + */ + private ExcelImportResultExtModel sheetExtractUnbindSnBind(Sheet sheetAt, String organizeCode, String userName) { + //从0行开始读取 + int totalNumberOfRows = sheetAt.getLastRowNum() + 1; + + Map workOrderMapByOrderNo = new HashMap<>(); + Map> packSnByWorkOrderNo = new HashMap<>(); + Map partMap = new HashMap<>(); + // 工单待绑定条码数量 + Map boundProdSnQtyMapByOrderNo = new HashMap<>(); + // 工单已绑定数量 + Map existPackageSnMap = new HashMap<>(); + List subassemblyRemadeRecordList = new ArrayList<>(); + + //成功数量 + Integer successRowNum = 0; + //失败数量 + Integer failRowNum = 0; + //错误的行号 + String errorRows = ""; + + //错误行信息集合 + List excelImportErrorExtModels = new ArrayList<>(); + + //String nowTime = TimeTool.getNowTime(MesExtConstWords.DATE_FORMAT_YM); + + //从excel表的第5行数据开始导入,getFirstRowNum是从0行开始读取 + for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i++) { + Row row = sheetAt.getRow(i); + //空行跳过 + if (null == row) { + continue; + } + + //获取总列数 + Short lastCellNum = row.getLastCellNum(); + if (lastCellNum > 0) { + + int rowNum = i + 1; //当前行号 + int errorNum = 0; //错误数量 + String cellNum = ""; //错误列号 + String errorInfo = ""; //错误信息 + + //工单号 + try { + //第一列必须有值,否则跳过 + row.getCell(0).setCellType(CellType.STRING); + } catch (Exception e) { + continue; + } + String workOrderNo = row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + //包装条码 + String packageNo = null; + try { + row.getCell(1).setCellType(CellType.STRING); + packageNo = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + + MesWorkOrderExt workOrderExt = null; + + //校验工单是否为空 + if (StringUtils.isEmpty(workOrderNo)) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据必填;"; + } else { + //校验工单是否存在,如果不存在则从数据库获取,如果存在则从集合中获取 + workOrderExt = getMesWorkOrderExt(organizeCode, workOrderMapByOrderNo, workOrderNo); + + MesPartExt partExt = null; + + partExt = getMesPartExt(organizeCode, partMap, workOrderExt, partExt); + + if (partExt == null) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据工单[" + workOrderNo + "]关联物料["+ workOrderExt.getPartNo() +"]不存在;"; + } else { + partMap.put(workOrderExt.getPartNo(), partExt); + + // 组件 + if (!StringUtils.isEmpty(partExt.getCategoryCode3()) && partExt.getCategoryCode3().equals("10")) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据工单[" + workOrderNo + "]关联物料["+ workOrderExt.getPartNo() +"]不为组件;"; + } + + } + + Double boundSnQty = 0.0; + + if (workOrderExt == null) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据不存在;"; + } else if (workOrderExt.getWorkOrderStatus() != MesExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue()) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据当前状态为【"+ MesExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()) +"】,不为【创建】状态;"; + } else if (workOrderExt.getPlanQty() != 0) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据当前存在改造数量;"; + } else if (workOrderExt.getWorkOrderType() != MesExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue()) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列数据不为返工工单;"; + } else { + + boundSnQty = getBoundSnQty(organizeCode, boundProdSnQtyMapByOrderNo, workOrderNo, packSnByWorkOrderNo); + + if (boundSnQty.compareTo(workOrderExt.getQty()) > 0) { + errorNum ++; + cellNum += "A;"; + errorInfo += "第A列工单[" + workOrderNo + "]当前绑定数量["+ boundSnQty +"]大于计划数量["+ workOrderExt.getQty() +"],无需再绑定;"; + } else { + workOrderMapByOrderNo.put(workOrderNo, workOrderExt); + boundProdSnQtyMapByOrderNo.put(workOrderNo, boundSnQty); + } + } + } + + MesPackageExt packageExt = null; + + if (errorNum == 0) { + //校验播放时长 + if (StringUtils.isEmpty(packageNo)) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据必填;"; + } else if (existPackageSnMap.containsKey(packageNo)) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据与 "+ existPackageSnMap.get(packageNo) +"行B列重复;"; + } else { + + packageExt = packageExtRepository.getByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, "packageNo"}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), packageNo}); + + if (null == packageExt) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + packageNo + "]不存在;"; + } else { + if (MesEnumUtil.PACKAGE_IS_SEALED.UNSEALED.getValue() != packageExt.getIsSealed()) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + packageNo +"]状态为未封箱"; + } + + if (!packageExt.getPartNo().equals(workOrderExt.getPartNo())) { + errorNum ++; + cellNum += "B;"; + errorInfo += "工单[" + workOrderNo +"]关联的物料编码["+ workOrderExt.getPartNo() +"]与条码["+ packageNo +"]关联的物料编码["+ packageExt.getPartNo() +"]不一致;"; + } + + List packSnList = packSnByWorkOrderNo.get(workOrderNo); + if (!CollectionUtils.isEmpty(packSnList) && packSnList.contains(packageNo)) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + packageNo +"]已绑定至工单["+ workOrderNo +"],无需再次绑定"; + } else { + if (CollectionUtils.isEmpty(packSnList)) { + packSnList = new ArrayList<>(); + } + + Double boundQty = boundProdSnQtyMapByOrderNo.containsKey(workOrderNo) ? 0.0 : boundProdSnQtyMapByOrderNo.get(workOrderNo); + + Double sumBoundQty = MathOperation.add(boundQty, packageExt.getQty()); + + if (sumBoundQty.compareTo(workOrderExt.getQty()) > 0) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据条码[" + packageNo +"]与工单["+ workOrderNo +"]绑定数量"+ boundQty +"总和为["+ sumBoundQty +"],大于工单计划数量["+ workOrderExt.getQty() +"]无需再次绑定"; + } else { + packSnList.add(packageNo); + packSnByWorkOrderNo.put(workOrderNo, packSnList); + } + + boundProdSnQtyMapByOrderNo.put(workOrderNo, sumBoundQty); + } + } + } + } + + //没有错误的时候,封装MesUnbindProduceSn + if (errorNum == 0) { + + // 记录已录入条码 + existPackageSnMap.put(packageNo, rowNum); + + MesSubassemblyRemadeRecord record = new MesSubassemblyRemadeRecord(); + record.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + record.setPackageNo(packageExt.getPackageNo()); + record.setLotNo(packageExt.getLotNo()); + record.setQty(packageExt.getQty()); + record.setInitWorkOrderNo(packageExt.getLastWorkOrderNo()); + record.setInitWorkCenterCode(packageExt.getWorkCenterCode()); + record.setInitQty(packageExt.getQty()); + record.setWorkOrderNo(workOrderNo); + record.setWorkCenterCode(workOrderExt.getWorkCenterCode()); + record.setPartNo(workOrderExt.getPartNo()); + record.setPartNameRdd(workOrderExt.getPartNameRdd()); + record.setOrganizeCode(organizeCode); + ConvertBean.serviceModelInitialize(record, userName); + + subassemblyRemadeRecordList.add(record); + successRowNum ++; + } else { + //封装错误行信息ExcelImportErrorExtModel + excelImportErrorExtModels = commonExtService.getExcelImportErrorModels(excelImportErrorExtModels, rowNum, errorNum, cellNum, errorInfo); + + errorRows += rowNum + ";"; + failRowNum ++; + } + } + } + + //校验EXCEL数据 + commonExtService.checkExcelData(failRowNum, successRowNum, errorRows); + + //封装返回结果 + ExcelImportResultExtModel excelImportResultExtModel = commonExtService.getExcelImportResultModel(failRowNum, successRowNum, excelImportErrorExtModels, errorRows); + + if (failRowNum == 0) { + insertExcel(subassemblyRemadeRecordList); + } + return excelImportResultExtModel; + } + + private double getBoundSnQty(String organizeCode, Map boundProdSnQtyMapByOrderNo, String workOrderNo, Map> packSnByWorkOrderNo) { + if (!boundProdSnQtyMapByOrderNo.containsKey(workOrderNo)) { + List subassemblyRemadeRecordList = subassemblyRemadeRecordRepository.findByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.WORK_ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workOrderNo}); + + if (!CollectionUtils.isEmpty(subassemblyRemadeRecordList)) { + List packSnList = subassemblyRemadeRecordList.stream().map(MesSubassemblyRemadeRecord::getPackageNo).collect(Collectors.toList()); + packSnByWorkOrderNo.put(workOrderNo, packSnList); + } + + return CollectionUtils.isEmpty(subassemblyRemadeRecordList) ? 0 : subassemblyRemadeRecordList.stream().mapToDouble(MesSubassemblyRemadeRecord::getQty).sum(); + + } else return boundProdSnQtyMapByOrderNo.get(workOrderNo); + } + + private MesPartExt getMesPartExt(String organizeCode, Map partMap, MesWorkOrderExt workOrderExt, MesPartExt partExt) { + if (workOrderExt != null && !partMap.containsKey(workOrderExt.getPartNo())) { + partExt = partExtRepository.getByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.PART_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workOrderExt.getPartNo()}); + } else if(workOrderExt != null) { + partExt = partMap.get(workOrderExt.getPartNo()); + } + return partExt; + } + + private MesWorkOrderExt getMesWorkOrderExt(String organizeCode, Map workOrderMapByOrderNo, String workOrderNo) { + MesWorkOrderExt workOrderExt; + if (!workOrderMapByOrderNo.containsKey(workOrderNo)) { + + workOrderExt = workOrderExtRepository.getByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workOrderNo}); + + } else { + workOrderExt = workOrderMapByOrderNo.get(workOrderNo); + } + return workOrderExt; + } + + /** + * 已解绑条码绑定工单导入-数据入库 + * @param subassemblyRemadeRecordList 返工条码 + + */ + private void insertExcel(List subassemblyRemadeRecordList) { + //导入数据 + if (!CollectionUtils.isEmpty(subassemblyRemadeRecordList)) subassemblyRemadeRecordRepository.saveAll(subassemblyRemadeRecordList); + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesFirstOrderDetail.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesFirstOrderDetail.java index c38e519..c385506 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesFirstOrderDetail.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesFirstOrderDetail.java @@ -217,7 +217,7 @@ public class MesFirstOrderDetail extends BaseBean implements Serializable { public MesFirstOrderDetail(Long id, String workOrderNo, String workCenterCode, String serialNumber, String workCellName, String shiftCode, String processCode, String processName, String checkMessage, String checkStand, String checkValue, String checkResult, String spotCheckUser, String spotCheckTime, String teamConfirmUser, String teamConfirmTime, String qualityConfirmUser, String qualityConfirmTime, String orderNo, String createDatetime - , Integer isQualityConfirm, Integer isTeamConfirm,String upLimit,String downLimit,String resultValue) { + , Integer isQualityConfirm, Integer isTeamConfirm,String upLimit,String downLimit,String resultValue, String importanceSafePartNo, String checkFrequency, String sampleQty, String confirmMethod) { this.id = id; this.workOrderNo = workOrderNo; @@ -244,6 +244,10 @@ public class MesFirstOrderDetail extends BaseBean implements Serializable { this.upLimit = upLimit; this.downLimit = downLimit; this.resultValue = resultValue; + this.importanceSafePartNo = importanceSafePartNo; + this.checkFrequency = checkFrequency; + this.sampleQty = sampleQty; + this.confirmMethod = confirmMethod; } //工单首检趋势分析 diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesUnbindProduceSnTravel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesUnbindProduceSnTravel.java index 4706fdf..4db4fb4 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesUnbindProduceSnTravel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesUnbindProduceSnTravel.java @@ -39,10 +39,14 @@ public class MesUnbindProduceSnTravel extends BaseBean implements Serializable { private static final long serialVersionUID = 6242884964995452701L; - @Column(name = "SERIAL_NUMBER", nullable = false) + @Column(name = "SERIAL_NUMBER") @ApiParam("过程条码") private String serialNumber; + @Column(name = "PRODUCT_SN") + @ApiParam("产品条码") + private String productSn; + @Column(name = "PART_NO") @ApiParam("物料号") private String partNo; diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/SxRepairRecordReportModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/SxRepairRecordReportModel.java index 4f8fbe8..7f1ff51 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/SxRepairRecordReportModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/SxRepairRecordReportModel.java @@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiParam; import lombok.Data; -import javax.persistence.Column; import java.io.Serializable; /** diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/jx/JxReworkSnModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/jx/JxReworkSnModel.java new file mode 100644 index 0000000..571b7f2 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/jx/JxReworkSnModel.java @@ -0,0 +1,26 @@ +package cn.estsh.i3plus.ext.mes.pojo.model.jx; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author wangjie + * @version 1.0 + * @date 2021/1/15 15:32 + **/ +@Data +@ApiModel("返工条码 展示 model") +public class JxReworkSnModel implements Serializable { + + private static final long serialVersionUID = 6923519092290828111L; + + @ApiParam("工单") + private String workOrderNo; + + @ApiParam("条码") + private String sn; + +}