rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -142,7 +142,7 @@ <CreateByOrderButton setCreateDialog={setCreateDialog} /> <MyCreateButton onClick={() => { setManualDialog(true); setmodalType(0) }} /> <SelectColumnsButton preferenceKey='outStock' /> <ImportButton value={'asnOrderItem'} /> <ImportButton value={'outStock'} /> {/* <MyExportButton /> */} </TopToolbar> )} rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
@@ -269,6 +269,7 @@ const { setOpen } = props; const { selectedIds, onUnselectItems } = useListContext(); const notify = useNotify(); const refresh = useRefresh(); const confirm = async (event) => { const res = await request.post(`/outStock/generate/orders`, { ids: selectedIds }); if (res?.data?.code === 200) { @@ -276,6 +277,7 @@ } else { notify(res.data.msg); } refresh(); onUnselectItems(); setOpen(false); } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
@@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONArray; 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.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; @@ -47,7 +48,9 @@ public R page(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<DeliveryItem, BaseParam> pageParam = new PageParam<>(baseParam, DeliveryItem.class); return R.ok().add(deliveryItemService.page(pageParam, pageParam.buildWrapper(true))); QueryWrapper<DeliveryItem> wrapper = pageParam.buildWrapper(true); wrapper.apply("anfme > work_qty + qty "); return R.ok().add(deliveryItemService.page(pageParam, wrapper)); } @PreAuthorize("hasAuthority('manager:deliveryItem:list')") rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java
New file @@ -0,0 +1,195 @@ package com.vincent.rsf.server.manager.entity.excel; import cn.afterturn.easypoi.excel.annotation.Excel; import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize; import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; /** * @author Ryan * @version 1.0 * @title AsnOrderTemplate * @description * @create 2025/3/12 13:49 */ @Data @ExcelAutoColumnSize @Accessors(chain = true) public class OutStockTemplate { /** * 编号 */ @Excel(name = "*出库单号") @ApiModelProperty(value = "*出库单号") @ExcelComment(value = "code", example = "OS5945272236") private String code; /** * PO单号 */ @Excel(name = "DO单号") @ApiModelProperty(value = "DO单号") @ExcelComment(value = "poCode", example = "DO59755695") private String poCode; // /** // * PO单据标识 // */ // @Excel(name = "PO单据标识") // @ApiModelProperty(value= "PO单据标识") // @ExcelComment(value = "poId", example = "123456698") // private String poId; @Excel(name = "行号") @ApiModelProperty("行号") @ExcelComment(value = "platItemId", example = "1357564255478") private String platItemId; @Excel(name = "客户订单号") @ApiModelProperty("客户订单号") @ExcelComment(value = "platOrderCode", example = "PT202564713301") private String platOrderCode; @Excel(name = "工单号") @ApiModelProperty("工单号") @ExcelComment(value = "platWorkCode", example = "PWC2354894211") private String platWorkCode; @Excel(name = "项目号") @ApiModelProperty("项目号") @ExcelComment(value = "projectCode", example = "PC2365845636001") private String projectCode; /** * 单据类型 */ @Excel(name = "*单据类型") @ApiModelProperty(value = "*单据类型") @ExcelComment(value = "type", example = "入库单") private String type; /** * 业务类型 */ @Excel(name = "*业务类型") @ApiModelProperty(value = "*业务类型") @ExcelComment(value = "wkType", example = "采购入库单") private String wkType; // @Excel(name = "执行状态") // @ApiModelProperty(value= "执行状态") // @ExcelComment(value = "exceStatus", example = "0") // private String exceStatus; @Excel(name = "*物料编码") @ApiModelProperty("*物料编码") @ExcelComment(value = "matnrCode", example = "102010101545") private String matnrCode; @Excel(name = "物料名称") @ApiModelProperty("物料名称") @ExcelComment(value = "maktx", example = "天瑞019-大A型支架-55飞机轮黑色,三角轮盖喷漆银色 (带攻丝钉)右") private String maktx; // @Excel(name = "物料规格") // @ApiModelProperty("物料规格") // @ExcelComment(value = "maktx",example = "2*3*6") // private String spec; // // // @Excel(name = "物料型号") // @ApiModelProperty("物料型号") // @ExcelComment(value = "maktx",example = "abc") // private String model; @Excel(name = "供应商编码") @ApiModelProperty("供应商编码") @ExcelComment(value = "splrCode", example = "685947") private String splrCode; @Excel(name = "供应商名称") @ApiModelProperty("供应商名称") @ExcelComment(value = "splrName", example = "浙江中扬立库技术有限公司") private String splrName; // @Excel(name = "库存单位") // @ApiModelProperty("库存单位") // @ExcelComment(value = "stockUnit", example = "个") // private String stockUnit; // @Excel(name = "采购数量") // @ApiModelProperty("采购数量") // @ExcelComment(value = "purQty", example = "0") // private String purQty; // // @Excel(name = "采购单位") // @ApiModelProperty("采购单位") // @ExcelComment(value = "purUnit", example = "个") // private String purUnit; // @Excel(name = "已完成数量") // @ApiModelProperty("已完成数量") // @ExcelComment(value = "qty", example = "0") // private String qty; @Excel(name = "供应商批次") @ApiModelProperty("供应商批次") @ExcelComment(value = "splrBatch", example = "25251212") private String splrBatch; @Excel(name = "*数量") @ApiModelProperty("*数量") @ExcelComment(value = "anfme", example = "75") private String anfme; // @Excel(name = "二维码") // @ApiModelProperty("二维码") // @ExcelComment(value = "qrcode",example = "") // private String qrcode; // @Excel(name = "条形码") // @ApiModelProperty("条形码") // @ExcelComment(value = "barcode", example = "") // private String barcode; // // @Excel(name = "跟踪码") // @ApiModelProperty("跟踪码") // @ExcelComment(value = "trackCode", example = "") // private String trackCode; @Excel(name = "物流单号") @ApiModelProperty("物流单号") @ExcelComment(value = "logicNo", example = "SF100064851") private String logicNo; @Excel(name = "质检状态") @ApiModelProperty("质检状态") @ExcelComment(value = "isptResult", example = "合格") private String isptResult; @Excel(name = "预计送达时间") @ApiModelProperty("预计送达时间") @ExcelComment(value = "arrTime", example = "2025-05-21") private String arrTime; // @Excel(name = "包装名称") // @ApiModelProperty("包装名称") // @ExcelComment(value = "packName", example = "箱") // private String packName; @Excel(name = "备注") @ApiModelProperty("备注") @ExcelComment(value = "memo", example = "注:易碎品,轻拿放") private String memo; } rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java
@@ -4,7 +4,7 @@ public enum POExceStatus { PO_EXCE_STATUS_UN_EXCE("0", "未执行"), PO_EXCE_STATUS_EXCE_ING("1", "执行中"), PO_EXCE_STATUS_SECTION_DONE("3", "部分完成"), PO_EXCE_STATUS_SECTION_DONE("2", "部分完成"), PO_EXCE_STATUS_ALL_DONE("3", "已完成"), ; rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java
@@ -10,6 +10,7 @@ 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.manager.entity.excel.OutStockTemplate; import com.vincent.rsf.server.manager.enums.OrderType; import com.vincent.rsf.server.manager.enums.OrderWorkType; import com.vincent.rsf.server.common.domain.BaseParam; @@ -98,17 +99,17 @@ @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()); ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), OutStockTemplate.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)); 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)) { continue; @@ -125,7 +126,7 @@ 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())) { rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -193,12 +193,15 @@ List<AsnOrderItem> orderItems = new ArrayList<>(); listMap.get(key).forEach(item -> { AsnOrderItem orderItem = new AsnOrderItem(); Double anfme = Math.round((item.getAnfme() - item.getWorkQty() - item.getQty()) * 10000) / 10000.0; BeanUtils.copyProperties(item, orderItem); orderItem.setId(null) .setPoCode(order.getPoCode()) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()) .setFieldsIndex(item.getFieldsIndex()) .setAnfme(anfme) .setWorkQty(0.0) .setAsnId(order.getId()) .setAsnCode(order.getCode()) .setStockUnit(item.getUnit()) @@ -221,7 +224,7 @@ Double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); //修改计划数量 order.setAnfme(sum); order.setAnfme(sum).setWorkQty(0.0); if (!this.saveOrUpdate(order)) { throw new CoolException("主单数量修改失败!!"); } @@ -229,8 +232,13 @@ throw new CoolException("明细保存失败!!"); } Short exceStatus = POExceStatus.PO_EXCE_STATUS_SECTION_DONE.val; if (delivery.getAnfme().compareTo(order.getAnfme()) <= 0) { exceStatus = AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val; } if (!deliveryService.update(new LambdaUpdateWrapper<Delivery>() .set(Delivery::getExceStatus, POExceStatus.PO_EXCE_STATUS_EXCE_ING.val) .set(Delivery::getExceStatus, exceStatus) .set(Delivery::getWorkQty, sum) .eq(Delivery::getId, key))) { throw new CoolException("主单修改失败!!");