自动化立体仓库 - WMS系统
skyouc
2 天以前 0b0ac0117ada5f59d2558a710e6ae0b0817e3d49
损溢单下发
6个文件已修改
171 ■■■■■ 已修改文件
src/main/java/com/zy/api/controller/KopenApiController.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/OrderItemsParam.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/KopenApiService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/adjustOrder/adjustOrder.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/KopenApiController.java
@@ -2,13 +2,15 @@
import com.zy.api.controller.params.PageRequestParams;
import com.zy.api.entity.OrderItemsParam;
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.StockAdjustParams;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.SyncMatParmas;
import com.zy.api.entity.dto.XSR;
import com.zy.api.service.KopenApiService;
import com.zy.common.web.BaseController;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -26,7 +28,7 @@
@Slf4j
@RestController
@RequestMapping("/kopen")
public class KopenApiController {
public class KopenApiController  extends BaseController{
    @Autowired
    private KopenApiService kopenApiService;
@@ -161,6 +163,23 @@
    }
    /**
     * 零件损溢单下发
     * @author Ryan
     * @date 2025/11/24 15:22
     * @param params
     * @return com.core.common.R
     */
    @ApiOperation("零件损溢单下发")
    @PostMapping("/sendBSBYDetails")
    public XSR sendStockAdjust(@RequestBody StockAdjustParams params) {
        if (Objects.isNull(params)) {
            return XSR.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            return XSR.error("上报订单列表不能为空!!");
        }
        return kopenApiService.sendStockAdjust(params, 1L);
    }
}
src/main/java/com/zy/api/entity/OrderItemsParam.java
@@ -6,7 +6,6 @@
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
@ApiModel(value = "OrderItemsParam", description = "订单明细参数")
@@ -42,4 +41,10 @@
    @ApiModelProperty("捆绑/叫料/数量数量")
    private Integer pick_qty;
    @ApiModelProperty("损溢数量")
    private Integer bsby_qty;
    @ApiModelProperty("托盘编号")
    private String location_no;
}
src/main/java/com/zy/api/service/KopenApiService.java
@@ -6,6 +6,7 @@
import com.zy.api.entity.OrderItemsParam;
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.StockAdjustParams;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.SyncMatParmas;
import com.zy.api.entity.dto.XSR;
@@ -70,4 +71,13 @@
     * @return com.core.common.R
     */
    XSR getStockInfo(PageRequestParams params);
    /**
     * 零件损溢单下发
     * @author Ryan
     * @date 2025/11/24 15:22
     * @param params
     * @return com.core.common.R
     */
    XSR sendStockAdjust(StockAdjustParams params, Long userId);
}
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.api.controller.params.PageRequestParams;
import com.zy.api.entity.OrderItemsParam;
@@ -10,6 +11,7 @@
import com.zy.api.entity.OutOrderParams;
import com.zy.api.entity.PubOrderParams;
import com.zy.api.entity.ReportOrderParam;
import com.zy.api.entity.StockAdjustParams;
import com.zy.api.entity.StockUpOrderParams;
import com.zy.api.entity.SyncMatParmas;
import com.zy.api.entity.dto.XSR;
@@ -17,6 +19,8 @@
import com.zy.api.enums.OrderType;
import com.zy.api.enums.OrderWkType;
import com.zy.api.service.KopenApiService;
import com.zy.asrs.entity.CheckOrder;
import com.zy.asrs.entity.CheckOrderDetl;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.Order;
@@ -24,6 +28,8 @@
import com.zy.asrs.enums.CommonEnum;
import com.zy.asrs.enums.OrderSettle;
import com.zy.asrs.enums.OrderTypeEnum;
import com.zy.asrs.service.CheckOrderDetlService;
import com.zy.asrs.service.CheckOrderService;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.OrderDetlService;
@@ -36,6 +42,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -52,6 +59,12 @@
    private MatService matService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private CheckOrderService checkOrderService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private CheckOrderDetlService checkOrderDetlService;
    /**
     * 接收下发订单信息
@@ -459,11 +472,108 @@
     */
    @Override
    public XSR getStockInfo(PageRequestParams params) {
      Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()), new EntityWrapper<LocDetl>()
        Page<LocDetl> locDetls = locDetlService.selectPage(new Page<>(params.getCurr(), params.getLimit()),
                new EntityWrapper<LocDetl>()
                .eq(!Objects.isNull(params.getPro_komcode()), "matnr", params.getPro_komcode())
                .eq(Objects.isNull(params.getPro_id()),"supp_code", params.getPro_id()));
        return XSR.ok(locDetls.getRecords());
    }
    /**
     * 零件损溢单下发
     *
     * @author Ryan
     * @date 2025/11/24 15:22
     * @param params
     * @return com.core.common.R
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public XSR sendStockAdjust(StockAdjustParams params, Long userId) {
        if (Objects.isNull(params)) {
            return XSR.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
            return XSR.error("订单明细不能为空!!");
        }
        // 校验参数
        if (Objects.isNull(params.getBsby_no())) {
            return XSR.error("损溢单编号不能为空!!");
        }
        CheckOrder checkOrder = checkOrderService
                .selectOne(new EntityWrapper<CheckOrder>().eq("order_no", params.getBsby_no()));
        if (!Objects.isNull(checkOrder)) {
            return XSR.error("损溢单已存在!!");
        }
        gentCheckOrders(params, userId);
        return XSR.ok("零件损溢单下发成功!!");
    }
    /** 生成新的零件损溢单
     * @param userId */
    @Transactional(rollbackFor = Exception.class)
    public void gentCheckOrders(StockAdjustParams checkOrder, Long userId) {
        CheckOrder order = new CheckOrder();
        order.setOrderNo(checkOrder.getBsby_no());
        order.setCstmrName(checkOrder.getCompany_id());
        order.setDefNumber(checkOrder.getKopen_id());
        order.setDocType(4L);
        order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
        order.setSettle(Long.valueOf(CommonEnum.COMMON_ENUM_Y.type + ""));
        order.setStatus(CommonEnum.COMMON_ENUM_Y.type);
        order.setOrderTime(checkOrder.getUpdate_time());
        order.setMemo(checkOrder.getResason());
        order.setShipName(checkOrder.getReason_name());
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
        if (!checkOrderService.insert(order)) {
            throw new CoolException("损溢单新增失败!!");
        }
        if (Objects.isNull(checkOrder.getDetails()) || checkOrder.getDetails().isEmpty()) {
            throw new CoolException("订单明细不能为空!!");
        }
        checkOrder.getDetails().forEach(item -> {
            CheckOrderDetl checkOrderDetl = new CheckOrderDetl();
            //通过托盘, 物料编码, 供应商编码查询库存明细
            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                    .eq("matnr", item.getPro_komcode())
                    .eq("zpallet", item.getLocation_no())
                    .eq("supp_code", item.getPro_id()));
            if (Objects.isNull(locDetl)) {
                throw new CoolException("库存不存在!!");
            }
            BeanUtils.copyProperties(locDetl, checkOrderDetl);
            checkOrderDetl.setLocDetlId(locDetl.getId());
            checkOrderDetl.setOrderId(order.getId());
            checkOrderDetl.setOrderNo(order.getOrderNo());
            checkOrderDetl.setMatnr(locDetl.getMatnr());
            checkOrderDetl.setMaktx(locDetl.getMaktx());
            checkOrderDetl.setBatch(locDetl.getBatch());
            checkOrderDetl.setSpecs(locDetl.getSpecs());
            checkOrderDetl.setThreeCode(locDetl.getThreeCode());
            checkOrderDetl.setSuppCode(locDetl.getSuppCode());
            checkOrderDetl.setStandby1(locDetl.getSuppCode());
            checkOrderDetl.setAnfme(new BigDecimal(locDetl.getAnfme().toString()));
            checkOrderDetl.setDiffQty(BigDecimal.ZERO);
            checkOrderDetl.setWorkQty(BigDecimal.ZERO);
            checkOrderDetl.setStatus(1);
            checkOrderDetl.setZpallet(locDetl.getZpallet());
            checkOrderDetl.setCreateBy(userId);
            checkOrderDetl.setCreateTime(new Date());
            checkOrderDetl.setUpdateBy(userId);
            checkOrderDetl.setUpdateTime(new Date());
            if (!checkOrderDetlService.insert(checkOrderDetl)) {
                throw new CoolException("保存盘点单明细失败");
            }
        });
    }
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -999,11 +999,11 @@
                    if (jsonObject.getInteger("code").equals(200)) {
                        success = true;
                    } else if (jsonObject.getInteger("code").equals(500)) {
                        log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PACK_DOWN_URL,
                        log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.IN_DISPATCH_RESULT,
                                JSON.toJSONString(mesCombParam), response);
                        throw new CoolException(jsonObject.getString("msg"));
                    } else {
                        log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PACK_DOWN_URL,
                        log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.IN_DISPATCH_RESULT,
                                JSON.toJSONString(mesCombParam), response);
                        throw new CoolException("上报mes系统失败");
                    }
@@ -1015,7 +1015,7 @@
                        // 保存接口日志
                        apiLogService.save(
                                "打包下线帮托上报",
                                MesConstant.URL + MesConstant.PACK_DOWN_URL,
                                MesConstant.URL + MesConstant.IN_DISPATCH_RESULT,
                                null,
                                "127.0.0.1",
                                JSON.toJSONString(mesCombParam),
src/main/webapp/static/js/adjustOrder/adjustOrder.js
@@ -47,11 +47,14 @@
        cols: [[
            {type: 'numbers'},
            {field: 'orderNo', title: '单据编号'},
            {field: 'docType$', align: 'center', title: '类型',  minWidth: 160, width: 160},
            {field: 'docType$', align: 'center', title: '类型',  minWidth: 120, width: 120},
            {field: 'defNumber', align: 'center', title: '流水号',  minWidth: 160, width: 160},
            {field: 'cstmrName', align: 'center', title: '公司',  minWidth: 160, width: 160},
            {field: 'orderTime', title: '订单时间', minWidth: 200, width: 200},
            {field: 'shipName', align: 'center',title: '调整原因'},
            {field: 'memo', align: 'center',title: '原因描述'},
            {field: 'settle$', align: 'center', title: '状态', templet: '#settleTpl',  minWidth: 120, width: 120},
            {align: 'center', title: '明细', toolbar: '#tbLook', minWidth: 160, width: 160},
            {field: 'createTime$', title: '创建时间', minWidth: 200, width: 200},
            {field: 'settle$', align: 'center', title: '状态', templet: '#settleTpl',  minWidth: 160, width: 160},
            {field: 'memo', align: 'center',title: '备注', hide: true},
            {align: 'center', title: '操作', toolbar: '#operate',}
        ]],
        request: {