|  |  |  | 
|---|
|  |  |  | import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
|---|
|  |  |  | 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
|---|
|  |  |  | 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.entity.excel.OutStockTemplate; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.AsnExceStatus; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @author Ryan | 
|---|
|  |  |  | * @description 出库单模板导入 | 
|---|
|  |  |  | * @param | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | * @time 2025/4/22 12:40 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | public 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("物料导入失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), OutStockTemplate.class, ExcelUtil.getDefaultImportParams()); | 
|---|
|  |  |  | if (result.getList().isEmpty()) { | 
|---|
|  |  |  | throw new CoolException("表格内容不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderTemplate> resultList = result.getList(); | 
|---|
|  |  |  | Map<String, List<AsnOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(AsnOrderTemplate::getCode)); | 
|---|
|  |  |  | List<OutStockTemplate> resultList = result.getList(); | 
|---|
|  |  |  | Map<String, List<OutStockTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(OutStockTemplate::getCode)); | 
|---|
|  |  |  | for (String key : listMap.keySet()) { | 
|---|
|  |  |  | AsnOrderTemplate template = listMap.get(key).stream().findFirst().get(); | 
|---|
|  |  |  | OutStockTemplate template = listMap.get(key).stream().findFirst().get(); | 
|---|
|  |  |  | AsnOrder asnOrder = outStockService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, template.getCode())); | 
|---|
|  |  |  | if (Objects.isNull(asnOrder)) { | 
|---|
|  |  |  | if (!Objects.isNull(asnOrder)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | AsnOrder order = new AsnOrder(); | 
|---|
|  |  |  | 
|---|
|  |  |  | .setMemo(template.getMemo()) | 
|---|
|  |  |  | .setUpdateBy(loginUserId) | 
|---|
|  |  |  | .setCreateBy(loginUserId) | 
|---|
|  |  |  | .setPoId(Long.parseLong(template.getPoId())) | 
|---|
|  |  |  | .setType(OrderType.getTypeVal(template.getType())) | 
|---|
|  |  |  | .setWkType(OrderWorkType.getWorkType(template.getWkType())); | 
|---|
|  |  |  | if (!outStockService.save(order)) { | 
|---|
|  |  |  | throw new CoolException("单据保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderItem> items = new ArrayList<>(); | 
|---|
|  |  |  | for (AsnOrderTemplate orderTemplate : listMap.get(key)) { | 
|---|
|  |  |  | for (OutStockTemplate orderTemplate : listMap.get(key)) { | 
|---|
|  |  |  | AsnOrderItem orderItem = new AsnOrderItem(); | 
|---|
|  |  |  | Matnr matnr = null; | 
|---|
|  |  |  | if (!Objects.isNull(orderTemplate.getMatnrCode()) || StringUtils.isNotBlank(orderTemplate.getMatnrCode())) { | 
|---|
|  |  |  | if (StringUtils.isNotBlank(orderTemplate.getMatnrCode())) { | 
|---|
|  |  |  | matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>() | 
|---|
|  |  |  | .eq(Matnr::getCode, orderTemplate.getMatnrCode())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | .setAsnCode(order.getCode()) | 
|---|
|  |  |  | .setSplrBatch(orderTemplate.getSplrBatch()) | 
|---|
|  |  |  | .setAnfme(Double.parseDouble(orderTemplate.getAnfme())) | 
|---|
|  |  |  | .setQty(Double.parseDouble(orderTemplate.getQty())) | 
|---|
|  |  |  | .setSplrName(orderTemplate.getSplrName()) | 
|---|
|  |  |  | .setBarcode(orderTemplate.getBarcode()) | 
|---|
|  |  |  | .setTrackCode(orderTemplate.getTrackCode()) | 
|---|
|  |  |  | .setSplrCode(orderTemplate.getSplrCode()) | 
|---|
|  |  |  | .setPoCode(orderTemplate.getPoCode()) | 
|---|
|  |  |  | .setMaktx(orderTemplate.getMaktx()) | 
|---|
|  |  |  | .setMatnrCode(orderTemplate.getMatnrCode()) | 
|---|
|  |  |  | .setPurUnit(orderTemplate.getPurUnit()) | 
|---|
|  |  |  | .setPurQty(Double.parseDouble(orderTemplate.getPurQty())); | 
|---|
|  |  |  | .setMatnrCode(orderTemplate.getMatnrCode()); | 
|---|
|  |  |  | if (!Objects.isNull(matnr)) { | 
|---|
|  |  |  | orderItem.setMaktx(matnr.getName()).setMatnrCode(matnr.getCode()).setMatnrId(matnr.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!items.isEmpty()) { | 
|---|
|  |  |  | double qty = items.stream().mapToDouble(AsnOrderItem::getQty).sum(); | 
|---|
|  |  |  | double purQty = items.stream().mapToDouble(AsnOrderItem::getPurQty).sum(); | 
|---|
|  |  |  | if (!outStockService.update(new LambdaUpdateWrapper<AsnOrder>().set(AsnOrder::getQty, qty).set(AsnOrder::getAnfme, purQty).eq(AsnOrder::getId, order.getId()))) { | 
|---|
|  |  |  | double purQty = items.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); | 
|---|
|  |  |  | if (!outStockService.update(new LambdaUpdateWrapper<AsnOrder>() | 
|---|
|  |  |  | .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val) | 
|---|
|  |  |  | .set(AsnOrder::getAnfme, purQty).eq(AsnOrder::getId, order.getId()))) { | 
|---|
|  |  |  | throw new CoolException("单据数量修改失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | return R.ok("操作成功!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @author Ryan | 
|---|
|  |  |  | * @description 获取Page页 | 
|---|
|  |  |  | * @param | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | * @time 2025/4/22 12:39 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public IPage<Map<String, Object>> listByAsnId(PageParam<AsnOrderItem, BaseParam> pageParam, QueryWrapper<AsnOrderItem> buildWrapper) { | 
|---|
|  |  |  | IPage<Map<String, Object>> hsahMap = this.baseMapper.resultForMap(pageParam, buildWrapper); | 
|---|
|  |  |  | if (hsahMap.getRecords().isEmpty()) { | 
|---|
|  |  |  | return hsahMap.setRecords(new ArrayList<>()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | hsahMap.setRecords(FieldsUtils.getExtendFields(hsahMap.getRecords())); | 
|---|
|  |  |  | return hsahMap; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|