From 533fd0d843792fc886771993a0d45b4e5876011c Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期四, 17 八月 2023 15:02:32 +0800 Subject: [PATCH] 111 --- server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java | 208 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 184 insertions(+), 24 deletions(-) diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java index 596283d..1e0a085 100644 --- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java +++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java @@ -17,10 +17,8 @@ import doumeemes.dao.business.BackOrderDetailMapper; import doumeemes.dao.business.BackorderMapper; import doumeemes.dao.business.SalaryParamMapper; -import doumeemes.dao.business.dto.CreateMaterialDTO; -import doumeemes.dao.business.dto.CreateWorkorderRecordDTO; -import doumeemes.dao.business.dto.DealWorkorderRecordDTO; -import doumeemes.dao.business.dto.MaterialListDTO; +import doumeemes.dao.business.UnqualifiedRecordMapper; +import doumeemes.dao.business.dto.*; import doumeemes.dao.business.model.*; import doumeemes.dao.ext.*; import doumeemes.dao.ext.bean.EndCheckApBean; @@ -87,6 +85,8 @@ private PlansExtMapper plansExtMapper; @Autowired private DeviceExtMapper deviceExtMapper; + @Autowired + private UnqualifiedRecordMapper unqualifiedRecordMapper; @Transactional(rollbackFor = {BusinessException.class,Exception.class}) @Override @@ -360,7 +360,7 @@ @Transactional(rollbackFor = {BusinessException.class,Exception.class}) @Override - public Integer comfirmDone(Workorder param){ + public Integer comfirmDone(Workorder param,Boolean needCheck){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鎮ㄦ棤鏉冮檺杩涜璇ユ搷浣滐紒"); @@ -388,7 +388,7 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ュ崟宸叉殏鍋滐紒"); } //濡傛灉闇�瑕佸畬宸ユ鎵嶈兘妫�楠� - if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)){ + if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)&&needCheck){ //鍙湁宸插畬宸ョ姸鎬佹墠鑳界‘璁ゆ姤宸� if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�"); @@ -493,6 +493,167 @@ // } return param.getId(); } + + + @Transactional(rollbackFor = {BusinessException.class,Exception.class}) + @Override + public Workorder comfirmDoneNew(AutoWorkReportDTO autoWorkReportDTO, Boolean needCheck){ + LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); + if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鎮ㄦ棤鏉冮檺杩涜璇ユ搷浣滐紒"); + } + if(Objects.isNull(autoWorkReportDTO) + || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO()) + || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO + || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId()== null ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇锋寜瑕佹眰濉啓鍜岄�夋嫨鎻愪氦鏁版嵁锛�"); + } + Workorder mp = new Workorder(); + mp.setDeleted(Constants.ZERO); + mp.setId(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId()); + mp.setRootDepartId(user.getRootDepartment().getId()); + mp = workorderExtMapper.selectOne(mp); + if(mp== null){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ヨ褰曚笉瀛樺湪锛�"); + } + + Workorder param = new Workorder(); + + param.setPlanId(mp.getPlanId()); + if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ュ崟宸叉殏鍋滐紒"); + } + //濡傛灉闇�瑕佸畬宸ユ鎵嶈兘妫�楠� + if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)&&needCheck){ + //鍙湁宸插畬宸ョ姸鎬佹墠鑳界‘璁ゆ姤宸� + if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�"); + } + } + //鍑哄叆搴撴槑缁嗚褰曢泦鍚� + List<WOutboundDetail> outboundDetailList = new ArrayList<>(); + //寰呮洿鏂板伐瑁呴泦鍚堟姇鏂� + List<Appliances> updateApplianceList = new ArrayList<>(); + //寰呮洿鏂板伐瑁呴泦鍚堜骇鍑� + List<Appliances> updateApplianceProList = new ArrayList<>(); + //寰呮洿鏂板簱瀛橀泦鍚� + List<WStock> stockList = new ArrayList<>(); + //鏌ヨ鎶曟枡鍜屾姤宸ヨ褰曞垪琛� + List<WorkorderRecordExtListVO> allRecordList = workorderRecordExtMapper.selectAllList(getQueryRecordParam(param)); + if(Objects.isNull(allRecordList)||allRecordList.size()==Constants.ZERO){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈡姇鏂欏拰鎶ュ伐璁板綍!"); + } + //澶勭悊浜у嚭鏁版嵁 + WorkorderRecord workorderRecord = this.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user); + //妫�鏌ユ暟鎹俊鎭� +// caculateCheckRecord(user, mp,allRecordList); + QueryBomDetailExtDTO bdparam = initBomParam(user,mp); + if(mp.getBomModel()!=null&&Constants.equalsInteger(mp.getBomModel().getType(),Constants.BOM_TYPE.pull)){ + //濡傛灉鏄媺寮忔姇鏂欙紝绯荤粺鏍规嵁BOM鑷姩鎵e噺搴撳瓨 + dealApplianceMateialPull(mp,user,bdparam,updateApplianceList, stockList); + } + if(allRecordList!=null && allRecordList.size()>0){ + if(mp.getBomModel()==null||Constants.equalsInteger(mp.getBomModel().getType(),Constants.BOM_TYPE.push)){ + //濡傛灉鏄帹寮忔姇鏂欙紝璧版甯哥敓浜ф墜鍔ㄦ姇鏂� + dealApplianceMateial(mp,user,bdparam,allRecordList,updateApplianceList, outboundDetailList,stockList); + } + //澶勭悊浜у嚭鏁版嵁 + dealAppliancePro(mp,user,allRecordList,updateApplianceList,updateApplianceProList, outboundDetailList,stockList); + } + + //濡傛灉鏈夋病bom閰嶇疆,妫�鏌ヤ骇鍑猴紙鍖呭惈妫�楠岀殑涓嶈壇鍜屾姤搴熷搧锛夊拰鎶曟枡鏁伴噺鏄惁鐩哥瓑鍖归厤锛屼笉涓�鑷存彁绀洪敊璇� + if(bdparam==null){ + //鎶曟枡鏁伴噺 鍜� 浜у嚭鏁伴噺涓嶇浉绛� + if(Constants.formatBigdecimal(mp.getHasMaterialNum()).intValue() != Constants.formatIntegerNum(mp.getHasProduceNum())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曟姇鏂欏拰浜у嚭鏁伴噺涓嶄竴鑷达紝璇风‘璁ゅ悗閲嶈瘯锛�"); + } + } + //鏇存柊宸ュ崟鐘舵�佷负宸叉姤宸� + updateOrderInfo(user,mp,Constants.WORKORDER_HISTORY_STATUS.baogong); + + //鎵归噺鎻掑叆鍑哄叆搴撴槑缁嗚褰� + if(outboundDetailList!=null && outboundDetailList.size()>0){ + wOutboundDetailExtMapper.insertBatch(outboundDetailList); + } + if(stockList != null && stockList.size()>0){ + for(WStock s : stockList){ + WStock s1 = new WStock(); + s1.setLocationId(s.getLocationId()); + s1.setWarehouseId(s.getWarehouseId()); + s1.setDeleted(Constants.ZERO); + s1.setMaterialId(s.getMaterialId()); + s1.setQualityType(s.getQualityType()); + s1.setProcedureId(s.getProcedureId()); + if(StringUtils.isBlank(s.getBatch() )){ + s1 = wStockExtMapper.selectOne(new QueryWrapper<>(s1).isNull("batch").last(" limit 1")); + }else{ + s1.setBatch(s.getBatch()); + s1 = wStockExtMapper.selectOne(new QueryWrapper<>(s1).last(" limit 1")); + } + if(s1 ==null){ + //濡傛灉搴撳瓨璁板綍涓嶅瓨鍦紝鎻掑叆鏁版嵁 + s.setDeleted(Constants.ZERO); + s.setCreateTime(DateUtil.getCurrentDate()); + s.setCreateUser(user.getId()); + s.setRootDepartId(mp.getRootDepartId()); + if(Constants.formatBigdecimal(s.getNum()).compareTo(new BigDecimal(0)) == -1){ + //濡傛灉搴撳瓨涓嶈冻 + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝浠撳簱浣欐枡涓嶈冻锛岃鑱旂郴浠撳簱绠$悊鍛橈紒"); + } + wStockExtMapper.insert(s); + }else{ + //濡傛灉搴撳瓨璁板綍瀛樺湪锛屽垯鏇存柊搴撳瓨閲� + s.setId(s1.getId()); + s.setUpdateTime(DateUtil.getCurrentDate()); + s.setUpdateUser(user.getId()); + s.setNum(Constants.formatBigdecimal(s1.getNum()).add(Constants.formatBigdecimal(s.getNum()))); + if(Constants.formatBigdecimal(s.getNum()).compareTo(new BigDecimal(0)) == -1){ + //濡傛灉搴撳瓨涓嶈冻 + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝浠撳簱浣欐枡涓嶈冻锛岃鑱旂郴浠撳簱绠$悊鍛�!锛�"); + } + wStockExtMapper.updateById(s); + } + + } + } + + //瀛樺偍鎶ュ伐涓嶈壇椤规暟鎹� + if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){ + if(!Objects.isNull(autoWorkReportDTO.getCreateUnqualifiedDTOList())&&autoWorkReportDTO.getCreateUnqualifiedDTOList().size()>Constants.ZERO){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁"); + } + }else{ + List<CreateUnqualifiedDTO> createUnqualifiedDTOList = autoWorkReportDTO.getCreateUnqualifiedDTOList(); + BigDecimal unqualified = createUnqualifiedDTOList.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add); + if(unqualified.compareTo(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())!=Constants.ZERO){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁"); + } + for (CreateUnqualifiedDTO createUnqualifiedDTO:createUnqualifiedDTOList) { + if(createUnqualifiedDTO.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==Constants.ZERO + ||Objects.isNull(createUnqualifiedDTO.getCategoryId())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁"); + } + UnqualifiedRecord unqualifiedRecord = new UnqualifiedRecord(); + unqualifiedRecord.setDeleted(Constants.ZERO); + unqualifiedRecord.setCreateUser(user.getId()); + unqualifiedRecord.setCreateTime(new Date()); + unqualifiedRecord.setRootDepartId(mp.getRootDepartId()); + unqualifiedRecord.setDepartId(mp.getDepartId()); + unqualifiedRecord.setWorkorderId(mp.getId()); + unqualifiedRecord.setRecordId(workorderRecord.getId()); + unqualifiedRecord.setCategoryId(createUnqualifiedDTO.getCategoryId()); + unqualifiedRecord.setUnqualifiedNum(createUnqualifiedDTO.getUnQualifiedNum()); + unqualifiedRecordMapper.insert(unqualifiedRecord); + } + } + + return param; + } + + private QueryWorkorderRecordExtDTO getQueryRecordParam(Workorder param) { QueryWorkorderRecordExtDTO mParam = new QueryWorkorderRecordExtDTO(); @@ -1006,7 +1167,7 @@ record.setAppliancesId(tModel.getAppliancesId()); record.setBatch(detail.getBatch()); record.setRootDepartId(mp.getRootDepartId()); - record.setNum(tModel.getNum()); + record.setNum(detail.getNum()); record.setOutboundId(detail.getOutboundId()); record.setUnitId(detail.getUnitId()); record.setWarehouseId(detail.getWarehouseId()); @@ -1017,10 +1178,10 @@ detail.getWOutboundRecordInList().add(record); WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(), - tModel.getProcedureId(),tModel.getDoneType(),stockList); + tModel.getProcedureId(),doneType,stockList); if(stock!=null){ //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺 - stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum()))); + stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(detail.getNum()))); }else{ stock = new WStock(); stock.setMaterialId(detail.getMaterialId()); @@ -1028,9 +1189,9 @@ stock.setWarehouseId(outbound.getWarehouseId()); stock.setLocationId(mp.getFinishWarehouseLocationId()); stock.setUnitId(detail.getUnitId()); - stock.setNum(Constants.formatBigdecimal(tModel.getNum())); + stock.setNum(Constants.formatBigdecimal(detail.getNum())); stock.setProcedureId(tModel.getProcedureId()); - stock.setQualityType(tModel.getDoneType()); + stock.setQualityType(doneType); //寰呮洿鏂板簱瀛樹俊鎭� stockList.add(stock); } @@ -1355,19 +1516,18 @@ //璁$畻宸ヨ祫淇℃伅 SalaryParam salaryParam = salaryParamMapper.selectOne(new QueryWrapper<SalaryParam>().eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",workorderRecord.getMaterialId()) .eq("DEPART_ID",workorderRecord.getFactoryId()).eq("PROCEDURE_ID",workorderRecord.getProcedureId()).last(" limit 1 ")); - if(Objects.isNull(salaryParam)){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈厤缃伐璧勭哗鏁堥厤缃紒"); - } - workorderRecord.setSalaryPrice(salaryParam.getSalary()); - workorderRecord.setSalaryType(salaryParam.getType()); - workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified()); - //璁′欢宸ヨ祫 - if(salaryParam.getType().equals(Constants.ZERO)){ - workorderRecord.setSalaryNum(salaryParam.getNum()); - workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ONE?num:createWorkorderRecordDTO.getQualifiedNum())); - }else{ - workorderRecord.setDuration(createWorkorderRecordDTO.getDuration()); - workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600))); + if(!Objects.isNull(salaryParam)){ + workorderRecord.setSalaryPrice(salaryParam.getSalary()); + workorderRecord.setSalaryType(salaryParam.getType()); + workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified()); + //璁′欢宸ヨ祫 + if(salaryParam.getType().equals(Constants.ZERO)){ + workorderRecord.setSalaryNum(salaryParam.getNum()); + workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ONE?num:createWorkorderRecordDTO.getQualifiedNum())); + }else{ + workorderRecord.setDuration(createWorkorderRecordDTO.getDuration()); + workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600),BigDecimal.ROUND_HALF_UP)); + } } //鎻掑叆宸ュ崟鎿嶄綔璁板綍锛屽苟涓斿垽鏂槸鍚︽洿鏀逛负宸ュ崟鐨勭姸鎬併�愮敓浜т腑銆� updateOrderInfo(loginUserInfo,workorder,Constants.WORKORDER_HISTORY_STATUS.produce); -- Gitblit v1.9.3