skyouc
5 天以前 369719fca815076435ebdd8950dd34f362c66cb3
no message
4个文件已修改
250 ■■■■■ 已修改文件
rsf-admin/src/page/orders/asnOrder/POItemModal.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/asnOrder/POItemModal.jsx
@@ -105,21 +105,21 @@
    const handleSubmit = async () => {
        setFinally()
        setDisabled(true)
        setOpen(false)
        const parmas = {
            "purchaseId": record,
            "items": tabelData,
        }
        console.log('--------->');
        console.log(parmas);
        // const res = await request.post(`/asnOrder/purchases/save`, parmas);
        // if (res?.data?.code === 200) {
        //     setOpen(false);
        //     refresh();
        //     resetData()
        // } else {
        //     notify(res.data.msg);
        // }
        const res = await request.post(`/asnOrder/purchases/save`, parmas);
        if (res?.data?.code === 200) {
            notify(res.data.msg);
        } else {
            notify(res.data.msg);
        }
        setOpen(false);
        refresh();
        resetData()
        setDisabled(false)
    };
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -8,6 +8,8 @@
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.Purchase;
import com.vincent.rsf.server.manager.entity.PurchaseItem;
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.enums.OrderWorkType;
import com.vincent.rsf.server.common.utils.ExcelUtil;
@@ -21,8 +23,11 @@
import com.vincent.rsf.server.manager.entity.AsnOrderItem;
import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
import com.vincent.rsf.server.manager.enums.AsnExceStatus;
import com.vincent.rsf.server.manager.enums.POExceStatus;
import com.vincent.rsf.server.manager.service.AsnOrderItemService;
import com.vincent.rsf.server.manager.service.AsnOrderService;
import com.vincent.rsf.server.manager.service.impl.PurchaseItemServiceImpl;
import com.vincent.rsf.server.manager.service.impl.PurchaseServiceImpl;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.controller.BaseController;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
@@ -35,6 +40,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@Api(tags = "ASN入库通知单")
@@ -44,6 +50,10 @@
    private AsnOrderService asnOrderService;
    @Autowired
    private AsnOrderItemService asnOrderItemService;
    @Autowired
    private PurchaseServiceImpl purchaseService;
    @Autowired
    private PurchaseItemServiceImpl purchaseItemService;
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
    @PostMapping("/asnOrder/page")
@@ -110,18 +120,11 @@
    @PostMapping("/asnOrder/remove/{ids}")
    @Transactional(rollbackFor = Exception.class)
    public R remove(@PathVariable Long[] ids) {
        if (!asnOrderService.remove(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, Arrays.asList(ids)).eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val))) {
            return R.error("任务中单据不可删除!!");
        if (Objects.isNull(ids) || ids.length == 0) {
            return R.error("参数不能为空!!");
        }
        for (Long id : ids) {
            List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, id));
            if (!list.isEmpty()) {
                if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getAsnId, ids))) {
                    throw new CoolException("Details Delete Fail");
                }
            }
        }
        return R.ok("删除成功!!").add(ids);
        return asnOrderService.removeOrders(Arrays.asList(ids));
    }
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
@@ -225,15 +228,18 @@
    @ApiOperation("根据PO单新建收货单")
    @PreAuthorize("hasAuthority('manager:asnOrder:save')")
    public R orderCreateByPo(@RequestBody Map<String, Object> params) {
        if (Objects.isNull(params.get("ids"))) {
            return R.error("参数不能为空!!");
        if (Objects.isNull(params.get("purchaseId"))) {
            return R.error("PO主单ID不能为空!!");
        }
        String json = params.get("ids").toString();
        List<Long> ids = JSONArray.parseArray(params.get("ids").toString(), Long.class);
        if (ids.isEmpty()) {
            return R.error("参数不能为空");
        if (Objects.isNull(params.get("items"))) {
            return R.error("明细单据不能为空!!");
        }
        return asnOrderService.createByPo(ids);
//        List<Long> ids = JSONArray.parseArray(params.get("ids").toString(), Long.class);
//        if (ids.isEmpty()) {
//            return R.error("参数不能为空");
//        }
        return asnOrderService.createByPo(params);
    }
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
@@ -25,5 +25,7 @@
    R closeOrder(Long id);
    R  createByPo(List<Long> ids);
    R  createByPo(Map<String, Object> params);
    R removeOrders(List<Long> list);
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -1,6 +1,7 @@
package com.vincent.rsf.server.manager.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.common.R;
@@ -253,78 +254,137 @@
     * @version 1.0
     */
    @Override
    public R createByPo(List<Long> ids) {
        //获取未生成ASN单据
        List<Purchase> purchases = purchaseService.list(new LambdaQueryWrapper<Purchase>().in(Purchase::getId, ids));
        //生成ASN单据
        purchases.forEach(purchase -> {
            if (!Objects.isNull(purchase.getStartTime())) {
                //判断起始时间是否大于当前时间
                if (DateUtils.compareDate(new Date(), purchase.getStartTime())) {
                    return;
                }
    public R createByPo(Map<String, Object> params) {
        Long purchaseId = Long.parseLong(params.get("purchaseId").toString());
        List<PurchaseItem> itemList = JSONArray.parseArray(JSONObject.toJSONString(params.get("items")), PurchaseItem.class);
        if (itemList.isEmpty()) {
            throw new CoolException("PO单明细不能为空!!");
        }
        Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getId, purchaseId));
        if (Objects.isNull(purchase)) {
            throw new CoolException("PO单据不存在!!");
        }
        AsnOrder order = new AsnOrder();
        //根据编码规则生成ASN单号
        String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, purchase);
        order.setCode(code)
                .setArrTime(purchase.getPreArr())
                .setType(purchase.getType())
                .setWkType(purchase.getWkType())
                .setPoId(purchase.getId())
                .setPoCode(purchase.getCode());
        if (!this.save(order)) {
            throw new CoolException("ASN单据保存失败!!");
        }
        List<AsnOrderItem> orderItems = new ArrayList<>();
        for (PurchaseItem item : itemList) {
            AsnOrderItem orderItem = new AsnOrderItem();
            Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, item.getMatnrCode()));
            if (Objects.isNull(matnr)) {
                throw new CoolException("数据错误:当前物料不存在!!");
            }
            List<PurchaseItem> items = purchaseItemService.list(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getPurchaseId, purchase.getId()));
            if (items.isEmpty()) {
                throw new CoolException("子列表数据为空,请查询PO单是否正确录入!!");
            String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, item);
            if (StringUtils.isBlank(trackCode)) {
                throw new CoolException("单据跟踪码生成失败:请检查「sys_asn_mantr_label」是否配置完成!!");
            }
            AsnOrder order = new AsnOrder();
            //根据编码规则生成ASN单号
            String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, purchase);
            order.setAnfme(purchase.getAnfme())
                    .setCode(code)
                    .setArrTime(purchase.getPreArr())
                    .setQty(purchase.getQty())
                    .setPoId(purchase.getId())
                    .setPoCode(purchase.getCode());
            if (!this.save(order)) {
                throw new CoolException("ASN单据保存失败!!");
            orderItem.setAnfme(item.getAnfme())
                    .setAsnId(order.getId())
                    .setSplrName(item.getSplrName())
                    .setAsnCode(code)
                    .setSplrBatch(item.getSplrBatch())
                    .setSplrCode(item.getSplrCode())
                    .setPoDetlId(item.getId())
                    .setPlatItemId(item.getPlatItemId())
                    .setTrackCode(trackCode)
                    .setPoCode(purchase.getCode())
                    .setPurQty(item.getAnfme())
                    .setStockUnit(item.getUnit())
                    .setPurUnit(item.getUnit())
                    .setMatnrCode(matnr.getCode())
                    .setMaktx(matnr.getName())
                    .setMatnrId(matnr.getId());
            orderItems.add(orderItem);
//            purchaseItemService.update(new LambdaUpdateWrapper<>().set(PurchaseItem::getAnfme, ));
        }
        double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
        if (!asnOrderItemService.saveBatch(orderItems)) {
            throw new CoolException(("Asn单据明细保存失败!!"));
        }
        //任务执行完成,修改已完成数量和PO单执行状态
        purchase.setQty(sum + purchase.getQty())
                .setAnfme(purchase.getAnfme() - sum)
                .setExceStatus(POExceStatus.PO_EXCE_STATUS_EXCE_ING.val);
        if (!purchaseService.saveOrUpdate(purchase)) {
            throw new CoolException("PO单执行完成后,保存失败!!");
        }
        order.setAnfme(sum);
        if (!this.updateById(order)) {
            throw new CoolException("单据更新失败!!");
        }
        return R.ok("操作成功!!");
    }
    /**
     * @author Ryan
     * @date 2025/5/14
     * @description: 移除收货单
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R removeOrders(List<Long> ids) {
        for (Long id : ids) {
            List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
                    .eq(AsnOrderItem::getAsnId, id));
            if (list.isEmpty()) {
                continue;
            }
            List<AsnOrderItem> orderItems = new ArrayList<>();
            items.forEach(item -> {
                AsnOrderItem orderItem = new AsnOrderItem();
                Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, item.getMatnrCode()));
                if (Objects.isNull(matnr)) {
                    throw new CoolException("数据错误:当前物料不存在!!");
            list.forEach(item -> {
                PurchaseItem purchaseItem = purchaseItemService.getById(item.getPoDetlId());
                if (!Objects.isNull(purchaseItem)) {
                    purchaseItem.setQty(purchaseItem.getQty() - item.getAnfme())
                            .setAnfme(purchaseItem.getAnfme() + item.getAnfme());
                }
                String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, item);
                if (StringUtils.isBlank(trackCode)) {
                    throw new CoolException("单据跟踪码生成失败:请检查「sys_asn_mantr_label」是否配置完成!!");
                if (!purchaseItemService.updateById(purchaseItem)) {
                    throw new CoolException("PO单明细更新失败!!");
                }
//                String barcode = code + matnr.getCode();
                orderItem.setAnfme(item.getAnfme())
                        .setAsnId(order.getId())
                        .setQty(item.getAnfme())
                        .setSplrName(item.getSplrName())
                        .setAsnCode(code)
                        .setSplrBatch(item.getSplrBatch())
                        .setSplrCode(item.getSplrCode())
                        .setPoDetlId(item.getId())
                        .setPlatItemId(item.getPlatItemId())
                        .setTrackCode(trackCode)
                        .setPoCode(purchase.getCode())
                        .setPurQty(item.getAnfme())
                        .setPurUnit(item.getUnit())
                        .setMatnrCode(matnr.getCode())
                        .setMaktx(matnr.getName())
                        .setMatnrId(matnr.getId());
                orderItems.add(orderItem);
            });
            if (!asnOrderItemService.saveBatch(orderItems)) {
                throw new CoolException(("Asn单据明细保存失败!!"));
            double sum = list.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
            Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>()
                    .eq(Purchase::getCode, list.stream().findFirst().get().getPoCode()));
            purchase.setQty(purchase.getQty() - sum)
                    .setExceStatus(POExceStatus.PO_EXCE_STATUS_EXCE_ING.val)
                    .setAnfme(purchase.getAnfme() + sum);
            if (!purchaseService.updateById(purchase)) {
                throw new CoolException("PO单据更新失败!!");
            }
            //任务执行完成,修改已完成数量和PO单执行状态
            purchase.setQty(purchase.getAnfme())
                    .setExceStatus(POExceStatus.PO_EXCE_STATUS_EXCE_ING.val);
            if (!purchaseService.saveOrUpdate(purchase)) {
                throw new CoolException("PO单执行完成后,保存失败!!");
            }
        });
        }
        return null;
        if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>()
                .in(AsnOrderItem::getAsnId, ids))) {
            throw new CoolException("Details Delete Fail");
        }
        if (!this.remove(new LambdaQueryWrapper<AsnOrder>()
                .in(AsnOrder::getId, ids)
                .eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val))) {
            throw new CoolException("任务中单据不可删除!!");
        }
        return R.ok("操作成功!!");
    }
    /**