自动化立体仓库 - WMS系统
zhang
2025-06-09 85bf46de8403f0a1e814d1133be11406285b4af2
测试,xiug bug
34个文件已修改
1个文件已添加
530 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderDetl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MatParam.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlPakoutMapper.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderDetlPakoutService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderDetlPakoutServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ReportToThirdServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/MathUtils.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/enumUtils/OrderInAndOutType.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/nc/entity/NccJcQilibcBarcodeflowWms.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/nc/entity/NccSaleXsfhmxWms.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/nc/task/handler/BaseDataHandler.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/nc/task/handler/PlanOrderHandler.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/nc/vo/ic_generalout_b.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/OrderDetlPakoutMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locDetl/locDetl.js 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderDetl/orderDetl.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakin/order.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakin/out.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakout/order.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakout/out.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/out.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/orderPakout/out.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -13,6 +13,7 @@
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MathUtils;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.WrkDto;
import com.zy.common.utils.Synchro;
@@ -68,6 +69,9 @@
    @Resource
    private StaDescService staDescService;
    @Autowired
    private OrderDetlPakinService orderDetlPakinService;
    @RequestMapping("/pda/WarehouseOut/v1")
    @ManagerAuth(memo = "并板途中拣料-参考念初")
@@ -209,10 +213,10 @@
                        Synchro.Copy(orderDetl, combMat);
                        combMat.setMatnr(orderDetl.getMatnr());
                        combMat.setBatch(orderDetl.getBatch());
                        combMat.setAnfme(orderDetl.getAnfme() - orderDetl.getWorkQty());
                        combMat.setAnfme(MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getWorkQty()));
                        combMat.setMaktx(orderDetl.getMaktx());
                        combMat.setSpecs(orderDetl.getSpecs());
                        combMat.setEnableQty(orderDetl.getAnfme() - orderDetl.getWorkQty());
                        combMat.setEnableQty(MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getWorkQty()));
                        combMats.add(combMat);
                    }
                    combParam.setCombMats(combMats);
@@ -240,9 +244,15 @@
        Mat mat = matService.selectByMatnr(nccJcQilibcBarcodeflowWms.getWlbm());
        MatParam matParam = new MatParam();
        Synchro.Copy(mat, matParam);
        OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectOne(new EntityWrapper<OrderDetlPakin>().eq("order_no", nccJcQilibcBarcodeflowWms.getZkdh()).eq("matnr", mat.getMatnr()).eq("batch", nccJcQilibcBarcodeflowWms.getVbatchcode()));
        if (orderDetlPakin == null) {
            throw new CoolException("未找到此单号");
        }
        matParam.setStandby1(orderDetlPakin.getStandby1());
        matParam.setOrderNo(nccJcQilibcBarcodeflowWms.getZkdh());
        matParam.setBatch(nccJcQilibcBarcodeflowWms.getVbatchcode());
        matParam.setAnfme(nccJcQilibcBarcodeflowWms.getAsnnum() == null ? 0.0D : nccJcQilibcBarcodeflowWms.getAsnnum().doubleValue());
        matParam.setWeight(nccJcQilibcBarcodeflowWms.getNastnum() == null ? 0.0D : nccJcQilibcBarcodeflowWms.getNastnum().doubleValue());
        matParam.setAnfme2(nccJcQilibcBarcodeflowWms.getNastnum() == null ? 0.0D : nccJcQilibcBarcodeflowWms.getNastnum().doubleValue());
        return R.ok().add(matParam);
    }
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -11,6 +11,7 @@
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.entity.result.WrkTraceVo;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MathUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.web.BaseController;
import org.springframework.beans.BeanUtils;
@@ -168,7 +169,7 @@
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
                        orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
                item.setAnfme(MathUtils.add(item.getAnfme(), orderDetl.getAnfme()));
                item.setStandby1(param.getDefNumber());
                if (!orderDetlService.updateById(item)) {
                    throw new CoolException("保存订单明细档失败");
@@ -232,7 +233,7 @@
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getBrand(),
                        param.getItemId(), orderDetl.getStandby2(), orderDetl.getStandby3(),
                        orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3());
                item.setAnfme(item.getAnfme() + orderDetl.getAnfme());
                item.setAnfme(MathUtils.add(item.getAnfme() , orderDetl.getAnfme()));
                if (!orderDetlService.updateById(item)) {
                    throw new CoolException("保存订单明细档失败");
                }
@@ -272,7 +273,7 @@
            totalQty = totalQty + orderDetl.getAnfme();
            wrkQty = wrkQty + orderDetl.getWorkQty();
            endQty = endQty + orderDetl.getQty();
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
            double issued = Optional.of(MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getWorkQty())).orElse(0.0D);
            if (issued > 0.0) {
                List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getOrigin(), null);
                for (LocDetl locDetl : locDetls) {
src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -11,6 +11,7 @@
import com.zy.asrs.service.BasQualityTestingService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.StoreTypeService;
import com.zy.asrs.utils.MathUtils;
import com.zy.common.utils.Synchro;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
@@ -565,8 +566,9 @@
    }
    public Double getEnableQty() {
        if (null != this.anfme && this.workQty != null) {
            return this.anfme - this.workQty;
            return MathUtils.subtract(this.anfme, this.workQty);
        }
//        if (null != this.anfme && this.qty != null) {
//            return this.anfme - this.qty;
src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -46,6 +46,10 @@
        // 物料数量
        private Double anfme;
        // 物料辅数量
        private Double weight;
        // 物料数量
        private Double enableQty;
src/main/java/com/zy/asrs/entity/param/MatParam.java
@@ -1,5 +1,7 @@
package com.zy.asrs.entity.param;
import com.baomidou.mybatisplus.annotations.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@@ -10,6 +12,42 @@
 */
@Data
public class MatParam implements Serializable {
    /**
     * 备用1
     */
    @ApiModelProperty(value= "备用1")
    private String standby1 = "";
    /**
     * 备用2
     */
    @ApiModelProperty(value= "备用2")
    private String standby2 = "";
    /**
     * 备用3
     */
    @ApiModelProperty(value= "备用3")
    private String standby3 = "";
    /**
     * 备用1
     */
    @ApiModelProperty(value= "备用1")
    private String boxType1 = "";
    /**
     * 备用2
     */
    @ApiModelProperty(value= "备用2")
    private String boxType2 = "";
    /**
     * 备用3
     */
    @ApiModelProperty(value= "备用3")
    private String boxType3 = "";
    /**
     * 商品编号
     */
src/main/java/com/zy/asrs/mapper/OrderDetlPakoutMapper.java
@@ -13,15 +13,15 @@
@Repository
public interface OrderDetlPakoutMapper extends BaseMapper<OrderDetlPakout> {
    OrderDetlPakout selectItem(@Param("orderId") Long orderId, @Param("matnr") String matnr, @Param("batch") String batch, @Param("brand")String brand,
                               @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3, @Param("boxType1")String boxType1,
                               @Param("boxType2")String boxType2,
                               @Param("boxType3")String boxType3);
    OrderDetlPakout selectItem(@Param("orderId") Long orderId, @Param("matnr") String matnr, @Param("batch") String batch, @Param("brand") String brand,
                               @Param("standby1") String standby1, @Param("standby2") String standby2, @Param("standby3") String standby3, @Param("boxType1") String boxType1,
                               @Param("boxType2") String boxType2,
                               @Param("boxType3") String boxType3);
    OrderDetlPakout selectItemByOrderNo(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch,
                                        @Param("brand")String brand, @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3, @Param("boxType1")String boxType1,
                                        @Param("boxType2")String boxType2,
                                        @Param("boxType3")String boxType3);
                                        @Param("brand") String brand, @Param("standby1") String standby1, @Param("standby2") String standby2, @Param("standby3") String standby3, @Param("boxType1") String boxType1,
                                        @Param("boxType2") String boxType2,
                                        @Param("boxType3") String boxType3);
    List<OrderDetlPakout> selectWorkingDetls(Long orderId);
@@ -29,30 +29,31 @@
    Integer getPakoutPageCount(Map<String, Object> map);
    int increase(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("brand")String brand,
                 @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3, @Param("boxType1")String boxType1,
                 @Param("boxType2")String boxType2,
                 @Param("boxType3")String boxType3, @Param("qty")Double qty);
    int increase(@Param("orderId") Long orderId, @Param("matnr") String matnr, @Param("batch") String batch, @Param("brand") String brand,
                 @Param("standby1") String standby1, @Param("standby2") String standby2, @Param("standby3") String standby3, @Param("boxType1") String boxType1,
                 @Param("boxType2") String boxType2,
                 @Param("boxType3") String boxType3, @Param("qty") Double qty);
    int decrease(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("brand")String brand,
                 @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3, @Param("boxType1")String boxType1,
                 @Param("boxType2")String boxType2,
                 @Param("boxType3")String boxType3, @Param("qty")Double qty);
    int decrease(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("brand") String brand,
                 @Param("standby1") String standby1, @Param("standby2") String standby2, @Param("standby3") String standby3, @Param("boxType1") String boxType1,
                 @Param("boxType2") String boxType2,
                 @Param("boxType3") String boxType3, @Param("qty") Double qty);
    int modifyStatus(@Param("orderId") Long orderId, @Param("status")Integer status);
    int modifyStatus(@Param("orderId") Long orderId, @Param("status") Integer status);
    int addToLogTable(OrderDetlPakout orderDetl);
    int increaseQtyByOrderNo(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("brand")String brand,
                             @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3, @Param("boxType1")String boxType1,
                             @Param("boxType2")String boxType2,
                             @Param("boxType3")String boxType3, @Param("qty")Double qty);
    int increaseQtyByOrderNo(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("brand") String brand,
                             @Param("standby1") String standby1, @Param("standby2") String standby2, @Param("standby3") String standby3, @Param("boxType1") String boxType1,
                             @Param("boxType2") String boxType2,
                             @Param("boxType3") String boxType3, @Param("qty") Double qty);
    int  increaseQtyById(@Param("id")Long id, @Param("qty")Double qty);
    int increaseQtyById(@Param("id") Long id, @Param("qty") Double qty);
    int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("brand")String brand,
                        @Param("standby1")String standby1, @Param("standby2")String standby2, @Param("standby3")String standby3, @Param("boxType1")String boxType1,
                        @Param("boxType2")String boxType2,
                        @Param("boxType3")String boxType3, @Param("workQty")Double workQty);
    int increaseWorkQty(@Param("orderId") Long orderId, @Param("matnr") String matnr, @Param("batch") String batch, @Param("brand") String brand,
                        @Param("standby1") String standby1, @Param("standby2") String standby2, @Param("standby3") String standby3, @Param("boxType1") String boxType1,
                        @Param("boxType2") String boxType2,
                        @Param("boxType3") String boxType3, @Param("workQty") Double workQty);
    int increaseWorkQtyById(@Param("id") Long id, @Param("workQty") Double workQty);
}
src/main/java/com/zy/asrs/service/OrderDetlPakoutService.java
@@ -29,8 +29,10 @@
    boolean increaseQtyByOrderNo(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double qty);
    boolean increaseQtyById(Long id, Double qty);
    /**
     * 入出库任务生成时,更新单据表中作业数量
     *
     * @param orderId
     * @param matnr
     * @param batch
@@ -38,4 +40,7 @@
     * @return
     */
    boolean increaseWorkQty(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double workQty);
    boolean increaseWorkQtyById(Long id, Double workQty);
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -13,6 +13,7 @@
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MathUtils;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.DetlDto;
import com.zy.common.model.enums.WorkNoType;
@@ -531,7 +532,7 @@
        ArrayList<PickMatParam> maps = new ArrayList<>();
        for (OrderDetl orderDetl : list) {
            //剩余可用数量
            double count = orderDetl.getAnfme() - orderDetl.getWorkQty();
            double count = MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getWorkQty());
            if (count <= 0) {
                continue;
            }
@@ -587,6 +588,7 @@
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(),
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
                detlDto.setWeight(elem.getWeight());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                    assert one != null;
@@ -655,6 +657,7 @@
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(),
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
                detlDto.setOrderNo(elem.getOrderNo());
                detlDto.setWeight(elem.getWeight());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                    assert one != null;
@@ -688,6 +691,7 @@
                waitPakin.setStandby1(detlDto.getStandby1());
                waitPakin.setStandby2(detlDto.getStandby2());
                waitPakin.setStandby3(detlDto.getStandby3());
                waitPakin.setWeight(detlDto.getWeight());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
@@ -1063,7 +1067,7 @@
                }
                //可出库数量 = 订单数量 - 作业中数量
                Double outQty = orderDetl.getAnfme() - orderDetl.getWorkQty();
                Double outQty = MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getWorkQty());
                if (outQty <= 0) {
                    break;
                }
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -527,74 +527,74 @@
                // 分类
                Long tagId;
                // 一级分类
                if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) {
                    Tag priTag = tagService.selectOne(new EntityWrapper<Tag>().eq("name", matParam.getGroupCode()));
                    if (priTag == null) {
                        Tag top = tagService.getTop();
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(top.getId());
                        priTag = new Tag(
                                null,    // 编号
                                matParam.getGroupCode(),    // 名称
                                top.getId(),    // 父级
                                top.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                2,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(priTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    // 二级分类
                    Tag secTag = tagService.selectByName(matParam.getGroupName(), 3);
                    if (secTag == null) {
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(priTag.getId());
                        secTag = new Tag(
                                null,    // 编号
                                matParam.getGroupName(),    // 名称
                                priTag.getId(),    // 父级
                                priTag.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                3,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(secTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    tagId = secTag.getId();
                } else {
                    tagId = tagService.getTop().getId();
                }
//                if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) {
//                    Tag priTag = tagService.selectOne(new EntityWrapper<Tag>().eq("name", matParam.getGroupCode()));
//                    if (priTag == null) {
//                        Tag top = tagService.getTop();
//                        NodeUtils nodeUtils = new NodeUtils();
//                        nodeUtils.executePath(top.getId());
//                        priTag = new Tag(
//                                null,    // 编号
//                                matParam.getGroupCode(),    // 名称
//                                top.getId(),    // 父级
//                                top.getName(),    // 父级名称
//                                nodeUtils.path.toString(),    // 关联路径
//                                nodeUtils.pathName.toString(),    // 关联路径名
//                                0,    // 类型
//                                null,    // 负责人
//                                null,    // 图片
//                                null,    // 简要描述
//                                null,    // 数量
//                                2,    // 等级
//                                null,    // 排序
//                                1,    // 状态
//                                now,    // 添加时间
//                                null,    // 添加人员
//                                now,    // 修改时间
//                                null,    // 修改人员
//                                null    // 备注
//                        );
//                        if (tagMapper.insert(priTag) == 0) {
//                            throw new CoolException("服务器内部错误,请联系管理员");
//                        }
//                    }
//                    // 二级分类
//                    Tag secTag = tagService.selectByName(matParam.getGroupName(), 3);
//                    if (secTag == null) {
//                        NodeUtils nodeUtils = new NodeUtils();
//                        nodeUtils.executePath(priTag.getId());
//                        secTag = new Tag(
//                                null,    // 编号
//                                matParam.getGroupName(),    // 名称
//                                priTag.getId(),    // 父级
//                                priTag.getName(),    // 父级名称
//                                nodeUtils.path.toString(),    // 关联路径
//                                nodeUtils.pathName.toString(),    // 关联路径名
//                                0,    // 类型
//                                null,    // 负责人
//                                null,    // 图片
//                                null,    // 简要描述
//                                null,    // 数量
//                                3,    // 等级
//                                null,    // 排序
//                                1,    // 状态
//                                now,    // 添加时间
//                                null,    // 添加人员
//                                now,    // 修改时间
//                                null,    // 修改人员
//                                null    // 备注
//                        );
//                        if (tagMapper.insert(secTag) == 0) {
//                            throw new CoolException("服务器内部错误,请联系管理员");
//                        }
//                    }
//                    tagId = secTag.getId();
//                } else {
//                    tagId = tagService.getTop().getId();
//                }
                mat.sync(matParam);
                mat.setTagId(tagId);
                mat.setTagId(Long.parseLong(matParam.getGroupCode()));
                mat.setStatus(1);
                mat.setCreateTime(now);
                mat.setUpdateTime(now);
src/main/java/com/zy/asrs/service/impl/OrderDetlPakoutServiceImpl.java
@@ -98,4 +98,14 @@
    public boolean increaseWorkQty(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double workQty) {
        return this.baseMapper.increaseWorkQty(orderId, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, workQty) > 0;
    }
    /**
     * 入出库任务生成时,更新单据表中作业数量
     * @param workQty
     * @return
     */
    @Override
    public boolean increaseWorkQtyById(Long id, Double workQty) {
        return this.baseMapper.increaseWorkQtyById(id,  workQty) > 0;
    }
}
src/main/java/com/zy/asrs/service/impl/ReportToThirdServiceImpl.java
@@ -345,7 +345,7 @@
            }
            whsTransBillBodyVO = new WhsTransBillBodyVO();
            whsTransBillBodyVO.setCstateid(nccScPcdaWms.getVcode());
            whsTransBillBodyVO.setCstateid(nccScPcdaWms.getPkBatchcode());
            String remark = orderDetl.getRemark();
            //if (!Cools.isEmpty(remark)) {
@@ -403,7 +403,8 @@
            generalout_b.setCotherwhid(rukucangku);
            generalout_b.setCothercalbodyvid(storeType2.getDepartmentId());
            generalout_b.setNshouldassistnum(orderDetl.getQty());
            //generalout_b.setNshouldassistnum(orderDetl.getQty());
            generalout_b.setNnum(orderDetl.getQty());
            generalout_b.setVbatchcode(orderDetl.getBatch());
            ic_purchasein_bs.add(generalout_b);
        }
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -100,6 +100,9 @@
    @Autowired
    private InventoryCheckOrderDetlService checkOrderDetlService;
    @Resource
    private OrderDetlPakoutService orderDetlPakoutService;
    @Override
    @Transactional
    public String startupFullPutStore(FullStoreParam param, Long userId) {
@@ -469,15 +472,15 @@
                continue;
            }
//            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
            OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
            OrderDetlPakout orderDetlPakout = orderDetlPakoutService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
                    , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
            if (orderDetl == null) {
                orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), null, locDto.getBrand()
            if (orderDetlPakout == null) {
                orderDetlPakout = orderDetlPakoutService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null, locDto.getBrand()
                        , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
            }
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(orderDetl);
            wrkDetl.sync(orderDetlPakout);
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
@@ -488,7 +491,7 @@
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            wrkDetl.setThreeCode(orderDetl.getId() + "");
            wrkDetl.setThreeCode(orderDetlPakout.getId() + "");
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
@@ -497,11 +500,12 @@
//                throw new CoolException("修改订单明细数量失败");
//            }
//            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
            OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
                    orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
                    orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
                    , locDto.getAnfme());
            OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
            orderDetlPakoutService.increaseWorkQtyById(orderDetlPakout.getId(), locDto.getAnfme());
//            OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
//                    orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
//                    orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
//                    ,locDto.getAnfme() );
            OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetlPakout.getOrderId(), 2L, userId);
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.selectById(taskDto.getLocNo());
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -7,6 +7,7 @@
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.MathUtils;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.DetlDto;
import lombok.extern.slf4j.Slf4j;
@@ -67,7 +68,7 @@
                continue;
            }
            orderDetl.setWorkQty(orderDetl.getQty());
            orderDetl.setAnfme(orderDetl.getAnfme() - orderDetl.getQty());
            orderDetl.setAnfme(MathUtils.subtract(orderDetl.getAnfme(), orderDetl.getQty()));
            orderDetl.setQty(0D);
            orderDetlService.updateById(orderDetl);
        }
@@ -97,11 +98,11 @@
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(), dto.getBrand(), dto.getStandby1(), dto.getStandby2(), dto.getStandby3(), dto.getBoxType1(), dto.getBoxType2(), dto.getBoxType3());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                detlDto.setAnfme(MathUtils.add(detlDto.getAnfme(), detail.getAnfme()));
                OrderDetl orderDetl = OrderDetl.find(orderDetlList, dto.getMatnr(), dto.getBatch(), dto.getBrand(), dto.getStandby1(), dto.getStandby2(), dto.getStandby3(), dto.getBoxType1(), dto.getBoxType2(), dto.getBoxType3());
                assert orderDetl != null;
                orderDetl.setAnfme(orderDetl.getAnfme() + detail.getAnfme());
                orderDetl.setAnfme(MathUtils.add(orderDetl.getAnfme(), detail.getAnfme()));
            } else {
                list.add(dto);
                orderDetlList.add(detail);
@@ -141,7 +142,7 @@
                    continue;
                }
                if (orderDetlSou.beSimilar(orderDetl)) {
                    double v = orderDetlSou.getAnfme() - orderDetlSou.getQty();
                    double v = MathUtils.subtract(orderDetlSou.getAnfme(), orderDetlSou.getQty());
                    if (v < orderDetl.getQty() || orderDetl.getQty().equals(v)) {
                        orderDetlSou.setQty(orderDetlSou.getAnfme());
                        orderDetl.setQty(orderDetl.getQty() - v);
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -6,6 +6,7 @@
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.MathUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -232,7 +233,7 @@
//                                        wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme())) {
                                if (!orderDetlPakoutService.increaseQtyById(orderDetlPakout.getId(), wrkDetl.getAnfme())) {
                                //if (!orderDetlPakoutService.increaseQtyByOrderNo(orderDetlPakout.getOrderNo(), orderDetlPakout.getMatnr(), orderDetlPakout.getBatch(), orderDetlPakout.getBrand(), orderDetlPakout.getStandby1(), orderDetlPakout.getStandby2(), orderDetlPakout.getStandby3(), orderDetlPakout.getBoxType1(), orderDetlPakout.getBoxType2(), orderDetlPakout.getBoxType3(), wrkDetl.getAnfme())) {
                                    //if (!orderDetlPakoutService.increaseQtyByOrderNo(orderDetlPakout.getOrderNo(), orderDetlPakout.getMatnr(), orderDetlPakout.getBatch(), orderDetlPakout.getBrand(), orderDetlPakout.getStandby1(), orderDetlPakout.getStandby2(), orderDetlPakout.getStandby3(), orderDetlPakout.getBoxType1(), orderDetlPakout.getBoxType2(), orderDetlPakout.getBoxType3(), wrkDetl.getAnfme())) {
//                                    exceptionHandle("拣料入库 ===>> 更新订单完成数量失败;[workNo={0}],[locNo={1}]",
//                                            wrkMast.getWrkNo(), wrkMast.getLocNo());
                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -570,7 +571,7 @@
                            if (orderDetl.getAnfme() <= wrkDetl.getAnfme()) {
                                orderDetlService.deleteById(orderDetl.getId());
                            } else {
                                orderDetl.setAnfme(orderDetl.getAnfme() - wrkDetl.getAnfme());
                                orderDetl.setAnfme(MathUtils.subtract(orderDetl.getAnfme(), wrkDetl.getAnfme()));
                                orderDetlService.updateById(orderDetl);
                            }
                            orderDetl2.setId(null);
src/main/java/com/zy/asrs/utils/MathUtils.java
New file
@@ -0,0 +1,87 @@
package com.zy.asrs.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class MathUtils {
    // 默认除法运算精度
    private static final int DEFAULT_DIV_SCALE = 10;
    /**
     * 精确加法
     */
    public static BigDecimal add(BigDecimal... values) {
        BigDecimal result = BigDecimal.ZERO;
        for (BigDecimal value : values) {
            result = result.add(value);
        }
        return result;
    }
    /**
     * 精确加法
     */
    public static Double add(Double... values) {
        BigDecimal result = BigDecimal.ZERO;
        for (Double value : values) {
            result = result.add(BigDecimal.valueOf(value));
        }
        return result.doubleValue();
    }
    /**
     * 精确减法
     */
    public static BigDecimal subtract(BigDecimal a, BigDecimal b) {
        return a.subtract(b);
    }
    /**
     * 精确减法
     */
    public static Double subtract(Double a, Double b) {
        return BigDecimal.valueOf(a).subtract(BigDecimal.valueOf(b)).doubleValue();
    }
    /**
     * 精确乘法
     */
    public static BigDecimal multiply(BigDecimal... values) {
        BigDecimal result = BigDecimal.ONE;
        for (BigDecimal value : values) {
            result = result.multiply(value);
        }
        return result;
    }
    /**
     * 精确除法,默认保留10位小数,四舍五入
     */
    public static BigDecimal divide(BigDecimal a, BigDecimal b) {
        return a.divide(b, DEFAULT_DIV_SCALE, RoundingMode.HALF_UP);
    }
    /**
     * 精确除法,自定义精度和舍入模式
     */
    public static BigDecimal divide(BigDecimal a, BigDecimal b, int scale, RoundingMode mode) {
        return a.divide(b, scale, mode);
    }
    /**
     * 比较大小:a > b 返回 1;a < b 返回 -1;相等返回 0
     */
    public static int compare(BigDecimal a, BigDecimal b) {
        return a.compareTo(b);
    }
    /**
     * 转换为字符串输出,自动去除无效零
     */
    public static String toPlainString(BigDecimal value) {
        return value.stripTrailingZeros().toPlainString();
    }
}
src/main/java/com/zy/common/model/enumUtils/OrderInAndOutType.java
@@ -124,48 +124,72 @@
        @Transactional
        public List<Order> selectComplete() {
            List<OrderPakin> orderPakinList = orderPakinService.selectComplete();
            if (orderPakinList == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderListPakin(orderPakinList);
        }
        @Transactional
        public List<Order> selectComplete8() {
            List<OrderPakin> orderPakinList = orderPakinService.selectComplete8();
            if (orderPakinList == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderListPakin(orderPakinList);
        }
        @Transactional
        public boolean addToLogTableOrder(Order order) {
            OrderPakin orderPakin = OrderTransFormationUtil.transformationPakin(order);
            if (orderPakin == null) {
                throw new CoolException("未找到该单据");
            }
            return orderPakinService.addToLogTable(orderPakin);
        }
        @Transactional
        public List<Order> selectOrderNoL(String orderNo) {
            List<OrderPakin> orderPakinList = orderPakinService.selectorderNoL(orderNo);
            if (orderPakinList == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderListPakin(orderPakinList);
        }
        @Transactional
        public Order selectOrderMoveStatus() {
            OrderPakin orderPakin = orderPakinService.selectOrderMoveStatus();
            if (orderPakin == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderPakin(orderPakin);
        }
        @Transactional
        public Order selectOrderMoveStatusInitial() {
            OrderPakin orderPakin = orderPakinService.selectOrderMoveStatusInitial();
            if (orderPakin == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderPakin(orderPakin);
        }
        @Transactional
        public OrderDetl selectItem(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
            OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(orderId, matnr, batch, brand, standby1, standby2, standby3, boxType1, boxType2, boxType3);
            if (orderDetlPakin == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderDetlPakin(orderDetlPakin);
        }
        @Transactional
        public OrderDetl selectItem(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
            OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(orderNo, matnr, batch, brand, standby1, standby2, standby3, boxType1, boxType2, boxType3);
            if (orderDetlPakin == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderDetlPakin(orderDetlPakin);
        }
@@ -173,6 +197,9 @@
        public OrderDetl findByLook(List<OrderDetl> orderDetls, Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
            List<OrderDetlPakin> orderDetlPakins = OrderTransFormationUtil.transformationDetlListPakin(orderDetls);
            OrderDetlPakin orderDetlPakin = orderDetlPakinService.findByLook(orderDetlPakins, orderId, matnr, batch, brand, standby1, standby2, standby3, boxType1, boxType2, boxType3);
            if (orderDetlPakin == null) {
                throw new CoolException("未找到该单据");
            }
            return OrderTransFormationUtil.transformationOrderDetlPakin(orderDetlPakin);
        }
src/main/java/com/zy/common/web/WcsController.java
@@ -89,11 +89,11 @@
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        if (param.getBarcode().startsWith("11")) {
            locTypeDto.setLocType2((short) 1);
        }else if (param.getBarcode().startsWith("13")) {
        } else if (param.getBarcode().startsWith("13")) {
            locTypeDto.setLocType2((short) 2);
        }else if (param.getBarcode().startsWith("16")) {
        } else if (param.getBarcode().startsWith("16")) {
            locTypeDto.setLocType2((short) 3);
        }else {
        } else {
            return R.error("未知托盘码规则");
        }
@@ -185,7 +185,7 @@
//        dto.setStaNo(103);
//        LocMast locMastxx = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "O"));
//        dto.setLocNo(locMastxx.getLocNo());
//        dto.setWorkNo(Integer.parseInt(Math.random() * 1000 + ""));
//        dto.setWorkNo(Integer.parseInt((System.currentTimeMillis() + "").substring(10)));
        StartupDto dto = commonService.getLocNo( 1, devpNo,findLocNoAttributeVo, locTypeDto);
        if (dto == null) {
src/main/java/com/zy/nc/entity/NccJcQilibcBarcodeflowWms.java
@@ -88,6 +88,11 @@
     */
    private String wmsMemo;
    /**
     *
     */
    private String ckbm;
    @Override
    public boolean equals(Object that) {
        if (this == that) {
src/main/java/com/zy/nc/entity/NccSaleXsfhmxWms.java
@@ -135,6 +135,11 @@
    private String wlbm;
    /**
     *
     */
    private String vbatchcode;
    /**
     * 
     */
    private String wlmc;
src/main/java/com/zy/nc/task/handler/BaseDataHandler.java
@@ -195,7 +195,6 @@
                user.setUsername(nccJcRyWms.getRybm());
                user.setNickname(nccJcRyWms.getRymc());
                user.setMobile(nccJcRyWms.getRybm());
                user.setRoleId(12L);
                user.setStatus(1);
                userService.updateById(user);
            }
@@ -289,11 +288,11 @@
            matParam.setSpecs(vGetBdMaterial.get规格());
            matParam.setModel(vGetBdMaterial.get型号());
            matParam.setUnit(vGetBdMaterial.get主单位());
            matParam.setManu(vGetBdMaterial.get辅单位());
            matParam.setMemo(vGetBdMaterial.get备注());
            matParam.setName(vGetBdMaterial.get物料简称u8旧品名());
            matParam.setSku(vGetBdMaterial.get物料简称u8旧品名());
            matParam.setOrigin(vGetBdMaterial.get主辅换算比());
            matParam.setGroupCode(vGetBdMaterial.get存货分类编码());
            matParam.setGroupName(vGetBdMaterial.get存货分类名称());
            matParam.setGroupCode(priTag.getId() + "");
            matDetails.add(matParam);
        }
        if (!matDetails.isEmpty()) {
src/main/java/com/zy/nc/task/handler/PlanOrderHandler.java
@@ -91,6 +91,7 @@
                    detlDto = new DetlDto();
                    detlDto.setMatnr(nccSaleXsfhmxWms.getWlbm());
                    detlDto.setAnfme(nccSaleXsfhmxWms.getNnum().doubleValue());
                    detlDto.setBatch(nccSaleXsfhmxWms.getVbatchcode());
                    detlDto.setWeight(nccSaleXsfhmxWms.getNastnum().doubleValue());
                    detlDto.setStandby1(nccSaleXsfhmxWms.getFhckbm());
                    detlDto.setLineNumber(i);
@@ -105,6 +106,7 @@
                param.setOrderDetails(orderDetails);
                openService.pakoutOrderCreate(param);
                nccSaleXsfhmxWmsService.updateBatchById(map.get(key));
                size++;
            }
        } catch (Exception e) {
            e.printStackTrace();
src/main/java/com/zy/nc/vo/ic_generalout_b.java
@@ -28,4 +28,6 @@
    private String  cotherwhid;
    private String cothercalbodyvid;
    private Double nnum;
}
src/main/resources/application.yml
@@ -31,6 +31,9 @@
    jdbc-url: jdbc:mysql://127.0.0.1:3306/wmsdata
    username: root
    password: root
#    jdbc-url: jdbc:mysql://192.168.5.61:3306/wmsdata
#    username: liku
#    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
src/main/resources/mapper/asrs/OrderDetlPakoutMapper.xml
@@ -248,4 +248,12 @@
        <include refid="standbyAll"></include>
    </update>
    <update id="increaseWorkQtyById">
        update man_order_detl_pakout
        set work_qty = work_qty + #{workQty}
        where 1=1
        and id = #{id}
    </update>
</mapper>
src/main/webapp/static/js/common.js
@@ -187,17 +187,17 @@
    // ,{field: 'tagId$', align: 'center',title: '所属归类'}
    ,{field: 'maktx', align: 'center',title: '商品名称(品名)', width: 200}
    // ,{field: 'name', align: 'center',title: '别名'}
    ,{field: 'sku', align: 'center',title: 'U8旧品名'}
    ,{field: 'specs', align: 'center',title: '规格'}
    ,{field: 'model', align: 'center',title: '型号'}
    ,{field: 'color', align: 'center',title: '颜色', hide: true}
    ,{field: 'brand', align: 'center',title: '品牌', hide: true}
    ,{field: 'unit', align: 'center',title: '单位', hide: false}
    ,{field: 'manu', align: 'center',title: '辅单位'}
    ,{field: 'price', align: 'center',title: '单价', hide: true}
    ,{field: 'sku', align: 'center',title: '物料简称'}
    ,{field: 'units', align: 'center',title: '单位量', hide: true}
    ,{field: 'barcode', align: 'center',title: '条码', hide: true}
    ,{field: 'origin', align: 'center',title: '产地', hide: true}
    ,{field: 'manu', align: 'center',title: '厂家', hide: true}
    ,{field: 'origin', align: 'center',title: '换算比例'}
    ,{field: 'manuDate', align: 'center',title: '生产日期', hide: true}
    ,{field: 'itemNum', align: 'center',title: '品项数', hide: true}
    ,{field: 'safeQty', align: 'center',title: '安全库存量', hide: true}
@@ -224,10 +224,13 @@
var detlCols = [
    {field: 'matnr', align: 'center',title: '商品编号(品号)', sort:true}
    ,{field: 'maktx', align: 'center',title: '商品名称(品名)', sort:true}
    ,{field: 'sku', align: 'center',title: 'U8旧品名'}
    ,{field: 'orderNo', align: 'center',title: '单据编号', hide: false}
    ,{field: 'batch', align: 'center',title: '批次'}
    ,{field: 'anfme', align: 'center',title: '数量', hide: false}
    ,{field: 'weight', align: 'center',title: '辅数量'}
    ,{field: 'unit', align: 'center',title: '单位'}
    ,{field: 'manu', align: 'center',title: '辅单位'}
    ,{field: 'zpallet', align: 'center',title: '托盘条码', hide: false}
    ,{field: 'specs', align: 'center',title: '规格', hide: false}
    ,{field: 'model', align: 'center',title: '型号'}
@@ -235,13 +238,10 @@
    ,{field: 'standby1$', align: 'center',title: '仓库'}
    ,{field: 'color', align: 'center',title: '颜色', hide: true}
    ,{field: 'brand', align: 'center',title: '品牌', hide: true}
    ,{field: 'unit', align: 'center',title: '单位', hide: false}
    ,{field: 'price', align: 'center',title: '单价', hide: true}
    ,{field: 'sku', align: 'center',title: 'sku', hide: true}
    ,{field: 'units', align: 'center',title: '单位量', hide: true}
    ,{field: 'barcode', align: 'center',title: '条码', hide: true}
    ,{field: 'origin', align: 'center',title: '产地', hide: true}
    ,{field: 'manu', align: 'center',title: '厂家', hide: true}
    ,{field: 'manuDate', align: 'center',title: '生产日期', hide: true}
    ,{field: 'itemNum', align: 'center',title: '品项数', hide: true}
    ,{field: 'safeQty', align: 'center',title: '安全库存量', hide: true}
src/main/webapp/static/js/locDetl/locDetl.js
@@ -4,20 +4,22 @@
        {type: 'checkbox'},
        {field: 'locNo$', align: 'center',title: '库位号'}
        ,{field: 'storeDate', align: 'center',title: '库龄(天)', sort:true}
        ,{field: 'matnr', align: 'center',title: '商品编号', sort:true}
        ,{field: 'maktx', align: 'center',title: '商品名称', sort:true}
        ,{field: 'orderNo', align: 'center',title: '单据编号', hide: true}
        ,{field: 'batch', align: 'center',title: '批号', width: 300, sort:true}
        ,{field: 'anfme', align: 'center',title: '数量'}
        ,{field: 'zpallet', align: 'center',title: '托盘条码'}
        ,{field: 'specs', align: 'center',title: '规格'}
        ,{field: 'matnr', align: 'center',title: '商品编号(品号)', sort:true}
        ,{field: 'maktx', align: 'center',title: '商品名称(品名)', sort:true}
        ,{field: 'sku', align: 'center',title: 'U8旧品名'}
        ,{field: 'orderNo', align: 'center',title: '单据编号', hide: false}
        ,{field: 'batch', align: 'center',title: '批次'}
        ,{field: 'anfme', align: 'center',title: '数量', hide: false}
        ,{field: 'weight', align: 'center',title: '辅数量'}
        ,{field: 'unit', align: 'center',title: '单位'}
        ,{field: 'manu', align: 'center',title: '辅单位'}
        ,{field: 'zpallet', align: 'center',title: '托盘条码', hide: false}
        ,{field: 'specs', align: 'center',title: '规格', hide: false}
        ,{field: 'model', align: 'center',title: '型号'}
        ,{field: 'standby1$', align: 'center',title: '仓库'}
        ,{field: 'color', align: 'center',title: '颜色', hide: true}
        ,{field: 'brand', align: 'center',title: '品牌', hide: true}
        ,{field: 'unit', align: 'center',title: '单位', hide: true}
        ,{field: 'price', align: 'center',title: '单价', hide: true}
        ,{field: 'sku', align: 'center',title: 'sku', hide: true}
        ,{field: 'units', align: 'center',title: '单位量', hide: true}
        ,{field: 'barcode', align: 'center',title: '条码', hide: true}
        ,{field: 'origin', align: 'center',title: '产地', hide: true}
@@ -25,18 +27,16 @@
        ,{field: 'manuDate', align: 'center',title: '生产日期', hide: true}
        ,{field: 'itemNum', align: 'center',title: '品项数', hide: true}
        ,{field: 'safeQty', align: 'center',title: '安全库存量', hide: true}
        ,{field: 'weight', align: 'center',title: '辅数量'}
        ,{field: 'length', align: 'center',title: '单箱毛重', hide: true}
        ,{field: 'volume', align: 'center',title: '单箱体积', hide: true}
        ,{field: 'threeCode', align: 'center',title: '箱子尺寸', hide: true}
        ,{field: 'supp', align: 'center',title: '供应商', hide: true}
        ,{field: 'suppCode', align: 'center',title: '供应商编码', hide: true}
        ,{field: 'beBatch$', align: 'center',title: '是否批次', hide: true}
        ,{field: 'deadTime', align: 'center',title: '保质期', hide: true}
        ,{field: 'deadWarn', align: 'center',title: '预警天数', hide: true}
        ,{field: 'source$', align: 'center',title: '制购', hide: true}
        ,{field: 'check$', align: 'center',title: '要求检验', hide: true}
        ,{field: 'danger$', align: 'center',title: '危险品', hide: true}
        ,{field: 'appeTime$', align: 'center',title: '入库时间'}
        ,{field: 'frozen$', align: 'center',title: '冻结否',
            templet: function(d) {
                // 根据条件判断字体颜色
src/main/webapp/static/js/order/order.js
@@ -134,6 +134,7 @@
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'specs', title: '规格'},
                            {field: 'batch', title: '批号'},
                            {field: 'weight', title: '辅数量'},
                            {field: 'anfme', title: '待完结数量'},
                            {field: 'qty', title: '待上报数量', style: 'font-weight: bold'},
                            {field: 'workQty', title: '已上报数量'},
src/main/webapp/static/js/order/out.js
@@ -34,7 +34,7 @@
            ,{field: 'orderNo', align: 'center',title: '单据编号', templet: '#orderNoTpl', width: 160}
            ,{field: 'matnr', align: 'center',title: '商品编码', width: 160}
            ,{field: 'maktx', align: 'center',title: '商品名称', width: 200}
            ,{field: 'batch', align: 'center',title: '序列码'}
            ,{field: 'batch', align: 'center',title: '批次'}
            ,{field: 'specs', align: 'center',title: '规格'}
            // ,{field: 'anfme', align: 'center',title: '数量'}
            // ,{field: 'qty', align: 'center',title: '作业数量', style: 'font-weight: bold'}
src/main/webapp/static/js/orderDetl/orderDetl.js
@@ -44,7 +44,6 @@
            ,{field: 'updateBy$', align: 'center',title: '修改人员'}
            ,{field: 'updateTime$', align: 'center',title: '修改时间'}
            ,{field: 'memo', align: 'center',title: '备注'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        request: {
src/main/webapp/static/js/orderPakin/order.js
@@ -111,7 +111,7 @@
            layer.open({
                type: 1,
                title: false,
                area: '820px',
                area: '970px',
                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
@@ -132,6 +132,7 @@
                            {field: 'matnr', title: '商品编码', width: 160},
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'batch', title: '批号'},
                            {field: 'weight', title: '辅数量'},
                            {field: 'anfme', title: '数量'},
                            {field: 'workQty', title: '作业数量'},
                            {field: 'qty', title: '完成数量', style: 'font-weight: bold'},
src/main/webapp/static/js/orderPakin/out.js
@@ -34,7 +34,7 @@
            ,{field: 'orderNo', align: 'center',title: '单据编号', templet: '#orderNoTpl', width: 160}
            ,{field: 'matnr', align: 'center',title: '商品编码', width: 160}
            ,{field: 'maktx', align: 'center',title: '商品名称', width: 200}
            ,{field: 'batch', align: 'center',title: '序列码'}
            ,{field: 'batch', align: 'center',title: '批次'}
            ,{field: 'specs', align: 'center',title: '规格'}
            // ,{field: 'anfme', align: 'center',title: '数量'}
            // ,{field: 'qty', align: 'center',title: '作业数量', style: 'font-weight: bold'}
src/main/webapp/static/js/orderPakout/order.js
@@ -112,7 +112,7 @@
            layer.open({
                type: 1,
                title: false,
                area: '820px',
                area: '970px',
                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
@@ -133,6 +133,7 @@
                            {field: 'matnr', title: '商品编码', width: 160},
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'batch', title: '批号'},
                            {field: 'weight', title: '辅数量'},
                            {field: 'anfme', title: '数量'},
                            {field: 'workQty', title: '作业数量'},
                            {field: 'qty', title: '完成数量', style: 'font-weight: bold'},
src/main/webapp/static/js/orderPakout/out.js
@@ -34,8 +34,9 @@
            ,{field: 'orderNo', align: 'center',title: '单据编号', templet: '#orderNoTpl', width: 160}
            ,{field: 'matnr', align: 'center',title: '商品编码', width: 160}
            ,{field: 'maktx', align: 'center',title: '商品名称', width: 200}
            ,{field: 'batch', align: 'center',title: '序列码'}
            ,{field: 'batch', align: 'center',title: '批次'}
            ,{field: 'specs', align: 'center',title: '规格'}
            ,{field: 'weight$', align: 'center',title: '辅数量'}
            // ,{field: 'anfme', align: 'center',title: '数量'}
            // ,{field: 'qty', align: 'center',title: '作业数量', style: 'font-weight: bold'}
            ,{field: 'enableQty', align: 'center',title: '待出数量', style: 'font-weight: bold'}
@@ -161,6 +162,7 @@
                                    {field: 'title', title: '商品', merge: true, align: 'center', width: 350},
                                    {field: 'batch', title: '序列码', align: 'center'},
                                    {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'},
                                    {field: 'weight', title: '辅数量', align: 'center', width: 90, style: 'font-weight: bold'},
                                    {field: 'locNo', title: '货位', align: 'center', width: 100, templet: '#locNoTpl'},
                                    {field: 'frozen$', title: '明细', align: 'center', width: 90, templet: '#locFrozen'},
                                    {field: 'frozenLoc$', title: '库位', align: 'center', width: 90, templet: '#locFrozenLoc'},
src/main/webapp/views/order/out.html
@@ -107,9 +107,9 @@
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">序列码:</label>
                                <label class="layui-form-label">批次:</label>
                                <div class="layui-input-inline">
                                    <input name="batch" class="layui-input" placeholder="序列码"/>
                                    <input name="batch" class="layui-input" placeholder="批次"/>
                                </div>
                            </div>
                            <!--                            <div class="layui-inline">-->
src/main/webapp/views/orderPakout/out.html
@@ -107,9 +107,9 @@
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">序列码:</label>
                                <label class="layui-form-label">批次:</label>
                                <div class="layui-input-inline">
                                    <input name="batch" class="layui-input" placeholder="序列码"/>
                                    <input name="batch" class="layui-input" placeholder="批次"/>
                                </div>
                            </div>
                            <!--                            <div class="layui-inline">-->