cl
2 天以前 fc2afc38a9eefaba1bb2f3fad0b793b4ea846cb3
src/main/java/com/zy/asrs/controller/SaleOrderController.java
@@ -7,7 +7,9 @@
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.SaleOrder;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.service.SaleOrderService;
import com.zy.asrs.service.WaitPakinService;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
@@ -16,6 +18,8 @@
import com.zy.common.web.BaseController;
import org.apache.poi.xssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -31,8 +35,12 @@
@RestController
public class SaleOrderController extends BaseController {
    private static final Logger logger = LoggerFactory.getLogger(SaleOrderController.class);
    @Autowired
    private SaleOrderService saleOrderService;
    @Autowired
    private WaitPakinService waitPakinService;
    @RequestMapping(value = "/saleOrder/{id}/auth")
    @ManagerAuth
@@ -314,6 +322,8 @@
                // 保存或更新
                if (isUpdate) {
                    saleOrderService.updateById(saleOrder);
                    // 销售订单更新后,顺带更新 xtyasrs 库 cust_wait_pakin 的数量(mobile/bill/query 的 count 取自 anfme),仅更新、不插入,失败不影响主流程
                    updateWaitPakinQuantity(data);
                } else {
                    saleOrderService.insert(saleOrder);
                }
@@ -351,6 +361,41 @@
        return Math.abs(d1 - d2) < 0.0001;
    }
    /**
     * 销售订单数量更新后,顺带更新 cust_wait_pakin 的 anfme/nqty(mobile/bill/query 的 count 取自 anfme)。
     * 仅按 matnr+mnemonic 更新,不插入;无匹配或异常不影响主流程。
     */
    private void updateWaitPakinQuantity(Map<String, Object> data) {
        try {
            String invCode = data.get("invCode") != null ? String.valueOf(data.get("invCode")).trim() : null;
            String orderCode = data.get("orderCode") != null ? String.valueOf(data.get("orderCode")).trim() : null;
            if (Cools.isEmpty(invCode) || Cools.isEmpty(orderCode)) {
                logger.debug("cust_wait_pakin 跳过更新:订单号或物料编码为空,orderCode={},invCode={}", orderCode, invCode);
                return;
            }
            Double productQty = parseDoubleSafely(data.get("productQty"));
            if (productQty == null) {
                productQty = parseDoubleSafely(data.get("orderQty"));
            }
            logger.info("cust_wait_pakin 开始更新:订单号={},物料编码={},数量={}", orderCode, invCode, productQty);
            String invName = data.get("invName") != null ? String.valueOf(data.get("invName")) : null;
            WaitPakin updateEntity = new WaitPakin();
            updateEntity.setMaktx(invName);
            updateEntity.setAnfme(productQty);
            updateEntity.setNqty(productQty);
            updateEntity.setModiTime(new Date());
            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>().eq("matnr", invCode).eq("mnemonic", orderCode);
            boolean updated = waitPakinService.update(updateEntity, wrapper);
            if (updated) {
                logger.info("cust_wait_pakin 更新成功:订单号={},物料编码={},数量={}", orderCode, invCode, productQty);
            } else {
                logger.warn("cust_wait_pakin 更新未影响行(可能无匹配记录):订单号={},物料编码={}", orderCode, invCode);
            }
        } catch (Exception e) {
            logger.error("cust_wait_pakin 更新异常:orderCode={},invCode={},error={}", data.get("orderCode"), data.get("invCode"), e.getMessage(), e);
        }
    }
    @RequestMapping(value = "/saleOrder/update/auth")
    @ManagerAuth
    public R update(SaleOrder saleOrder) {