|  |  |  | 
|---|
|  |  |  | 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.entity.WkOrder; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.entity.WkOrderItem; | 
|---|
|  |  |  | 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.entity.Fields; | 
|---|
|  |  |  | 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.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.springframework.beans.BeanUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Service("asnOrderItemService") | 
|---|
|  |  |  | public class AsnOrderItemServiceImpl extends ServiceImpl<AsnOrderItemMapper, AsnOrderItem> implements AsnOrderItemService { | 
|---|
|  |  |  | public class AsnOrderItemServiceImpl extends ServiceImpl<AsnOrderItemMapper, WkOrderItem> implements AsnOrderItemService { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AsnOrderService asnOrderMapper; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CompanysService companysService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DictDataService dictDataService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R generateBarcode(List<Long> orders) { | 
|---|
|  |  |  | if (Objects.isNull(orders) || orders.isEmpty()) { | 
|---|
|  |  |  | throw new CoolException("参数不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderItem> items = this.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getId, orders)); | 
|---|
|  |  |  | List<WkOrderItem> items = this.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getId, orders)); | 
|---|
|  |  |  | if (items.isEmpty()) { | 
|---|
|  |  |  | throw new CoolException("单据明细不存在!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("单号不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | AsnOrderTemplate template = listMap.get(key).stream().findFirst().get(); | 
|---|
|  |  |  | AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, key)); | 
|---|
|  |  |  | WkOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, key)); | 
|---|
|  |  |  | if (!Objects.isNull(order)) { | 
|---|
|  |  |  | sbFaild.append(template.getCode()).append(",已添加!!"); | 
|---|
|  |  |  | throw new CoolException(sbFaild.toString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | order = new AsnOrder(); | 
|---|
|  |  |  | order = new WkOrder(); | 
|---|
|  |  |  | 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) | 
|---|
|  |  |  | .setType(OrderType.getTypeVal(template.getType())) | 
|---|
|  |  |  | .setWkType(OrderWorkType.getWorkType(template.getWkType())); | 
|---|
|  |  |  | if (!asnOrderMapper.save(order)) { | 
|---|
|  |  |  | throw new CoolException("单据保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderItem> items = new ArrayList<>(); | 
|---|
|  |  |  | List<WkOrderItem> items = new ArrayList<>(); | 
|---|
|  |  |  | for (AsnOrderTemplate orderTemplate : listMap.get(key)) { | 
|---|
|  |  |  | AsnOrderItem orderItem = new AsnOrderItem(); | 
|---|
|  |  |  | WkOrderItem orderItem = new WkOrderItem(); | 
|---|
|  |  |  | if (StringUtils.isBlank(orderTemplate.getMatnrCode())) { | 
|---|
|  |  |  | throw new CoolException(orderTemplate.getCode() + ":物料编码不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException(sbFaild.toString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, matnr); | 
|---|
|  |  |  | orderItem.setAsnId(order.getId()) | 
|---|
|  |  |  | .setAsnCode(order.getCode()) | 
|---|
|  |  |  | orderItem.setOrderId(order.getId()) | 
|---|
|  |  |  | .setOrderCode(order.getCode()) | 
|---|
|  |  |  | .setSplrBatch(orderTemplate.getSplrBatch()) | 
|---|
|  |  |  | .setPlatItemId(orderTemplate.getPlatItemId()) | 
|---|
|  |  |  | .setAnfme(Double.parseDouble(orderTemplate.getAnfme())) | 
|---|
|  |  |  | .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) | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!items.isEmpty()) { | 
|---|
|  |  |  | //                double qty = items.stream().mapToDouble(AsnOrderItem::getQty).sum(); | 
|---|
|  |  |  | double anfme = items.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); | 
|---|
|  |  |  | if (!asnOrderMapper.update(new LambdaUpdateWrapper<AsnOrder>() | 
|---|
|  |  |  | double anfme = items.stream().mapToDouble(WkOrderItem::getAnfme).sum(); | 
|---|
|  |  |  | if (!asnOrderMapper.update(new LambdaUpdateWrapper<WkOrder>() | 
|---|
|  |  |  | //                        .set(AsnOrder::getQty, qty) | 
|---|
|  |  |  | .set(AsnOrder::getAnfme, anfme) | 
|---|
|  |  |  | .eq(AsnOrder::getId, order.getId()))) { | 
|---|
|  |  |  | .set(WkOrder::getAnfme, anfme) | 
|---|
|  |  |  | .eq(WkOrder::getId, order.getId()))) { | 
|---|
|  |  |  | throw new CoolException("单据数量修改失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @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())) { | 
|---|
|  |  |  | WkOrderItem wkOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), WkOrderItem.class); | 
|---|
|  |  |  | if (StringUtils.isNoneBlank(wkOrderItem.getSplrCode())) { | 
|---|
|  |  |  | Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>() | 
|---|
|  |  |  | .eq(Companys::getId, asnOrderItem.getSplrCode()) | 
|---|
|  |  |  | .eq(Companys::getId, wkOrderItem.getSplrCode()) | 
|---|
|  |  |  | .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val)); | 
|---|
|  |  |  | if (!Objects.isNull(companys)) { | 
|---|
|  |  |  | asnOrderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName()); | 
|---|
|  |  |  | wkOrderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Objects.isNull(asnOrderItem.getAnfme()) || Double.compare(asnOrderItem.getAnfme(), 0.0) <= 0) { | 
|---|
|  |  |  | if (Objects.isNull(wkOrderItem.getAnfme()) || Double.compare(wkOrderItem.getAnfme(), 0.0) <= 0) { | 
|---|
|  |  |  | throw new CoolException("计划数不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if (StringUtils.isBlank(asnOrderItem.getSplrBatch())) { | 
|---|
|  |  |  | //            throw new CoolException("供应商批次不能为空!!"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, wkOrderItem.getMatnrCode())); | 
|---|
|  |  |  | if (Objects.isNull(matnr)) { | 
|---|
|  |  |  | throw new CoolException("数据错误:物料" + wkOrderItem.getMatnrCode() + "不存在!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BeanUtils.copyProperties(matnr, wkOrderItem); | 
|---|
|  |  |  | wkOrderItem.setMatnrCode(matnr.getCode()).setMatnrId(matnr.getId()).setMaktx(matnr.getName()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //保存扩展字段 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | String uuid16 = CommonUtil.randomUUID16(); | 
|---|
|  |  |  | Boolean fields = FieldsUtils.saveFields(params, uuid16); | 
|---|
|  |  |  | if (fields) { | 
|---|
|  |  |  | asnOrderItem.setFieldsIndex(uuid16); | 
|---|
|  |  |  | StringBuffer sb = new StringBuffer(); | 
|---|
|  |  |  | if (Objects.isNull(wkOrderItem.getFieldsIndex()) || StringUtils.isBlank(wkOrderItem.getFieldsIndex())) { | 
|---|
|  |  |  | List<Fields> fields = FieldsUtils.getFieldsSta(); | 
|---|
|  |  |  | for (Fields field : fields) { | 
|---|
|  |  |  | if (Objects.isNull(params.get(field.getFields()))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //字段拼接 | 
|---|
|  |  |  | sb.append(params.get(field.getFields())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sb.append(wkOrderItem.getMatnrId() + wkOrderItem.getSplrBatch()); | 
|---|
|  |  |  | //获取16位uuid | 
|---|
|  |  |  | String uuid16 = Cools.md5Chinese(sb.toString()); | 
|---|
|  |  |  | wkOrderItem.setFieldsIndex(uuid16); | 
|---|
|  |  |  | params.put("index", uuid16); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //保存或更新动态字段值 | 
|---|
|  |  |  | FieldsUtils.updateFieldsValue(params); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | throw new RuntimeException(e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!this.saveOrUpdate(asnOrderItem)) { | 
|---|
|  |  |  | wkOrderItem.setUpdateBy(loginUserId).setCreateBy(loginUserId); | 
|---|
|  |  |  | if (!this.saveOrUpdate(wkOrderItem)) { | 
|---|
|  |  |  | throw new CoolException("收货通知单明细保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public IPage<Map<String, Object>> listByAsnId(PageParam<AsnOrderItem, BaseParam> pageParam, QueryWrapper<AsnOrderItem> buildWrapper) { | 
|---|
|  |  |  | public IPage<Map<String, Object>> listByAsnId(PageParam<WkOrderItem, BaseParam> pageParam, QueryWrapper<WkOrderItem> buildWrapper) { | 
|---|
|  |  |  | IPage<Map<String, Object>> hsahMap = this.baseMapper.resultForMap(pageParam, buildWrapper); | 
|---|
|  |  |  | if (hsahMap.getRecords().isEmpty()) { | 
|---|
|  |  |  | return hsahMap.setRecords(new ArrayList<>()); | 
|---|