| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | @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 |
| | |
| | | // 保存或更新 |
| | | if (isUpdate) { |
| | | saleOrderService.updateById(saleOrder); |
| | | // 销售订单更新后,顺带更新 xtyasrs 库 cust_wait_pakin 的数量(mobile/bill/query 的 count 取自 anfme),仅更新、不插入,失败不影响主流程 |
| | | updateWaitPakinQuantity(data); |
| | | } else { |
| | | saleOrderService.insert(saleOrder); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 比较两个Double值是否相等(处理null值) |
| | | * 比较两个Double值是否相等(处理null值和0值) |
| | | * 重要:null和0被认为是不同的值,需要更新 |
| | | * @param d1 第一个Double值 |
| | | * @param d2 第二个Double值 |
| | | * @return true-相等,false-不相等 |
| | | */ |
| | | private boolean isDoubleEqual(Double d1, Double d2) { |
| | | // 两个都是null,认为相等 |
| | | if (d1 == null && d2 == null) { |
| | | return true; |
| | | } |
| | | // 一个为null,另一个不为null,认为不相等(需要更新) |
| | | // 注意:null和0是不同的,null和0.0会返回false,触发更新 |
| | | if (d1 == null || d2 == null) { |
| | | return false; |
| | | } |
| | | // 使用误差范围比较,避免浮点数精度问题 |
| | | // 两个都不为null,使用误差范围比较,避免浮点数精度问题 |
| | | // 注意:0值会被正确比较,例如:0.0和0.0会返回true,100.0和0.0会返回false |
| | | 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) { |