#
Junjie
2023-12-29 558333b7a634d346c0ec990ae9b1993fdae77344
#
46个文件已修改
10个文件已添加
1722 ■■■■■ 已修改文件
zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/OpenOrderPakinParam.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/OpenOrderPakoutParam.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkDetl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkDetlLog.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/LocDetlMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderDetlMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WaitPakinLogMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlLogMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkMastLogMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkMastMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/DocTypeService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/LocDetlService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OpenService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderDetlService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WaitPakinLogService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WorkService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlLogService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastLogService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/DocTypeServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/LocDetlServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OpenServiceImpl.java 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderDetlServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WaitPakinLogServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WorkServiceImpl.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlLogServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastLogServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/wms/OrderDetlMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/wms/OrderMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/wms/WrkDetlMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/wms/WrkMastMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WorkController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WrkDetlController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WrkDetlLogController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WrkMastController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/AbstractHandler.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/WorkLogScheduler.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/WorkMastScheduler.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/core/ReturnT.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/WorkLogHandler.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/WorkMastHandler.java 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/static/js/wrkMast/wrkMast.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/views/report/locDetl.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/views/wrkMast/wrkDetl.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/views/wrkMast/wrkMast.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/webapp/views/wrkMastLog/wrkDetlLog.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/OpenOrderPakinParam.java
New file
@@ -0,0 +1,24 @@
package com.zy.asrs.common.domain.param;
import com.zy.asrs.common.domain.dto.DetlDto;
import lombok.Data;
import java.util.List;
/**
 * Created by vincent on 2022/4/8
 */
@Data
public class OpenOrderPakinParam {
    private String orderNo;
    private String orderType;
    private String orderTime;
    private Long hostId;
    private List<DetlDto> orderDetails;
}
zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/OpenOrderPakoutParam.java
New file
@@ -0,0 +1,42 @@
package com.zy.asrs.common.domain.param;
import com.alibaba.fastjson.JSON;
import com.zy.asrs.common.domain.dto.DetlDto;
import com.zy.asrs.framework.common.DateUtils;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by vincent on 2022/4/8
 */
@Data
public class OpenOrderPakoutParam {
    private String orderNo;
    private String orderType;
    private String orderTime;
    private List<DetlDto> orderDetails;
    private String lgort;
    private Long hostId;
    public static void main(String[] args) {
        OpenOrderPakoutParam param = new OpenOrderPakoutParam();
        param.setOrderNo("LXT12321321");
        param.setOrderType("交货单");
        param.setOrderTime(DateUtils.convert(new Date()));
        List<DetlDto> orderDetails = new ArrayList<>();
        param.setOrderDetails(orderDetails);
        DetlDto detlDto = new DetlDto("15099-10000", 3.0);
        orderDetails.add(detlDto);
        System.out.println(JSON.toJSONString(param));
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkDetl.java
@@ -280,6 +280,12 @@
    @ApiModelProperty(value= "授权商户")
    private Long hostId;
    /**
     * 工作档ID
     */
    @ApiModelProperty(value= "工作档ID")
    private Long wrkMastId;
    public WrkDetl() {}
    public WrkDetl(Integer wrkNo,Date ioTime,Double anfme,String zpallet,String matnr,String maktx,String batch,String orderNo,String specs,String model,String color,String brand,String unit,Double price,String sku,Double units,String barcode,String origin,String manu,String manuDate,String itemNum,Double safeQty,Double weight,Double length,Double volume,String threeCode,String supp,String suppCode,Integer beBatch,String deadTime,Integer deadWarn,Integer source,Integer inspect,Integer danger,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String memo,Long hostId) {
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkDetlLog.java
@@ -277,6 +277,12 @@
    @ApiModelProperty(value= "授权商户")
    private Long hostId;
    /**
     * 工作档ID
     */
    @ApiModelProperty(value= "工作档ID")
    private Long wrkMastId;
    public WrkDetlLog() {}
    public WrkDetlLog(Long id,Integer wrkNo,Date ioTime,Double anfme,String zpallet,String matnr,String maktx,String batch,String orderNo,String specs,String model,String color,String brand,String unit,Double price,String sku,Double units,String barcode,String origin,String manu,String manuDate,String itemNum,Double safeQty,Double weight,Double length,Double volume,String threeCode,String supp,String suppCode,Integer beBatch,String deadTime,Integer deadWarn,Integer source,Integer inspect,Integer danger,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String memo,Long hostId) {
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/LocDetlMapper.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -24,4 +25,13 @@
    List<QueryStockPreDo> queryStockPre(@Param("matnr")String matnr);
    LocDetl selectItem(@Param("locNo") String locNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("hostId") Long hostId);
    int deleteItem(@Param("locNo") String locNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("hostId") Long hostId);
    int updateAnfme(@Param("anfme") Double anfme, @Param("locNo") String locNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("hostId") Long hostId);
    @Update("update wms_loc_detl set loc_no = #{newLocNo}, modi_time=getDate() where loc_no = #{oldLocNo} and host_id = #{hostId}")
    int updateLocNo(String newLocNo, String oldLocNo, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderDetlMapper.java
@@ -19,4 +19,8 @@
    IPage<OrderDetl> getPakoutPage(Page<OrderDetl> page ,Map<String, Object> map);
    int increase(@Param("orderId") Long orderId, @Param("hostId") Long hostId, @Param("matnr") String matnr, @Param("batch") String batch, @Param("qty") Double qty);
    int decrease(@Param("orderNo") String orderNo, @Param("hostId") Long hostId, @Param("matnr") String matnr, @Param("batch") String batch, @Param("qty") Double qty);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderMapper.java
@@ -12,4 +12,6 @@
    void updateOrder1(Long orderId,@Param("userId")Long userId);
    int updateSettle(@Param("orderId") Long orderId, @Param("settle") Long settle, @Param("userId") Long userId, @Param("hostId") Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WaitPakinLogMapper.java
@@ -2,6 +2,7 @@
import com.zy.asrs.common.wms.entity.WaitPakinLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@@ -9,4 +10,7 @@
@Repository
public interface WaitPakinLogMapper extends BaseMapper<WaitPakinLog> {
    @Insert("insert into wms_wait_pakin_log select * from wms_wait_pakin where zpallet=#{zpallet} and host_id = #{hostId}")
    int saveToHistory(String zpallet, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlLogMapper.java
@@ -2,6 +2,7 @@
import com.zy.asrs.common.wms.entity.WrkDetlLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@@ -9,4 +10,7 @@
@Repository
public interface WrkDetlLogMapper extends BaseMapper<WrkDetlLog> {
    @Insert("insert into wms_wrk_detl_log select * from wms_wrk_detl where wrk_no=#{workNo} and host_id = #{hostId}")
    int saveToHistory(Integer workNo, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlMapper.java
@@ -3,6 +3,7 @@
import com.zy.asrs.common.wms.entity.WrkDetl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -13,4 +14,8 @@
    List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo);
    int updateOrderNo(@Param("orderNo") String orderNo, @Param("wrkNo") Integer wrkNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("hostId") Long hostId);
    List<WrkDetl> selectAndLogByOrderNo(String orderNo, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkMastLogMapper.java
@@ -2,6 +2,7 @@
import com.zy.asrs.common.wms.entity.WrkMastLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@@ -9,4 +10,7 @@
@Repository
public interface WrkMastLogMapper extends BaseMapper<WrkMastLog> {
    @Insert("insert into wms_wrk_mast_log select * from wms_wrk_mast where id=#{id}")
    int saveToHistory(Long id);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkMastMapper.java
@@ -5,8 +5,14 @@
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface WrkMastMapper extends BaseMapper<WrkMast> {
    List<WrkMast> selectToBeCompleteData();
    List<WrkMast> selectToBeHistoryData();
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/DocTypeService.java
@@ -5,4 +5,6 @@
public interface DocTypeService extends IService<DocType> {
    DocType selectOrAdd(String docName, Boolean pakin);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/LocDetlService.java
@@ -16,4 +16,13 @@
    List<LocDetl> queryStock(String matnr, String batch, String lgort, Set<String> locNos);
    LocDetl selectItem(String locNo, String matnr, String batch, Long hostId);
    /**
     * 修改库存明细数量,如果数量为0,则删除记录
     */
    boolean updateAnfme(Double anfme, String locNo, String matnr, String batch, Long hostId);
    boolean updateLocNo(String newLocNo, String oldLocNo, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OpenService.java
New file
@@ -0,0 +1,21 @@
package com.zy.asrs.common.wms.service;
import com.zy.asrs.common.domain.param.OpenOrderPakinParam;
import com.zy.asrs.common.domain.param.OpenOrderPakoutParam;
import java.util.List;
public interface OpenService {
    /**
     * 添加入库单
     */
    void pakinOrderCreate(OpenOrderPakinParam param);
    /**
     * 添加出库单
     */
    void pakoutOrderCreate(OpenOrderPakoutParam param);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderDetlService.java
@@ -12,4 +12,8 @@
    IPage<OrderDetl> getPakoutPage(Integer curr, Integer limit, Map<String, Object> map);
    boolean increase(Long orderId, Long hostId, String matnr, String batch, Double qty);
    boolean decrease(String orderNo, Long hostId, String matnr, String batch, Double qty);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java
@@ -2,11 +2,21 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.common.wms.entity.Order;
import com.zy.asrs.common.wms.entity.WrkDetl;
import com.zy.asrs.common.wms.entity.WrkMast;
import java.util.List;
public interface OrderService extends IService<Order> {
    void updateOrder1(Long orderId,Long userId);
    Order selectByNo(String orderNo);
    Order selectByNo(String orderNo, Long hostId);
    boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls, Long hostId);
    boolean updateSettle(Long orderId, Long settle, Long userId, Long hostId);
    void checkComplete(String orderNo, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WaitPakinLogService.java
@@ -5,4 +5,6 @@
public interface WaitPakinLogService extends IService<WaitPakinLog> {
    boolean saveToHistory(String zpallet, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WorkService.java
@@ -11,4 +11,20 @@
     */
    String startupFullPutStore(FullStoreParam param, Long userId, Long hostId);
    /**
     * 手动完成工作档
     */
    void completeWrkMast(String workNo, Long userId, Long hostId);
    /**
     * 手动取消工作档
     */
    void cancelWrkMast(String workNo, Long userId, Long hostId);
    /**
     * 手动拣料入库工作档
     */
    void pickWrkMast(String workNo, Long userId, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlLogService.java
@@ -5,4 +5,6 @@
public interface WrkDetlLogService extends IService<WrkDetlLog> {
    boolean saveToHistory(Integer workNo, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlService.java
@@ -9,4 +9,8 @@
    List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo);
    boolean updateOrderNo(String orderNo, Integer wrkNo, String matnr, String batch, Long hostId);
    List<WrkDetl> selectAndLogByOrderNo(String orderNo, Long hostId);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastLogService.java
@@ -5,4 +5,6 @@
public interface WrkMastLogService extends IService<WrkMastLog> {
    boolean saveToHistory(Long id);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastService.java
@@ -3,6 +3,12 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.common.wms.entity.WrkMast;
import java.util.List;
public interface WrkMastService extends IService<WrkMast> {
    List<WrkMast> selectToBeCompleteData();
    List<WrkMast> selectToBeHistoryData();
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/DocTypeServiceImpl.java
@@ -1,12 +1,46 @@
package com.zy.asrs.common.wms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.wms.mapper.DocTypeMapper;
import com.zy.asrs.common.wms.entity.DocType;
import com.zy.asrs.common.wms.service.DocTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.exception.CoolException;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service("docTypeService")
public class DocTypeServiceImpl extends ServiceImpl<DocTypeMapper, DocType> implements DocTypeService {
    @Override
    public DocType selectOrAdd(String docName, Boolean pakin) {
        if (Cools.isEmpty(docName)) {
            return null;
        }
        DocType docType = this.getOne(new LambdaQueryWrapper<DocType>().eq(DocType::getDocName, docName));
        if (docType == null) {
            long docId = 1L;
            DocType last = this.getOne(new LambdaQueryWrapper<DocType>().orderByDesc(DocType::getDocId));
            if (last != null) {
                docId = last.getDocId() + 1;
            }
            docType = new DocType();
            docType.setDocId(docId);
            docType.setDocName(docName);
            if (null != pakin) {
                docType.setPakin(pakin ? 1 : 0);
                docType.setPakout(pakin ? 0 : 1);
            }
            docType.setStatus(1);
            docType.setCreateTime(new Date());
            docType.setUpdateTime(new Date());
            if (!this.save(docType)) {
                throw new CoolException("单据类型错误");
            }
        }
        return docType;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/LocDetlServiceImpl.java
@@ -42,4 +42,23 @@
        }
        return result;
    }
    @Override
    public LocDetl selectItem(String locNo, String matnr, String batch, Long hostId) {
        return this.baseMapper.selectItem(locNo, matnr, batch, hostId);
    }
    @Override
    public boolean updateAnfme(Double anfme, String locNo, String matnr, String batch, Long hostId) {
        if (anfme <= 0) {
            return this.baseMapper.deleteItem(locNo, matnr, batch, hostId) > 0;
        } else {
            return baseMapper.updateAnfme(anfme, locNo, matnr, batch, hostId) > 0;
        }
    }
    @Override
    public boolean updateLocNo(String newLocNo, String oldLocNo, Long hostId) {
        return baseMapper.updateLocNo(newLocNo, oldLocNo, hostId) > 0;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OpenServiceImpl.java
New file
@@ -0,0 +1,220 @@
package com.zy.asrs.common.wms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.domain.dto.DetlDto;
import com.zy.asrs.common.domain.param.OpenOrderPakinParam;
import com.zy.asrs.common.domain.param.OpenOrderPakoutParam;
import com.zy.asrs.common.wms.entity.DocType;
import com.zy.asrs.common.wms.entity.Mat;
import com.zy.asrs.common.wms.entity.Order;
import com.zy.asrs.common.wms.entity.OrderDetl;
import com.zy.asrs.common.wms.service.*;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
import com.zy.asrs.framework.exception.CoolException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by vincent on 2022/4/9
 */
@Slf4j
@Service
public class OpenServiceImpl implements OpenService {
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private MatService matService;
    @Override
    @Transactional
    public void pakinOrderCreate(OpenOrderPakinParam param) {
        Order order = orderService.selectByNo(param.getOrderNo(), param.getHostId());
        if (!Cools.isEmpty(order)) {
            throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交");
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.TRUE);
        Date now = new Date();
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                param.getOrderNo(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                null,    // 联系方式
                null,    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
                null,    // 销售或采购费用合计
                null,    // 实付金额
                null,    // 付款类型
                null,    // 业务员
                null,    // 结算天数
                null,    // 邮费支付类型
                null,    // 邮费
                null,    // 付款时间
                null,    // 发货时间
                null,    // 物流名称
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                9527L,    // 添加人员
                now,    // 添加时间
                9527L,    // 修改人员
                now,    // 修改时间
                null,    // 备注
                param.getHostId()
        );
        if (!orderService.save(order)) {
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
                list.add(dto);
            }
        }
        for (DetlDto detlDto : list) {
            Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detlDto.getMatnr()).eq(Mat::getHostId, param.getHostId()));
            if (Cools.isEmpty(mat)) {
                throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            orderDetl.setBatch(detlDto.getBatch());
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            if (!orderDetlService.save(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
    }
    @Override
    @Transactional
    public void pakoutOrderCreate(OpenOrderPakoutParam param) {
        Order order = orderService.selectByNo(param.getOrderNo(), param.getHostId());
        // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据
        if (!Cools.isEmpty(order)) {
            if (order.getSettle() > 1L) {
                throw new CoolException(param.getOrderNo() + "正在出库,无法修改单据");
            }
            orderService.removeById(order.getId());
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE);
        Date now = new Date();
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                param.getOrderNo(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                null,    // 联系方式
                null,    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
                null,    // 销售或采购费用合计
                null,    // 实付金额
                null,    // 付款类型
                null,    // 业务员
                null,    // 结算天数
                null,    // 邮费支付类型
                null,    // 邮费
                null,    // 付款时间
                null,    // 发货时间
                null,    // 物流名称
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                9527L,    // 添加人员
                now,    // 添加时间
                9527L,    // 修改人员
                now,    // 修改时间
                null,    // 备注
                param.getHostId()
        );
        if (!orderService.save(order)) {
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
                list.add(dto);
            }
        }
        for (DetlDto detlDto : list) {
            Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detlDto.getMatnr()).eq(Mat::getHostId, param.getHostId()));
            if (Cools.isEmpty(mat)) {
                throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            orderDetl.setBatch(detlDto.getBatch());
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            if (!orderDetlService.save(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderDetlServiceImpl.java
@@ -24,4 +24,19 @@
        return this.baseMapper.getPakoutPage(page, map);
    }
    @Override
    public boolean increase(Long orderId, Long hostId, String matnr, String batch, Double qty) {
        return this.baseMapper.increase(orderId, hostId, matnr, batch, qty) > 0;
    }
    @Override
    public boolean decrease(String orderNo, Long hostId, String matnr, String batch, Double qty) {
        int decrease = this.baseMapper.decrease(orderNo, hostId, matnr, batch, qty);
        if (decrease == 0) {
            return this.baseMapper.decrease(orderNo, hostId, matnr, null, qty) > 0;
        } else {
            return true;
        }
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java
@@ -1,17 +1,39 @@
package com.zy.asrs.common.wms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.domain.dto.DetlDto;
import com.zy.asrs.common.domain.param.OpenOrderPakinParam;
import com.zy.asrs.common.domain.param.OpenOrderPakoutParam;
import com.zy.asrs.common.wms.entity.*;
import com.zy.asrs.common.wms.mapper.OrderDetlMapper;
import com.zy.asrs.common.wms.mapper.OrderMapper;
import com.zy.asrs.common.wms.entity.Order;
import com.zy.asrs.common.wms.service.OrderService;
import com.zy.asrs.common.wms.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
import com.zy.asrs.framework.exception.CoolException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service("orderService")
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private OpenService openService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private OrderDetlMapper orderDetlMapper;
    @Autowired
    private DocTypeService docTypeService;
    @Override
    public void updateOrder1(Long orderId,Long userId) {
@@ -19,12 +41,114 @@
    }
    @Override
    public Order selectByNo(String orderNo) {
        List<Order> orderList = this.list(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo));
    public Order selectByNo(String orderNo, Long hostId) {
        List<Order> orderList = this.list(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo).eq(Order::getHostId, hostId));
        if (Cools.isEmpty(orderList)) {
            return null;
        }
        return orderList.get(0);
    }
    @Override
    public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls, Long hostId) {
        try {
            List<DetlDto> detlDtos = new ArrayList<>();
            wrkDetls.forEach(wrkDetl -> {
                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
            });
            String orderNo = "HAND" + snowflakeIdWorker.nextId();
            if (pakin) {
                // 生成入库单据
                OpenOrderPakinParam openParam = new OpenOrderPakinParam();
                openParam.setOrderNo(orderNo);
                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                openParam.setOrderType("手动入库单");
                openParam.setOrderDetails(detlDtos);
                openParam.setHostId(hostId);
                openService.pakinOrderCreate(openParam);
            } else {
                // 生成出库单据
                OpenOrderPakoutParam openParam = new OpenOrderPakoutParam();
                openParam.setOrderNo(orderNo);
                openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
                openParam.setOrderType("手动出库单");
                openParam.setOrderDetails(detlDtos);
                openParam.setHostId(hostId);
                openService.pakoutOrderCreate(openParam);
            }
            Order order = this.selectByNo(orderNo, hostId);
            if (null == order) {
                throw new CoolException("生成单据失败");
            }
            if (!this.updateSettle(order.getId(), 4L, null, hostId)) {
                throw new CoolException("修改单据状态失败");
            }
            for (DetlDto detlDto : detlDtos) {
                // 修改订单明细数量
                if (!orderDetlService.increase(order.getId(), hostId, detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme())) {
                    throw new CoolException("修改单据明细数量失败");
                }
            }
            // 工作档明细更新单据编号
            for (WrkDetl wrkDetl : wrkDetls) {
                wrkDetlService.updateOrderNo(orderNo, wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId);
            }
        } catch (Exception e) {
            log.error("", e);
            return false;
        }
        return true;
    }
    @Override
    public boolean updateSettle(Long orderId, Long settle, Long userId, Long hostId) {
        return this.baseMapper.updateSettle(orderId, settle, userId, hostId) > 0;
    }
    @Override
    public void checkComplete(String orderNo, Long hostId) {
        Order order = this.selectByNo(orderNo, hostId);
        if (order.getSettle() >= 4L) {
            return;
        }
        List<OrderDetl> orderDetls = orderDetlMapper.selectList(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId()).eq(OrderDetl::getHostId, hostId));
        boolean complete = true;
        for (OrderDetl orderDetl : orderDetls) {
            if (orderDetl.getAnfme() > orderDetl.getQty()) {
                complete = false;
                break;
            }
        }
        if (complete && wrkDetlService.count(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getOrderNo, orderNo).eq(WrkDetl::getHostId, hostId)) == 0) {
            // 出库订单重新整理明细
            DocType docType = docTypeService.getById(order.getDocType());
            if (null != docType && docType.getPakout() == 1) {
                if (!orderDetlService.remove(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId()).eq(OrderDetl::getHostId, hostId))) {
                    throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败");
                }
                List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo, hostId);
                for (WrkDetl wrkDetl : wrkDetls) {
                    OrderDetl orderDetl = new OrderDetl();
                    orderDetl.sync(wrkDetl);
                    orderDetl.setQty(orderDetl.getAnfme());
                    orderDetl.setOrderId(order.getId());
                    orderDetl.setOrderNo(orderNo);
                    orderDetl.setStatus(1);
                    orderDetl.setCreateTime(order.getCreateTime());
                    orderDetl.setCreateBy(order.getCreateBy());
                    orderDetl.setUpdateTime(order.getUpdateTime());
                    orderDetl.setUpdateBy(order.getUpdateBy());
                    if (!orderDetlService.save(orderDetl)) {
                        throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败");
                    }
                }
            }
            if (!this.updateSettle(order.getId(), 4L, null, hostId)) {
                throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
            }
        }
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WaitPakinLogServiceImpl.java
@@ -9,4 +9,8 @@
@Service("waitPakinLogService")
public class WaitPakinLogServiceImpl extends ServiceImpl<WaitPakinLogMapper, WaitPakinLog> implements WaitPakinLogService {
    @Override
    public boolean saveToHistory(String zpallet, Long hostId) {
        return this.baseMapper.saveToHistory(zpallet, hostId) > 0;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WorkServiceImpl.java
@@ -4,7 +4,9 @@
import com.zy.asrs.common.domain.dto.DetlDto;
import com.zy.asrs.common.domain.dto.LocTypeDto;
import com.zy.asrs.common.domain.dto.StartupDto;
import com.zy.asrs.common.domain.entity.StaDesc;
import com.zy.asrs.common.domain.param.FullStoreParam;
import com.zy.asrs.common.sys.service.StaDescService;
import com.zy.asrs.common.wms.entity.*;
import com.zy.asrs.common.wms.service.*;
import com.zy.asrs.framework.common.BaseRes;
@@ -18,6 +20,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * Created by vincent on 2020/6/11
@@ -38,6 +41,14 @@
    private LocMastService locMastService;
    @Autowired
    private MatService matService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private WrkMastLogService wrkMastLogService;
    @Autowired
    private WrkDetlLogService wrkDetlLogService;
    @Autowired
    private StaDescService staDescService;
    @Override
    @Transactional
@@ -104,6 +115,7 @@
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setWrkMastId(wrkMast.getId());
            if (!wrkDetlService.save(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
@@ -124,4 +136,184 @@
        return dto.getLocNo();
    }
    @Override
    @Transactional
    public void completeWrkMast(String workNo, Long userId, Long hostId) {
        WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, workNo).eq(WrkMast::getHostId, hostId));
        if (Cools.isEmpty(wrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
        if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
            throw new CoolException("当前工作档已完成");
        }
        // 入库 + 库位转移
        if (wrkMast.getWrkSts() < 99 || (wrkMast.getWrkSts() > 100 && wrkMast.getIoType()==11)) {
            wrkMast.setWrkSts(99L);//99.入库完成
            // 出库
        } else if (wrkMast.getWrkSts() > 100) {
            wrkMast.setWrkSts(199L);//199.出库完成
        }
        Date now = new Date();
        wrkMast.setModiTime(now);
        wrkMast.setModiUser(String.valueOf(userId));
        // 完成操作人员记录
        wrkMast.setManuType("手动完成");
        if (!wrkMastService.updateById(wrkMast)) {
            throw new CoolException("修改工作档失败");
        }
    }
    @Override
    @Transactional
    public void cancelWrkMast(String workNo, Long userId, Long hostId) {
        WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, workNo).eq(WrkMast::getHostId, hostId));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
        String locNo = ""; // 待修改目标库位
        String locSts = ""; // 待修改目标库位状态
        // 入库取消(修改目标库位)
        if (wrkMast.getWrkSts() < 99) {
            locNo = wrkMast.getLocNo();
            locSts = "O";
            // 库位转移
            if (wrkMast.getIoType() == 11) {
                // 库位转移:源库位
                LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getSourceLocNo()).eq(LocMast::getHostId, hostId));
                if (Cools.isEmpty(locMast)) {
                    throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo());
                }
                locMast.setLocSts("F");
                locMast.setModiTime(new Date());
                locMast.setModiUser(userId);
                locMastService.updateById(locMast);
            }
            // 出库取消(修改源库位)
        } else if (wrkMast.getWrkSts() > 100 && wrkMast.getWrkSts() != 199) {
            locNo = wrkMast.getSourceLocNo();
            // 出库 ===>> F.在库
            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
                locSts = "F";
                // 空板出库 ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 110) {
                locSts = "D";
                // 库位转移 ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 11) {
                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F";
                // 库位转移:目标库位
                LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getLocNo()).eq(LocMast::getHostId, hostId));
                if (Cools.isEmpty(locMast)) {
                    throw new CoolException("取消库位转移失败,目标库位不存在:" + wrkMast.getSourceLocNo());
                }
                locMast.setLocSts("O");
                locMast.setModiTime(new Date());
                locMast.setModiUser(userId);
                locMastService.updateById(locMast);
            }
        } else {
            throw new CoolException("当前工作状态无法取消");
        }
        // 订单关联
        List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
        for (WrkDetl wrkDetl : wrkDetls) {
            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), hostId, wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
                    throw new CoolException("订单数据回滚失败");
                }
            }
        }
        // 取消操作人员记录
        wrkMast.setManuType("手动取消");
        wrkMast.setModiUser(String.valueOf(userId));
        wrkMast.setModiTime(new Date());
        if (!wrkMastService.updateById(wrkMast)) {
            throw new CoolException("取消工作档失败");
        }
        // 保存工作主档历史档
        if (!wrkMastLogService.saveToHistory(wrkMast.getId())) {
            throw new CoolException("保存工作历史档失败, workNo = " + wrkMast.getWrkNo());
        }
        // 删除工作主档
        boolean wrkMastRes = wrkMastService.removeById(wrkMast);
        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
            // 保存工作明细档历史档
            if (!wrkDetlLogService.saveToHistory(wrkMast.getWrkNo(), hostId)) {
                throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo());
            }
            // 删除工作档明细
            boolean wrkDetlRes = wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, workNo).eq(WrkDetl::getHostId, hostId));
        }
        // 修改库位状态
        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, locNo).eq(LocMast::getHostId, hostId));
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("取消工作档失败,库位不存在:" + locNo);
        }
        locMast.setLocSts(locSts);
        locMast.setModiTime(new Date());
        locMast.setModiUser(userId);
        boolean locMastRes = locMastService.updateById(locMast);
        if (!wrkMastRes || !locMastRes) {
            throw new CoolException("保存数据失败");
        }
    }
    @Override
    @Transactional
    public void pickWrkMast(String workNo, Long userId, Long hostId) {
        WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, workNo).eq(WrkMast::getHostId, hostId));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
        // 入出库类型判断
        if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
            throw new CoolException("当前入出库类型无法进行操作");
        }
        // 工作状态判断
        if (wrkMast.getWrkSts() < 101 || wrkMast.getWrkSts() == 200) {
            throw new CoolException("当前工作状态无法进行操作");
        }
        // 保存工作明细档历史档
//        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
//            throw new CoolException("保存工作明细档历史档失败");
//        }
        // 保存工作主档历史档
        if (!wrkMastLogService.saveToHistory(wrkMast.getId())) {
            throw new CoolException("保存工作主档历史档失败");
        }
        // 获取目标站
        LambdaQueryWrapper<StaDesc> wrapper = new LambdaQueryWrapper<StaDesc>()
                .eq(StaDesc::getTypeNo, wrkMast.getIoType() - 50)
                .eq(StaDesc::getStnNo, wrkMast.getStaNo()); // 作业站点 = 拣料出库的目标站
        StaDesc staDesc = staDescService.getOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
            throw new CoolException("入库路径不存在");
        }
        // 堆垛机站点(目标站)
        Integer staNo = staDesc.getDeviceStn();
        Date now = new Date();
        // 更新工作档数据状态
        wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
        wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走
        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站
        wrkMast.setStaNo(staNo); // 目标站
        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位
        wrkMast.setSourceLocNo(""); // 源库位清空
        wrkMast.setModiTime(now);
        wrkMast.setModiUser(String.valueOf(userId));
        if (!wrkMastService.updateById(wrkMast)) {
            throw new CoolException("更新工作档数据状态失败");
        }
        // 修改库位状态 Q.拣料/盘点/并板再入库
        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getLocNo()).eq(LocMast::getHostId, hostId));
        locMast.setLocSts("Q");
        locMast.setModiTime(now);
        locMast.setModiUser(userId);
        if (!locMastService.updateById(locMast)) {
            throw new CoolException("修改库位状态失败");
        }
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlLogServiceImpl.java
@@ -9,4 +9,8 @@
@Service("wrkDetlLogService")
public class WrkDetlLogServiceImpl extends ServiceImpl<WrkDetlLogMapper, WrkDetlLog> implements WrkDetlLogService {
    @Override
    public boolean saveToHistory(Integer workNo, Long hostId) {
        return this.baseMapper.saveToHistory(workNo, hostId) > 0;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlServiceImpl.java
@@ -16,4 +16,13 @@
        return this.baseMapper.selectAndLogByOrderNoGroupByMatnrOfSum(orderNo);
    }
    @Override
    public boolean updateOrderNo(String orderNo, Integer wrkNo, String matnr, String batch, Long hostId) {
        return baseMapper.updateOrderNo(orderNo, wrkNo, matnr, batch, hostId) > 0;
    }
    @Override
    public List<WrkDetl> selectAndLogByOrderNo(String orderNo, Long hostId) {
        return this.baseMapper.selectAndLogByOrderNo(orderNo, hostId);
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastLogServiceImpl.java
@@ -9,4 +9,9 @@
@Service("wrkMastLogService")
public class WrkMastLogServiceImpl extends ServiceImpl<WrkMastLogMapper, WrkMastLog> implements WrkMastLogService {
    @Override
    public boolean saveToHistory(Long id) {
        return this.baseMapper.saveToHistory(id) > 0;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastServiceImpl.java
@@ -6,7 +6,19 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("wrkMastService")
public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
    @Override
    public List<WrkMast> selectToBeCompleteData() {
        return this.baseMapper.selectToBeCompleteData();
    }
    @Override
    public List<WrkMast> selectToBeHistoryData() {
        return this.baseMapper.selectToBeHistoryData();
    }
}
zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml
@@ -2,6 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.common.wms.mapper.LocDetlMapper">
    <sql id="batchSeq">
        <choose>
            <when test="batch != null and batch != ''">
                and batch = #{batch}
            </when>
            <otherwise>
                and (batch IS NULL OR batch = '')
            </otherwise>
        </choose>
    </sql>
    <sql id="stockOutCondition">
        <if test="map.loc_no!=null and map.loc_no!='' ">
            and a.loc_no like '%' + #{map.loc_no} + '%'
@@ -121,4 +132,34 @@
        order by no, count desc
    </select>
    <select id="selectItem" resultType="com.zy.asrs.common.wms.entity.LocDetl">
        select top 1 *
        from wms_loc_detl
        where 1=1
        and loc_no = #{locNo}
        and matnr = #{matnr}
        and host_id = #{hostId}
        <include refid="batchSeq"></include>
    </select>
    <delete id="deleteItem">
        delete from wms_loc_detl
        where 1=1
        and loc_no = #{locNo}
        and matnr = #{matnr}
        and host_id = #{hostId}
        <include refid="batchSeq"></include>
    </delete>
    <update id="updateAnfme">
        update wms_loc_detl
        set anfme = #{anfme}
        , modi_time = getdate()
        where 1=1
        and loc_no = #{locNo}
        and matnr = #{matnr}
        and host_id = #{hostId}
        <include refid="batchSeq"></include>
    </update>
</mapper>
zy-asrs-common/src/main/resources/mapper/wms/OrderDetlMapper.xml
@@ -45,4 +45,38 @@
        <include refid="pakOutPageCondition"></include>
    </select>
    <update id="increase">
        update wms_order_detl
        set qty = qty + #{qty}
        where 1=1
        and order_id = #{orderId}
        and matnr = #{matnr}
        and host_id = #{hostId}
        <choose>
            <when test="batch != null and batch != ''">
                and batch = #{batch}
            </when>
            <otherwise>
                and (batch IS NULL OR batch = '')
            </otherwise>
        </choose>
    </update>
    <update id="decrease">
        update wms_order_detl
        set qty = qty - #{qty}
        where 1=1
        and order_no = #{orderNo}
        and matnr = #{matnr}
        and host_id = #{hostId}
        <choose>
            <when test="batch != null and batch != ''">
                and batch = #{batch}
            </when>
            <otherwise>
                and (batch IS NULL OR batch = '')
            </otherwise>
        </choose>
    </update>
</mapper>
zy-asrs-common/src/main/resources/mapper/wms/OrderMapper.xml
@@ -14,4 +14,17 @@
        and id = #{orderId}
    </update>
    <update id="updateSettle">
        update wms_order
        set settle = #{settle}
        ,update_time = getdate()
        <if test="userId != null">
            ,update_by = #{userId}
        </if>
        where 1=1
        and id = #{orderId}
        and host_id = #{hostId}
    </update>
</mapper>
zy-asrs-common/src/main/resources/mapper/wms/WrkDetlMapper.xml
@@ -2,6 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.common.wms.mapper.WrkDetlMapper">
    <sql id="batchSeq">
        <choose>
            <when test="batch != null and batch != ''">
                and batch = #{batch}
            </when>
            <otherwise>
                and (batch IS NULL OR batch = '')
            </otherwise>
        </choose>
    </sql>
    <select id="selectAndLogByOrderNoGroupByMatnrOfSum" resultType="com.zy.asrs.common.wms.entity.WrkDetl">
        select awd.wrk_no, awd.io_time, awd.matnr, sum(awd.anfme) as anfme
        from wms_wrk_detl awd
@@ -17,4 +28,30 @@
        group by awdl.wrk_no, awdl.io_time, awdl.matnr
    </select>
    <update id="updateOrderNo">
        update wms_wrk_detl
        set order_no = #{orderNo}
        , modi_time = getdate()
        where 1=1
        and wrk_no = #{wrkNo}
        and matnr = #{matnr}
        and host_id = #{hostId}
        <include refid="batchSeq"></include>
    </update>
    <select id="selectAndLogByOrderNo" resultType="com.zy.asrs.common.wms.entity.WrkDetl">
        select awd.*
        from wms_wrk_detl awd
                 left join wms_wrk_mast awm on awd.wrk_no = awm.wrk_no and awd.io_time = awm.io_time
        where order_no = #{orderNo}
        and host_id = #{hostId}
        union
        select distinct awdl.*
        from wms_wrk_detl_log awdl
                 left join wms_wrk_mast_log awml on awdl.wrk_no = awml.wrk_no and awdl.io_time = awml.io_time
        where awdl.order_no = #{orderNo}
          and host_id = #{hostId}
          and (awml.manu_type is null or awml.manu_type != '手动取消')
    </select>
</mapper>
zy-asrs-common/src/main/resources/mapper/wms/WrkMastMapper.xml
@@ -2,4 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.common.wms.mapper.WrkMastMapper">
    <select id="selectToBeCompleteData" resultType="com.zy.asrs.common.wms.entity.WrkMast">
        select * from wms_wrk_mast where ((wrk_sts = 99 Or wrk_sts = 199 ) and io_type != 103 and io_type != 104 and io_type != 107 ) order by io_time,wrk_no
    </select>
    <select id="selectToBeHistoryData" resultType="com.zy.asrs.common.wms.entity.WrkMast">
        select * from wms_wrk_mast
        where wrk_sts=100
        or (wrk_sts=200 and ove_mk='Y' and wrk_no not in (select wrk_no from common_bas_devp where common_bas_devp.host_id = wms_wrk_mast.host_id))
        or (wrk_sts=200 and dateadd(mi,15,io_time) &lt;= getdate() and wrk_no not in (select wrk_no from common_bas_devp where common_bas_devp.host_id = wms_wrk_mast.host_id))
        or (wrk_sts=200 and io_time is null and wrk_no not in (select wrk_no from common_bas_devp where common_bas_devp.host_id = wms_wrk_mast.host_id))
        order by io_time,wrk_no asc
    </select>
</mapper>
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderController.java
@@ -241,7 +241,7 @@
    @ManagerAuth(memo = "手动添加订单")
    @Transactional
    public R formAdd(@RequestBody OrderDomainParam param){
        Order order = orderService.selectByNo(param.getOrderNo());
        Order order = orderService.selectByNo(param.getOrderNo(), getHostId());
        if (order != null) {
            return R.error("单据编号已存在");
        }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WorkController.java
@@ -10,6 +10,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
@@ -77,4 +78,21 @@
        return R.ok("入库启动成功").add(workService.startupFullPutStore(fullStoreParam, getUserId(), getHostId()));
    }
    @RequestMapping("/hand/control/wrkMast")
    @ManagerAuth(memo = "手动处理工作档")
    public R handControlWrkMast(@RequestParam String workNo,
                                @RequestParam Integer type){
        if (type == 1) {
            workService.completeWrkMast(workNo, getUserId(), getHostId());
            return R.ok("工作档已完成");
        } else if (type == 2) {
            workService.cancelWrkMast(workNo, getUserId(), getHostId());
            return R.ok("工作档已取消");
        } else if (type == 3) {
            workService.pickWrkMast(workNo, getUserId(), getHostId());
            return R.ok("工作档已拣料");
        }
        return R.ok();
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WrkDetlController.java
@@ -46,6 +46,9 @@
            wrapper.ge(WrkDetl::getAppeTime, DateUtils.convert(range[0]));
            wrapper.le(WrkDetl::getAppeTime, DateUtils.convert(range[1]));
        }
        if (!Cools.isEmpty(param.get("wrk_mast_id"))) {
            wrapper.eq(WrkDetl::getWrkMastId, param.get("wrk_mast_id"));
        }
        return R.ok(wrkDetlService.page(new Page<>(curr, limit), wrapper));
    }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WrkDetlLogController.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.common.wms.entity.WrkDetl;
import com.zy.asrs.common.wms.entity.WrkDetlLog;
import com.zy.asrs.common.wms.service.WrkDetlLogService;
import com.zy.asrs.framework.annotations.ManagerAuth;
@@ -46,6 +47,9 @@
            wrapper.ge(WrkDetlLog::getAppeTime, DateUtils.convert(range[0]));
            wrapper.le(WrkDetlLog::getAppeTime, DateUtils.convert(range[1]));
        }
        if (!Cools.isEmpty(param.get("wrk_mast_id"))) {
            wrapper.eq(WrkDetlLog::getWrkMastId, param.get("wrk_mast_id"));
        }
        return R.ok(wrkDetlLogService.page(new Page<>(curr, limit), wrapper));
    }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WrkMastController.java
@@ -43,8 +43,14 @@
        }
        if (!Cools.isEmpty(timeRange)) {
            String[] range = timeRange.split(RANGE_TIME_LINK);
            wrapper.ge(WrkMast::getAppeTime, DateUtils.convert(range[0]));
            wrapper.le(WrkMast::getAppeTime, DateUtils.convert(range[1]));
            wrapper.ge(WrkMast::getIoTime, DateUtils.convert(range[0]));
            wrapper.le(WrkMast::getIoTime, DateUtils.convert(range[1]));
        }
        if (!Cools.isEmpty(param.get("wrk_no"))) {
            wrapper.eq(WrkMast::getWrkNo, param.get("wrk_no"));
        }
        if (!Cools.isEmpty(param.get("wrk_sts"))) {
            wrapper.eq(WrkMast::getWrkSts, param.get("wrk_sts"));
        }
        return R.ok(wrkMastService.page(new Page<>(curr, limit), wrapper));
    }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/AbstractHandler.java
New file
@@ -0,0 +1,30 @@
package com.zy.asrs.wms.task;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
/**
 * Created by vincent on 2020/7/4
 */
@Slf4j
public abstract class AbstractHandler<T> {
    public final ReturnT<T> SUCCESS = new ReturnT<>(200, null);
    public final ReturnT<T> FAIL = new ReturnT<>(500, null);
//    protected abstract ReturnT<T> start();
    protected void exceptionHandle(String errorMsg){
        log.error(errorMsg);
        exceptionHandle(errorMsg, (Object) null);
    }
    protected void exceptionHandle(String errorMsg, Object... args){
        log.error(errorMsg);
        throw new CoolException(MessageFormat.format(errorMsg, args));
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/WorkLogScheduler.java
New file
@@ -0,0 +1,40 @@
package com.zy.asrs.wms.task;
import com.zy.asrs.common.wms.entity.WrkMast;
import com.zy.asrs.common.wms.service.WrkMastService;
import com.zy.asrs.wms.task.core.ReturnT;
import com.zy.asrs.wms.task.handler.WorkLogHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by vincent on 2020/7/7
 */
@Slf4j
@Component
public class WorkLogScheduler {
    @Autowired
    private WorkLogHandler workLogHandler;
    @Autowired
    private WrkMastService wrkMastService;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectToBeHistoryData();
        if (wrkMasts.isEmpty()) {
            return;
        }
        for (WrkMast wrkMast : wrkMasts) {
            ReturnT<String> result = workLogHandler.start(wrkMast);
            if (!result.isSuccess()) {
                log.error("工作档[workNo={}]历史档处理失败", wrkMast.getWrkNo());
            }
        }
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/WorkMastScheduler.java
New file
@@ -0,0 +1,51 @@
package com.zy.asrs.wms.task;
import com.zy.asrs.common.wms.entity.WrkMast;
import com.zy.asrs.common.wms.service.WrkMastService;
import com.zy.asrs.wms.task.core.ReturnT;
import com.zy.asrs.wms.task.handler.WorkMastHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
 * Created by vincent on 2020/7/7
 */
@Component
public class WorkMastScheduler {
    private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class);
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WorkMastHandler workMastHandler;
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute(){
        List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
        if (wrkMasts.isEmpty()) {
            return;
        }
        for (WrkMast wrkMast : wrkMasts) {
            ReturnT<String> returnT = workMastHandler.start(wrkMast);
            if (!returnT.isSuccess()) {
//                wrkMast.setUpdMk("X");
                if (returnT.getMsg().length() > 255) {
                    returnT.setMsg(returnT.getMsg().substring(0, 150));
                }
                wrkMast.setErrorMemo(returnT.getMsg());
                wrkMast.setErrorTime(new Date());
                if (!wrkMastService.updateById(wrkMast)) {
                    log.error("工作档[workNo={}]标记待处理失败", wrkMast.getWrkNo());
                }
            }
        }
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/core/ReturnT.java
New file
@@ -0,0 +1,65 @@
package com.zy.asrs.wms.task.core;
import java.io.Serializable;
/**
 * Created by vincent on 2020/7/7
 */
public class ReturnT<T> implements Serializable {
    public static final long serialVersionUID = 42L;
    public static final int SUCCESS_CODE = 200;
    public static final int FAIL_CODE = 500;
    private int code;
    private String msg;
    private T content;
    public ReturnT() {
    }
    public ReturnT(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public ReturnT(T content) {
        this.code = 200;
        this.content = content;
    }
    public boolean isSuccess(){
        return this.code == 200;
    }
    public int getCode() {
        return this.code;
    }
    public ReturnT<T> setCode(int code) {
        this.code = code;
        return this;
    }
    public String getMsg() {
        return this.msg;
    }
    public ReturnT<T> setMsg(String msg) {
        this.msg = msg;
        return this;
    }
    public T getContent() {
        return this.content;
    }
    public ReturnT<T> setContent(T content) {
        this.content = content;
        return this;
    }
    public String toString() {
        return "ReturnT [code=" + this.code + ", msg=" + this.msg + ", content=" + this.content + "]";
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/WorkLogHandler.java
New file
@@ -0,0 +1,131 @@
package com.zy.asrs.wms.task.handler;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.wms.entity.WaitPakin;
import com.zy.asrs.common.wms.entity.WrkDetl;
import com.zy.asrs.common.wms.entity.WrkMast;
import com.zy.asrs.common.wms.service.*;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.wms.task.AbstractHandler;
import com.zy.asrs.wms.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * Created by vincent on 2020/7/6
 */
@Slf4j
@Service
public class WorkLogHandler extends AbstractHandler<String> {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkMastLogService wrkMastLogService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private WrkDetlLogService wrkDetlLogService;
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private WaitPakinLogService waitPakinLogService;
    @Autowired
    private OrderService orderService;
    // update asr_wrk_mast set inv_wh = 'Y', ove_mk = 'Y' where wrk_no =
    @Transactional
    public ReturnT<String> start(WrkMast wrkMast) {
        Long hostId = wrkMast.getHostId();
        try {
            List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
            // 区分订单任务
            List<WrkDetl> wrkDetlsKeyOrder = new ArrayList<>();
            if (!Cools.isEmpty(wrkDetls)) {
                Iterator<WrkDetl> iterator = wrkDetls.iterator();
                while (iterator.hasNext()) {
                    WrkDetl wrkDetl = iterator.next();
                    if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
                        wrkDetlsKeyOrder.add(wrkDetl);
                        iterator.remove();
                    }
                }
            }
            // 入库 --------------------------------------------------------------------------------
            if (wrkMast.getWrkSts() == 100) {
                // 全板入库
                if (wrkMast.getIoType() == 1) {
                    // 入库通知单
                    if (!Cools.isEmpty(wrkMast.getBarcode())) {
                        // 保存入库通知档历史档
                        if (!waitPakinLogService.saveToHistory(wrkMast.getBarcode(), hostId)) {
                            exceptionHandle("保存入库通知档历史档[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                        // 删除入库通知档
                        if (!waitPakinService.remove(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getZpallet, wrkMast.getBarcode()).eq(WaitPakin::getHostId, hostId))) {
                            exceptionHandle("删除入库通知档[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                    }
//                    // 手动入库生成单据 【 上报三方平台 】
//                    if (!Cools.isEmpty(wrkDetls)) {
//                        if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls, hostId)) {
//                            exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo());
//                        }
//                    }
                    // 拣料再入库
                } else if (wrkMast.getIoType() == 53) {
                    if (!Cools.isEmpty(wrkDetls)) {
                        if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls, hostId)) {
                            exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
                        }
                    }
                }
                // 出库 --------------------------------------------------------------------------------
            } else if (wrkMast.getWrkSts() == 200) {
                if (!Cools.isEmpty(wrkDetls)) {
                    if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls, hostId)) {
                        exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
                    }
                }
            }
            // 保存工作主档历史档
            if (!wrkMastLogService.saveToHistory(wrkMast.getId())) {
                exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo());
            }
            // 删除工作主档
            if (!wrkMastService.removeById(wrkMast)) {
                exceptionHandle("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo());
            }
            // 保存工作明细档历史档
            if (!wrkDetlLogService.saveToHistory(wrkMast.getWrkNo(), hostId)) {
//                exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo());
            }
            // 删除工作明细档
            if (!wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId))) {
//                exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo());
            }
            // 修改订单状态 作业中 ===>> 已完成
            for (WrkDetl wrkDetl : wrkDetlsKeyOrder) {
                orderService.checkComplete(wrkDetl.getOrderNo(), hostId);
            }
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/task/handler/WorkMastHandler.java
New file
@@ -0,0 +1,342 @@
package com.zy.asrs.wms.task.handler;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.wms.entity.LocDetl;
import com.zy.asrs.common.wms.entity.LocMast;
import com.zy.asrs.common.wms.entity.WrkDetl;
import com.zy.asrs.common.wms.entity.WrkMast;
import com.zy.asrs.common.wms.service.*;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.wms.task.AbstractHandler;
import com.zy.asrs.wms.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.Date;
import java.util.List;
/**
 * Created by vincent on 2020/7/4
 */
@Slf4j
@Service
@Transactional
public class WorkMastHandler extends AbstractHandler<String> {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private WaitPakinService waitPakinService;
    public ReturnT<String> start(WrkMast wrkMast) {
        // 99.入库完成
        if (wrkMast.getWrkSts() == 99) {
            return doIn(wrkMast);
        // 199.出库完成
        } else  if (wrkMast.getWrkSts() == 199) {
            return doOut(wrkMast);
        }
        return SUCCESS;
    }
    private ReturnT<String> doIn(WrkMast wrkMast){
        Date now = new Date();
        Long hostId = wrkMast.getHostId();
        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getLocNo()).eq(LocMast::getHostId, hostId));
        try {
            if (null == locMast) {
                exceptionHandle("工作档[workNo={0}]库位号错误[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
            }
            assert locMast != null;
            switch (wrkMast.getIoType()) {
                // 空板入库
                case 10:
                    // 修改库位状态=D
                    if (locMast.getLocSts().equals("S") || locMast.getLocSts().equals("Q")) {
                        if (!Cools.isEmpty(wrkMast.getBarcode())) {
                            locMast.setBarcode(wrkMast.getBarcode());
                        }
                        locMast.setLocSts("D");
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("空板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        }
                    }
                    break;
                // 全板入库
                case 1:
                    // 清除所属库位之前的库存明细
                    List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, wrkMast.getLocNo()).eq(LocDetl::getHostId, hostId));
                    if (!locDetls.isEmpty()) {
                        locDetlService.remove(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, wrkMast.getLocNo()).eq(LocDetl::getHostId, hostId));
                    }
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
                    if (wrkDetls.isEmpty()) {
                        exceptionHandle("全板入库 ===>> 工作明细档不存在;[workNo={0}]", wrkMast.getWrkNo());
                    }
                    // 遍历工作明细,更新库存明细和入库通知档
                    for (WrkDetl wrkDetl : wrkDetls) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId);
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId)) {
                                exceptionHandle("全板入库 ===>> 更新库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            }
                        } else {
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            if (!locDetlService.save(locDetl)) {
                                exceptionHandle("全板入库 ===>> 添加库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            }
                        }
                        // 更新入库通知档 ioStatus ===>> Y
                        try {
//                            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
//                                    .eq("zpallet", wrkDetl.getZpallet())
//                                    .eq("matnr", wrkDetl.getMatnr())
//                                    .eq("anfme", wrkDetl.getAnfme());
//                            if (Cools.isEmpty(wrkDetl.getBatch())) {
//                                wrapper.eq("batch", wrkDetl.getBatch());
//                            } else {
//                                wrapper.isNull("batch").or().eq("batch", "");
//                            }
//                            WaitPakin setParam = new WaitPakin();
//                            setParam.setIoStatus("Y");
//                            setParam.setModiTime(now);
//                            waitPakinService.update(setParam, wrapper);
                        } catch (Exception ignore){}
                    }
                    // 修改库位状态 S ====>> F
                    if (locMast.getLocSts().equals("S")) {
                        locMast.setLocSts("F");
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("全板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        }
                    }
                    break;
                // 拣料入库
                case 53:
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls53 = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
                    if (wrkDetls53.isEmpty()) {
                        exceptionHandle("拣料入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                    }
                    for (WrkDetl wrkDetl : wrkDetls53) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId);
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId)) {
                                exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            }
                        }
                    }
                    // 修改库位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
                        locMast.setLocSts("F");
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("拣料入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        }
                    }
                    break;
                // 并板入库
                case 54:
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls54 = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
                    if (wrkDetls54.isEmpty()) {
                        exceptionHandle("并板入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                    }
                    // 修改库存明细数量,如无库存,曾新增
                    for (WrkDetl wrkDetl:wrkDetls54) {
                        LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId);
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId)) {
                                exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
                            }
                        } else {
                            locDetl = new LocDetl();
                            locDetl.sync(wrkDetl);
                            locDetl.setLocNo(wrkMast.getLocNo()); // 库位号
                            locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
                            locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            if (!locDetlService.save(locDetl)) {
                                exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
                            }
                        }
                    }
                    // 修改库位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
                        locMast.setLocSts("F");
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("并板入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        }
                    }
                    break;
                // 盘点入库
                case 57:
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls57 = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
                    if (wrkDetls57.isEmpty()) {
                        exceptionHandle("盘点入库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                    }
                    // 修改库位状态 Q ====>> F
                    if (locMast.getLocSts().equals("Q")) {
                        locMast.setLocSts(wrkMast.getFullPlt().equals("Y")?"F":"D");
                        locMast.setBarcode(wrkMast.getBarcode());
                        locMast.setIoTime(now);
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("盘点入库 ===>> 修改库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                        }
                    }
                    break;
                // 库位移转
                case 11:
                    // 默认目标库位是空板
                    String locSts = "D";
                    // 库位移转判断是否为空板移转
                    if (wrkMast.getEmptyMk().equals("N")) {
                        locSts = "F";
                        // 转移库存明细数据: 库存号 由工作档源库位变为目标库位
                        if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo(), hostId)) {
                            exceptionHandle("库位移转 ===>> 转移库存明细数据失败;[源库位={0}],[目标库位={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
                        }
                    }
                    // 修改源库位状态 ==> O
                    LocMast sourceLoc = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getSourceLocNo()).eq(LocMast::getHostId, hostId));
                    if (null != sourceLoc) {
                        sourceLoc.setBarcode("");
                        sourceLoc.setLocSts("O");
                        sourceLoc.setModiTime(now);
                        sourceLoc.setIoTime(now);
                        if (!locMastService.updateById(sourceLoc)) {
                            exceptionHandle("库位移转 ===>> 修改源库位状态失败;[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                        }
                    }
                    // 修改目标库位状态 ==> .locSts
                    locMast.setLocSts(locSts);
                    locMast.setBarcode(wrkMast.getBarcode());
                    locMast.setIoTime(now);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        exceptionHandle("库位移转 ===>> 修改目标库位状态失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                    }
                    break;
                default:
                    break;
            }
            // 修改工作主档状态
            wrkMast.setWrkSts(100L);//100.库存更新完成
            wrkMast.setModiTime(now);
            if (!wrkMastService.updateById(wrkMast)) {
                exceptionHandle("更新入库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
            }
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
    private ReturnT<String> doOut(WrkMast wrkMast){
        Date now = new Date();
        Long hostId = wrkMast.getHostId();
        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, wrkMast.getSourceLocNo()).eq(LocMast::getHostId, hostId));
        try {
            if (null == locMast) {
                exceptionHandle("工作档[workNo={0}]库位号错误[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
            }
            assert locMast != null;
            switch (wrkMast.getIoType()) {
                // 全板出库
                case 101:
                    // 出库确认信号位
//                    if (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N")) {
//                        return SUCCESS;
//                    }
                    // 根据工作号,查询工作明细档
                    List<WrkDetl> wrkDetls101 = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
                    if (wrkDetls101.isEmpty()) {
                        exceptionHandle("全板出库 ===>> 工作明细档为空;[workNo={0}]", wrkMast.getWrkNo());
                    }
                    for (WrkDetl wrkDetl : wrkDetls101) {
                        // todo:luxiaotao 3)修改出库通知档 status ==> Y
                    }
                    // 删除工作档源库位的库存明细
                    if (!locDetlService.remove(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, wrkMast.getSourceLocNo()).eq(LocDetl::getHostId, hostId))) {
                        exceptionHandle("全板出库 ===>> 删除库存明细失败;[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                    }
                    // 修改源库位状态 R ===>> O
                    if (locMast.getLocSts().equals("R")) {
                        locMast.setLocSts("O");
                        locMast.setBarcode("");
                        locMast.setModiTime(now);
                        locMast.setIoTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("全板出库 ===>> 修改源库位状态失败;[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                        }
                    }
                    break;
                // 空板出库
                case 110:
                    // 修改库位状态 R ===>> O
                    if (locMast.getLocSts().equals("R")) {
                        locMast.setLocSts("O");
                        locMast.setBarcode("");
                        locMast.setModiTime(now);
                        locMast.setIoTime(now);
                        if (!locMastService.updateById(locMast)) {
                            exceptionHandle("空板出库 ===>> 修改源库位状态失败;[workNo={0}],[sourceLocNo={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
                        }
                    }
                    break;
                default:
                    break;
            }
            // 修改工作主档状态
            wrkMast.setWrkSts(200L);//200.库存更新完成
            wrkMast.setModiTime(now);
            if (!wrkMastService.updateById(wrkMast)) {
                exceptionHandle("更新出库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
            }
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
}
zy-asrs-wms/src/main/webapp/static/js/wrkMast/wrkMast.js
@@ -1,5 +1,6 @@
var pageCurr;
var wrkNo;
var wrkMastId;
layui.use(['table','laydate', 'form'], function(){
    var table = layui.table;
    var $ = layui.jquery;
@@ -25,10 +26,10 @@
            ,{field: 'wrkSts$', align: 'center',title: '工作状态'}
            ,{field: 'ioType$', align: 'center',title: '入出库类型'}
            ,{field: 'ioPri', align: 'center',title: '优先级'}
            ,{field: 'sourceStaNo$', align: 'center',title: '源站'}
            ,{field: 'staNo$', align: 'center',title: '目标站'}
            ,{field: 'sourceLocNo$', align: 'center',title: '源库位'}
            ,{field: 'locNo$', align: 'center',title: '目标库位'}
            ,{field: 'sourceStaNo', align: 'center',title: '源站'}
            ,{field: 'staNo', align: 'center',title: '目标站'}
            ,{field: 'sourceLocNo', align: 'center',title: '源库位'}
            ,{field: 'locNo', align: 'center',title: '目标库位'}
            ,{field: 'barcode', align: 'center',title: '条码'}
            ,{field: 'preHave', align: 'center',title: '先入品', hide: true}
            ,{field: 'takeNone', align: 'center',title: '空操作', hide: true}
@@ -275,6 +276,7 @@
            // 明细展示
            case 'detlShow':
                wrkNo = data.wrkNo;
                wrkMastId = data.id;
                // 表格下方显示
                // locDetl(data.wrkNo);
                // 弹层显示
zy-asrs-wms/src/main/webapp/static/js/wrkMastLog/wrkMastLog.js
@@ -1,6 +1,7 @@
var pageCurr;
var wrkNo;
var ioTime;
var wrkMastId;
layui.use(['table','laydate', 'form'], function(){
    var table = layui.table;
    var $ = layui.jquery;
@@ -25,14 +26,13 @@
//             ,{field: 'id', align: 'center',title: '编号'}
            {field: 'wrkNo', align: 'center',title: '工作号',event: 'wrkNo', sort: true}
            ,{field: 'ioTime$', align: 'center',title: '工作时间', width:160, sort: true}
            ,{field: 'wrkSts$', align: 'center',title: '工作状态', width:160}
            ,{field: 'wrkSts', align: 'center',title: '工作状态', width:160}
            ,{field: 'ioType$', align: 'center',title: '入出库类型', width:160}
            ,{field: 'ioPri', align: 'center',title: '优先级'}
            ,{field: 'crnNo$', align: 'center',title: '堆垛机号'}
            ,{field: 'sourceStaNo$', align: 'center',title: '源站'}
            ,{field: 'staNo$', align: 'center',title: '目标站'}
            ,{field: 'sourceLocNo$', align: 'center',title: '源库位'}
            ,{field: 'locNo$', align: 'center',title: '目标库位'}
            ,{field: 'sourceStaNo', align: 'center',title: '源站'}
            ,{field: 'staNo', align: 'center',title: '目标站'}
            ,{field: 'sourceLocNo', align: 'center',title: '源库位'}
            ,{field: 'locNo', align: 'center',title: '目标库位'}
            // ,{field: 'picking', align: 'center',title: '拣料', templet:function(row){
            //         var html = "<input value='picking' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
            //         if(row.picking === 'Y'){html += " checked ";}
@@ -226,6 +226,7 @@
            case 'detlShow':
                wrkNo = data.wrkNo;
                ioTime =  data.ioTime;
                wrkMastId =  data.id;
                // 表格下方显示
                // locDetl(data.wrkNo);
                // 弹层显示
zy-asrs-wms/src/main/webapp/views/report/locDetl.html
@@ -33,7 +33,7 @@
    var pageCur;
    function getCol() {
        var cols = [
            {field: 'locNo$', align: 'center',title: '库位号'}
            {field: 'locNo', align: 'center',title: '库位号'}
        ];
        cols.push.apply(cols, detlCols);
        return cols;
zy-asrs-wms/src/main/webapp/views/wrkMast/wrkDetl.html
@@ -46,8 +46,8 @@
        tableIns1 = table.render({
            elem: '#wrkDetlByMast',
            headers: {token: localStorage.getItem('token')},
            url: baseUrl+'/wrkDetl/list/auth',
            where: {wrk_no: parent.wrkNo},
            url: baseUrl+'/wrkDetl/page/auth',
            where: {wrk_mast_id: parent.wrkMastId},
            page: true,
            limit: 16,
            limits: [16, 30, 50, 100, 200, 500],
zy-asrs-wms/src/main/webapp/views/wrkMast/wrkMast.html
@@ -58,11 +58,6 @@
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="owner" placeholder="拥有者编号" autocomplete="off">
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline cool-auto-complete">
            <input id="wrkSts" class="layui-input" name="wrk_sts" type="text" placeholder="请输入" autocomplete="off" style="display: none">
            <input id="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="工作状态" onfocus=this.blur()>
@@ -73,15 +68,10 @@
            </div>
        </div>
    </div>
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="crn_no" placeholder="堆垛机号" autocomplete="off">
        </div>
    </div>
    <!-- 日期范围 -->
    <div class="layui-inline" style="width: 300px">
        <div class="layui-input-inline">
            <input class="layui-input layui-laydate-range" name="io_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">
            <input class="layui-input layui-laydate-range" name="timeRange" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">
        </div>
    </div>
    <div class="layui-inline">
zy-asrs-wms/src/main/webapp/views/wrkMastLog/wrkDetlLog.html
@@ -54,8 +54,8 @@
        tableIns1 = table.render({
            elem: '#wrkDetlLogByMast',
            headers: {token: localStorage.getItem('token')},
            url: baseUrl+'/wrkDetlLogByMast/list/auth',
            where: {wrk_no: parent.wrkNo,ioTime: top.dateToStr(parent.ioTime, true)},
            url: baseUrl+'/wrkDetlLog/page/auth',
            where: {wrk_mast_id: parent.wrkMastId},
            page: true,
            limit: 16,
            limits: [16, 30, 50, 100, 200, 500],