|  |  | 
 |  |  | 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.api.entity.enums.OrderType; | 
 |  |  | import com.vincent.rsf.server.api.entity.enums.OrderWorkType; | 
 |  |  | import com.vincent.rsf.server.manager.enums.OrderType; | 
 |  |  | import com.vincent.rsf.server.manager.enums.OrderWorkType; | 
 |  |  | import com.vincent.rsf.server.common.domain.BaseParam; | 
 |  |  | import com.vincent.rsf.server.common.domain.PageParam; | 
 |  |  | import com.vincent.rsf.server.common.utils.CommonUtil; | 
 |  |  | import com.vincent.rsf.server.common.utils.ExcelUtil; | 
 |  |  | import com.vincent.rsf.server.common.utils.FieldsUtils; | 
 |  |  | import com.vincent.rsf.server.manager.entity.AsnOrder; | 
 |  |  | import com.vincent.rsf.server.manager.entity.Companys; | 
 |  |  | 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
 |  |  | import com.vincent.rsf.server.manager.service.AsnOrderService; | 
 |  |  | 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; | 
 |  |  | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  | import org.springframework.web.multipart.MultipartFile; | 
 |  |  |  | 
 |  |  | import javax.annotation.Resource; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private AsnOrderItemService asnOrderItemService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private CompanysService companysService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DictDataService dictDataService; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public R generateBarcode(List<Long> orders) { | 
 |  |  | 
 |  |  |  | 
 |  |  |     @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("表格内容不能为空!!"); | 
 |  |  |         } | 
 |  |  |         List<AsnOrderTemplate> resultList = result.getList(); | 
 |  |  |         Map<String, List<AsnOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(AsnOrderTemplate::getCode)); | 
 |  |  |         StringBuffer sbFaild = new StringBuffer(); | 
 |  |  |         for (String key : listMap.keySet()) { | 
 |  |  |             AsnOrderTemplate template = listMap.get(key).stream().findFirst().get(); | 
 |  |  |             AsnOrder asnOrder = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, template.getCode())); | 
 |  |  |             if (Objects.isNull(asnOrder)) { | 
 |  |  |                 continue; | 
 |  |  |             if (StringUtils.isBlank(key)) { | 
 |  |  |                 throw new CoolException("单号不能为空!!"); | 
 |  |  |             } | 
 |  |  |             AsnOrder order = new AsnOrder(); | 
 |  |  |             AsnOrderTemplate template = listMap.get(key).stream().findFirst().get(); | 
 |  |  |             AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, key)); | 
 |  |  |             if (!Objects.isNull(order)) { | 
 |  |  |                 sbFaild.append(template.getCode()).append(",已添加!!"); | 
 |  |  |                 throw new CoolException(sbFaild.toString()); | 
 |  |  |             } | 
 |  |  |             order = new AsnOrder(); | 
 |  |  |             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); | 
 |  |  |             Date date = dateFormat.parse(template.getArrTime()); | 
 |  |  |             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) | 
 |  |  |                     .setPoId(Long.parseLong(template.getPoId())) | 
 |  |  |                     .setType(OrderType.getTypeVal(template.getType())) | 
 |  |  |                     .setWkType(OrderWorkType.getWorkType(template.getWkType())); | 
 |  |  |             if (!asnOrderMapper.save(order)) { | 
 |  |  | 
 |  |  |             List<AsnOrderItem> items = new ArrayList<>(); | 
 |  |  |             for (AsnOrderTemplate orderTemplate : listMap.get(key)) { | 
 |  |  |                 AsnOrderItem orderItem = new AsnOrderItem(); | 
 |  |  |                 Matnr matnr = null; | 
 |  |  |                 if (!Objects.isNull(orderTemplate.getMatnrCode()) || StringUtils.isNotBlank(orderTemplate.getMatnrCode())) { | 
 |  |  |                     matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>() | 
 |  |  |                             .eq(Matnr::getCode, orderTemplate.getMatnrCode())); | 
 |  |  |                 if (StringUtils.isBlank(orderTemplate.getMatnrCode())) { | 
 |  |  |                     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)) { | 
 |  |  |                     sbFaild.append(orderTemplate.getMatnrCode()).append("物料不存在"); | 
 |  |  |                     throw new CoolException(sbFaild.toString()); | 
 |  |  |                 } | 
 |  |  |                 String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, matnr); | 
 |  |  |                 orderItem.setAsnId(order.getId()) | 
 |  |  |                         .setAsnCode(order.getCode()) | 
 |  |  |                         .setSplrBatch(orderTemplate.getSplrBatch()) | 
 |  |  |                         .setPlatItemId(orderTemplate.getPlatItemId()) | 
 |  |  |                         .setAnfme(Double.parseDouble(orderTemplate.getAnfme())) | 
 |  |  |                         .setQty(Double.parseDouble(orderTemplate.getQty())) | 
 |  |  |                         .setSplrName(orderTemplate.getSplrName()) | 
 |  |  |                         .setSplrCode(orderTemplate.getSplrCode()) | 
 |  |  |                         .setIsptResult(QlyIsptResult.getDescVal(orderTemplate.getIsptResult())) | 
 |  |  | //                        .setTrackCode(trackCode) | 
 |  |  |                         .setBarcode(trackCode) | 
 |  |  |                         .setPlatOrderCode(orderTemplate.getPlatOrderCode()) | 
 |  |  |                         .setPlatWorkCode(orderTemplate.getPlatWorkCode()) | 
 |  |  |                         .setProjectCode(orderTemplate.getProjectCode()) | 
 |  |  |                         .setPoCode(orderTemplate.getPoCode()) | 
 |  |  |                         .setMaktx(orderTemplate.getMaktx()) | 
 |  |  |                         .setMatnrCode(orderTemplate.getMatnrCode()) | 
 |  |  |                         .setPurUnit(orderTemplate.getPurUnit()) | 
 |  |  |                         .setPurQty(Double.parseDouble(orderTemplate.getPurQty())); | 
 |  |  |                 if (!Objects.isNull(matnr)) { | 
 |  |  |                     orderItem.setMaktx(matnr.getName()).setMatnrCode(matnr.getCode()).setMatnrId(matnr.getId()); | 
 |  |  |                         .setPurUnit(matnr.getUnit()) | 
 |  |  |                         .setCreateBy(loginUserId) | 
 |  |  |                         .setUpdateBy(loginUserId) | 
 |  |  |                         .setSpec(matnr.getSpec()) | 
 |  |  |                         .setModel(matnr.getModel()) | 
 |  |  |                         .setMaktx(matnr.getName()) | 
 |  |  |                         .setMatnrCode(matnr.getCode()) | 
 |  |  |                         .setMatnrId(matnr.getId()) | 
 |  |  |                         .setStockUnit(matnr.getUnit()); | 
 |  |  |                 if (!Objects.isNull(orderTemplate.getSplrCode())) { | 
 |  |  |                     Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>() | 
 |  |  |                                     .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val) | 
 |  |  |                             .eq(Companys::getCode, orderTemplate.getSplrCode())); | 
 |  |  |                     if (!Objects.isNull(companys)) { | 
 |  |  |                         orderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName()); | 
 |  |  |                     } else { | 
 |  |  |                         sbFaild.append("供应商:" + orderTemplate.getSplrCode()).append("不存在"); | 
 |  |  |                         throw new CoolException(sbFaild.toString()); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 items.add(orderItem); | 
 |  |  |                 if (!asnOrderItemService.saveBatch(items)) { | 
 |  |  |  | 
 |  |  |                 if (!asnOrderItemService.save(orderItem)) { | 
 |  |  |                     throw new CoolException("单据明细保存失败!!"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             if (!items.isEmpty()) { | 
 |  |  |                 double qty = items.stream().mapToDouble(AsnOrderItem::getQty).sum(); | 
 |  |  |                 double purQty = items.stream().mapToDouble(AsnOrderItem::getPurQty).sum(); | 
 |  |  |                 if (!asnOrderMapper.update(new LambdaUpdateWrapper<AsnOrder>().set(AsnOrder::getQty, qty).set(AsnOrder::getAnfme, purQty).eq(AsnOrder::getId, order.getId()))) { | 
 |  |  | //                double qty = items.stream().mapToDouble(AsnOrderItem::getQty).sum(); | 
 |  |  |                 double anfme = items.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); | 
 |  |  |                 if (!asnOrderMapper.update(new LambdaUpdateWrapper<AsnOrder>() | 
 |  |  | //                        .set(AsnOrder::getQty, qty) | 
 |  |  |                         .set(AsnOrder::getAnfme, anfme) | 
 |  |  |                         .eq(AsnOrder::getId, order.getId()))) { | 
 |  |  |                     throw new CoolException("单据数量修改失败!!"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return R.ok("操作成功!!"); | 
 |  |  |         return R.ok("导入成功," + sbFaild.toString()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * @param | 
 |  |  |      * @param loginUserId | 
 |  |  |      * @return | 
 |  |  |      * @author Ryan | 
 |  |  |      * @description ASN明细单据保存,及扩展字段保存 | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     @Override | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public boolean fieldsSave(Map<String, Object> params) { | 
 |  |  |     public boolean fieldsSave(Map<String, Object> params, Long loginUserId) { | 
 |  |  |         AsnOrderItem asnOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), AsnOrderItem.class); | 
 |  |  |         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()) | 
 |  |  |                     .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val)); | 
 |  |  |             if (!Objects.isNull(companys)) { | 
 |  |  |                 asnOrderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if (Objects.isNull(asnOrderItem.getAnfme()) || Double.compare(asnOrderItem.getAnfme(), 0.0) <= 0) { | 
 |  |  |             throw new CoolException("计划收货数不能为空!!"); | 
 |  |  |             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("收货通知单明细保存失败!!"); | 
 |  |  |         } | 
 |  |  | 
 |  |  |         } | 
 |  |  |         hsahMap.setRecords(FieldsUtils.getExtendFields(hsahMap.getRecords())); | 
 |  |  |         return hsahMap; | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |