|  |  | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.vincent.rsf.framework.common.Cools; | 
 |  |  | import com.vincent.rsf.framework.common.R; | 
 |  |  | import com.vincent.rsf.framework.exception.CoolException; | 
 |  |  | import com.vincent.rsf.server.manager.enums.OrderType; | 
 |  |  | 
 |  |  | import com.vincent.rsf.server.manager.entity.Matnr; | 
 |  |  | import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; | 
 |  |  | import com.vincent.rsf.server.manager.enums.CompanysType; | 
 |  |  | import com.vincent.rsf.server.manager.enums.QlyIsptResult; | 
 |  |  | import com.vincent.rsf.server.manager.mapper.AsnOrderItemMapper; | 
 |  |  | import com.vincent.rsf.server.manager.entity.AsnOrderItem; | 
 |  |  | import com.vincent.rsf.server.manager.service.AsnOrderItemService; | 
 |  |  | 
 |  |  | import com.vincent.rsf.server.manager.service.CompanysService; | 
 |  |  | import com.vincent.rsf.server.manager.service.MatnrService; | 
 |  |  | import com.vincent.rsf.server.system.constant.SerialRuleCode; | 
 |  |  | import com.vincent.rsf.server.system.service.DictDataService; | 
 |  |  | import com.vincent.rsf.server.system.service.FieldsItemService; | 
 |  |  | import com.vincent.rsf.server.system.service.FieldsService; | 
 |  |  | import com.vincent.rsf.server.system.utils.SerialRuleUtils; | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private CompanysService companysService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DictDataService dictDataService; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public R generateBarcode(List<Long> orders) { | 
 |  |  |         if (Objects.isNull(orders) || orders.isEmpty()) { | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public R excelImport(MultipartFile file, HashMap<String, Object> hashMap, Long loginUserId) throws Exception { | 
 |  |  |     public synchronized R excelImport(MultipartFile file, HashMap<String, Object> hashMap, Long loginUserId) throws Exception { | 
 |  |  |         ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), AsnOrderTemplate.class, ExcelUtil.getDefaultImportParams()); | 
 |  |  |         if (result.getList().isEmpty()) { | 
 |  |  |             throw new CoolException("物料导入失败!!"); | 
 |  |  |         } | 
 |  |  |         if (result.getList().isEmpty()) { | 
 |  |  |             throw new CoolException("表格内容不能为空!!"); | 
 |  |  |         } | 
 |  |  | 
 |  |  |         Map<String, List<AsnOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(AsnOrderTemplate::getCode)); | 
 |  |  |         StringBuffer sbFaild = new StringBuffer(); | 
 |  |  |         for (String key : listMap.keySet()) { | 
 |  |  |             if (StringUtils.isBlank(key)) { | 
 |  |  |                 throw new CoolException("单号不能为空!!"); | 
 |  |  |             } | 
 |  |  |             AsnOrderTemplate template = listMap.get(key).stream().findFirst().get(); | 
 |  |  |             AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, key)); | 
 |  |  |             if (!Objects.isNull(order)) { | 
 |  |  | 
 |  |  |             if (Objects.isNull(date)) { | 
 |  |  |                 throw new CoolException("时间格式错误!!"); | 
 |  |  |             } | 
 |  |  |             if (Objects.isNull((OrderType.getTypeVal(template.getType())))) { | 
 |  |  |                 sbFaild.append(template.getCode()).append(",单据状态不存在!!"); | 
 |  |  |                 throw new CoolException(sbFaild.toString()); | 
 |  |  |             } | 
 |  |  |             if (Objects.isNull((OrderWorkType.getWorkType(template.getWkType())))) { | 
 |  |  |                 sbFaild.append(template.getCode()).append(",业务状态不存在!!"); | 
 |  |  |                 throw new CoolException(sbFaild.toString()); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             order.setCode(template.getCode()) | 
 |  |  |                     .setPoCode(template.getPoCode()) | 
 |  |  |                     .setMemo(template.getMemo()) | 
 |  |  |                     .setArrTime(date) | 
 |  |  |                     .setUpdateBy(loginUserId) | 
 |  |  |                     .setLogisNo(template.getLogicNo()) | 
 |  |  |                     .setCreateBy(loginUserId) | 
 |  |  |                     .setType(OrderType.getTypeVal(template.getType())) | 
 |  |  |                     .setWkType(OrderWorkType.getWorkType(template.getWkType())); | 
 |  |  | 
 |  |  |             for (AsnOrderTemplate orderTemplate : listMap.get(key)) { | 
 |  |  |                 AsnOrderItem orderItem = new AsnOrderItem(); | 
 |  |  |                 if (StringUtils.isBlank(orderTemplate.getMatnrCode())) { | 
 |  |  |                     throw new CoolException(orderTemplate.getPoCode() + ":物料编码不能为空!!"); | 
 |  |  |                     throw new CoolException(orderTemplate.getCode() + ":物料编码不能为空!!"); | 
 |  |  |                 } | 
 |  |  |                 if (StringUtils.isBlank(orderTemplate.getAnfme())) { | 
 |  |  |                     throw new CoolException(orderTemplate.getCode() + ":数量不能为空!!"); | 
 |  |  |                 } | 
 |  |  |                 if (StringUtils.isBlank(orderTemplate.getType())) { | 
 |  |  |                     throw new CoolException(orderTemplate.getCode() + ":单据类型不能为空!!"); | 
 |  |  |                 } | 
 |  |  |                 if (StringUtils.isBlank(orderTemplate.getWkType())) { | 
 |  |  |                     throw new CoolException(orderTemplate.getCode() + ":业务类型不能为空!!"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>() | 
 |  |  |                         .eq(Matnr::getCode, orderTemplate.getMatnrCode())); | 
 |  |  |                 if (Objects.isNull(matnr)) { | 
 |  |  | 
 |  |  |                         .setSplrBatch(orderTemplate.getSplrBatch()) | 
 |  |  |                         .setPlatItemId(orderTemplate.getPlatItemId()) | 
 |  |  |                         .setAnfme(Double.parseDouble(orderTemplate.getAnfme())) | 
 |  |  |                         .setTrackCode(trackCode) | 
 |  |  |                         .setIsptResult(QlyIsptResult.getDescVal(orderTemplate.getIsptResult())) | 
 |  |  | //                        .setTrackCode(trackCode) | 
 |  |  |                         .setBarcode(trackCode) | 
 |  |  |                         .setPlatOrderCode(orderTemplate.getPlatOrderCode()) | 
 |  |  |                         .setPlatWorkCode(orderTemplate.getPlatWorkCode()) | 
 |  |  |                         .setProjectCode(orderTemplate.getProjectCode()) | 
 |  |  |                         .setPoCode(orderTemplate.getPoCode()) | 
 |  |  |                         .setPurUnit(matnr.getUnit()) | 
 |  |  |                         .setCreateBy(loginUserId) | 
 |  |  | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public boolean fieldsSave(Map<String, Object> params, Long loginUserId) { | 
 |  |  |         AsnOrderItem asnOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), AsnOrderItem.class); | 
 |  |  |         asnOrderItem.setUpdateBy(loginUserId).setCreateBy(loginUserId); | 
 |  |  |         if (StringUtils.isBlank(asnOrderItem.getTrackCode())) { | 
 |  |  |             String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, asnOrderItem); | 
 |  |  |             asnOrderItem.setTrackCode(ruleCode).setBarcode(ruleCode); | 
 |  |  |         } | 
 |  |  |         if (StringUtils.isNoneBlank(asnOrderItem.getSplrCode())) { | 
 |  |  |             Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>() | 
 |  |  |                     .eq(Companys::getId, asnOrderItem.getSplrCode()) | 
 |  |  | 
 |  |  |         if (Objects.isNull(asnOrderItem.getAnfme()) || Double.compare(asnOrderItem.getAnfme(), 0.0) <= 0) { | 
 |  |  |             throw new CoolException("计划数不能为空!!"); | 
 |  |  |         } | 
 |  |  | //        if (StringUtils.isBlank(asnOrderItem.getSplrBatch())) { | 
 |  |  | //            throw new CoolException("供应商批次不能为空!!"); | 
 |  |  | //        } | 
 |  |  |         //保存扩展字段 | 
 |  |  |         try { | 
 |  |  |             String uuid16 = CommonUtil.randomUUID16(); | 
 |  |  |             Boolean fields = FieldsUtils.saveFields(params, uuid16); | 
 |  |  |             if (fields) { | 
 |  |  |             StringBuffer sb = new StringBuffer(); | 
 |  |  |             if (Objects.isNull(asnOrderItem.getFieldsIndex()) || StringUtils.isBlank(asnOrderItem.getFieldsIndex())) { | 
 |  |  |                 if (!Objects.isNull(asnOrderItem.getExtendFields()) && !asnOrderItem.getExtendFields().isEmpty()) { | 
 |  |  |                     Map<String, String> fields = asnOrderItem.getExtendFields(); | 
 |  |  |                     asnOrderItem.getExtendFields().keySet().forEach(key -> { | 
 |  |  |                         sb.append(fields.get(key)); | 
 |  |  |                     }); | 
 |  |  |                 } | 
 |  |  |                 sb.append(asnOrderItem.getAsnCode() + asnOrderItem.getMatnrId() + asnOrderItem.getSplrBatch() + asnOrderItem.getIsptResult$()); | 
 |  |  |                 //获取16位uuid | 
 |  |  |                 String uuid16 = Cools.md5Chinese(sb.toString()); | 
 |  |  |                 asnOrderItem.setFieldsIndex(uuid16); | 
 |  |  |                 params.put("index", uuid16); | 
 |  |  |             } | 
 |  |  |             //保存或更新动态字段值 | 
 |  |  |             FieldsUtils.updateFieldsValue(params); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             throw new RuntimeException(e); | 
 |  |  |         } | 
 |  |  |         asnOrderItem.setUpdateBy(loginUserId).setCreateBy(loginUserId); | 
 |  |  |         if (!this.saveOrUpdate(asnOrderItem)) { | 
 |  |  |             throw new CoolException("收货通知单明细保存失败!!"); | 
 |  |  |         } |