skyouc
2025-03-29 5fa7d2f4b4ee9b78174c7acf812495eae2e9bd5b
#新增
1. 新增组拖历史档
2. 收货添加生产日期
12个文件已添加
10个文件已修改
963 ■■■■■ 已修改文件
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemLogController.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinLogController.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItemLog.java 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinLog.java 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WaitPakinItemLogMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WaitPakinLogMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinItemLogService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinLogService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinItemLogServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinLogServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/mapper/manager/WaitPakinItemLogMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/mapper/manager/WaitPakinLogMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
@@ -1,6 +1,7 @@
package com.vincent.rsf.server.api.entity.dto;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.vincent.rsf.server.api.controller.params.ReceiptParams;
import com.vincent.rsf.server.common.utils.CommonUtil;
import com.vincent.rsf.server.common.utils.FieldsUtils;
@@ -9,8 +10,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
/**
@@ -52,12 +55,18 @@
    @ApiModelProperty("质检结果")
    private String inspect;
    @ApiModelProperty("重量")
    private Double weigth;
    @ApiModelProperty("采购单位")
    private String purUnit;
    @ApiModelProperty("库存单位")
    private String stockUnit;
    @ApiModelProperty("收货日期")
    private String prodTime;
    @ApiModelProperty("采购数量")
    private Double purQty;
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -43,6 +43,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -166,12 +167,15 @@
            throw new CoolException("库区标识不能为空!!");
        }
        WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getId, params.getWhAreaId()));
        WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>()
                .eq(WarehouseAreas::getId, params.getWhAreaId()));
        if (Objects.isNull(areasItem)) {
            throw new CoolException("数据错误:当前库区不存在!!");
        }
        //获取已启用的动态扩展字
        List<Fields> fields = fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1));
        List<Fields> fields = fieldsMapper.selectList(new LambdaQueryWrapper<Fields>()
                .eq(Fields::getFlagEnable, 1)
                .eq(Fields::getStatus, 1));
        List<ReceiptDetlsDto> receipts = params.getReceipts();
        List<WarehouseAreasItem> allOrders = new ArrayList<>();
@@ -180,7 +184,8 @@
        String asnCode = receipts.stream().findFirst().get().getAsnCode();
        AsnOrder asnOrder = asnOrderMapper.selectOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, asnCode));
        AsnOrder asnOrder = asnOrderMapper.selectOne(new LambdaQueryWrapper<AsnOrder>()
                .eq(AsnOrder::getCode, asnCode));
        if (Objects.isNull(asnOrder)) {
            throw new CoolException("数据错误:主单不存在!!");
        }
@@ -208,16 +213,24 @@
            if (Objects.isNull(orderItem)) {
                throw new CoolException("通知单明细不存在!!");
            }
            orderItem.setQty(dto.getReceiptQty());
            orderItem.setQty(dto.getReceiptQty())
                    .setProdTime(dto.getProdTime());
            if (asnOrderItemMapper.updateById(orderItem) < 1) {
                throw new CoolException("通知单明细数量修改失败!!");
            }
            WarehouseAreasItem item = new WarehouseAreasItem();
//            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//            String format = null;
//            if (Objects.isNull(dto.getProdTime())) {
//                 format = dateFormat.format(dto.getProdTime());
//            }
            item.setBarcode(dto.getBarcode())
                    .setAreaName(areasItem.getName())
                    .setAreaId(areasItem.getId())
                    .setProdTime(dto.getProdTime())
                    .setWeight(dto.getWeigth())
                    .setStockUnit(dto.getStockUnit())
                    .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto))
                    .setAnfme(dto.getReceiptQty())
rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
@@ -22,8 +22,8 @@
//        generator.username="sa";
//        generator.password="Zoneyung@zy56$";
        generator.table="man_asn_order_log";
        generator.tableDesc="组拖档明细";
        generator.table="man_wait_pakin_item_log";
        generator.tableDesc="组拖明细历史档";
        generator.packagePath="com.vincent.rsf.server.manager";
        generator.build();
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java
@@ -12,6 +12,7 @@
import com.vincent.rsf.server.manager.entity.WaitPakinItem;
import com.vincent.rsf.server.manager.service.WaitPakinItemService;
import com.vincent.rsf.server.system.controller.BaseController;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -19,6 +20,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@Api(tags = "组拖档明细")
@RestController
public class WaitPakinItemController extends BaseController {
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemLogController.java
New file
@@ -0,0 +1,110 @@
package com.vincent.rsf.server.manager.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.common.annotation.OperationLog;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.KeyValVo;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.entity.WaitPakinItemLog;
import com.vincent.rsf.server.manager.service.WaitPakinItemLogService;
import com.vincent.rsf.server.system.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@RestController
public class WaitPakinItemLogController extends BaseController {
    @Autowired
    private WaitPakinItemLogService waitPakinItemLogService;
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:list')")
    @PostMapping("/waitPakinItemLog/page")
    public R page(@RequestBody Map<String, Object> map) {
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<WaitPakinItemLog, BaseParam> pageParam = new PageParam<>(baseParam, WaitPakinItemLog.class);
        return R.ok().add(waitPakinItemLogService.page(pageParam, pageParam.buildWrapper(true)));
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:list')")
    @PostMapping("/waitPakinItemLog/list")
    public R list(@RequestBody Map<String, Object> map) {
        return R.ok().add(waitPakinItemLogService.list());
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:list')")
    @PostMapping({"/waitPakinItemLog/many/{ids}", "/waitPakinItemLogs/many/{ids}"})
    public R many(@PathVariable Long[] ids) {
        return R.ok().add(waitPakinItemLogService.listByIds(Arrays.asList(ids)));
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:list')")
    @GetMapping("/waitPakinItemLog/{id}")
    public R get(@PathVariable("id") Long id) {
        return R.ok().add(waitPakinItemLogService.getById(id));
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:save')")
    @OperationLog("Create 组拖明细历史档")
    @PostMapping("/waitPakinItemLog/save")
    public R save(@RequestBody WaitPakinItemLog waitPakinItemLog) {
        waitPakinItemLog.setCreateBy(getLoginUserId());
        waitPakinItemLog.setCreateTime(new Date());
        waitPakinItemLog.setUpdateBy(getLoginUserId());
        waitPakinItemLog.setUpdateTime(new Date());
        if (!waitPakinItemLogService.save(waitPakinItemLog)) {
            return R.error("Save Fail");
        }
        return R.ok("Save Success").add(waitPakinItemLog);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:update')")
    @OperationLog("Update 组拖明细历史档")
    @PostMapping("/waitPakinItemLog/update")
    public R update(@RequestBody WaitPakinItemLog waitPakinItemLog) {
        waitPakinItemLog.setUpdateBy(getLoginUserId());
        waitPakinItemLog.setUpdateTime(new Date());
        if (!waitPakinItemLogService.updateById(waitPakinItemLog)) {
            return R.error("Update Fail");
        }
        return R.ok("Update Success").add(waitPakinItemLog);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:remove')")
    @OperationLog("Delete 组拖明细历史档")
    @PostMapping("/waitPakinItemLog/remove/{ids}")
    public R remove(@PathVariable Long[] ids) {
        if (!waitPakinItemLogService.removeByIds(Arrays.asList(ids))) {
            return R.error("Delete Fail");
        }
        return R.ok("Delete Success").add(ids);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:list')")
    @PostMapping("/waitPakinItemLog/query")
    public R query(@RequestParam(required = false) String condition) {
        List<KeyValVo> vos = new ArrayList<>();
        LambdaQueryWrapper<WaitPakinItemLog> wrapper = new LambdaQueryWrapper<>();
        if (!Cools.isEmpty(condition)) {
            wrapper.like(WaitPakinItemLog::getId, condition);
        }
        waitPakinItemLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
        );
        return R.ok().add(vos);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinItemLog:list')")
    @PostMapping("/waitPakinItemLog/export")
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
        ExcelUtil.build(ExcelUtil.create(waitPakinItemLogService.list(), WaitPakinItemLog.class), response);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinLogController.java
New file
@@ -0,0 +1,110 @@
package com.vincent.rsf.server.manager.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.common.annotation.OperationLog;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.KeyValVo;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.entity.WaitPakinLog;
import com.vincent.rsf.server.manager.service.WaitPakinLogService;
import com.vincent.rsf.server.system.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@RestController
public class WaitPakinLogController extends BaseController {
    @Autowired
    private WaitPakinLogService waitPakinLogService;
    @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
    @PostMapping("/waitPakinLog/page")
    public R page(@RequestBody Map<String, Object> map) {
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<WaitPakinLog, BaseParam> pageParam = new PageParam<>(baseParam, WaitPakinLog.class);
        return R.ok().add(waitPakinLogService.page(pageParam, pageParam.buildWrapper(true)));
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
    @PostMapping("/waitPakinLog/list")
    public R list(@RequestBody Map<String, Object> map) {
        return R.ok().add(waitPakinLogService.list());
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
    @PostMapping({"/waitPakinLog/many/{ids}", "/waitPakinLogs/many/{ids}"})
    public R many(@PathVariable Long[] ids) {
        return R.ok().add(waitPakinLogService.listByIds(Arrays.asList(ids)));
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
    @GetMapping("/waitPakinLog/{id}")
    public R get(@PathVariable("id") Long id) {
        return R.ok().add(waitPakinLogService.getById(id));
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:save')")
    @OperationLog("Create 组拖历史档")
    @PostMapping("/waitPakinLog/save")
    public R save(@RequestBody WaitPakinLog waitPakinLog) {
        waitPakinLog.setCreateBy(getLoginUserId());
        waitPakinLog.setCreateTime(new Date());
        waitPakinLog.setUpdateBy(getLoginUserId());
        waitPakinLog.setUpdateTime(new Date());
        if (!waitPakinLogService.save(waitPakinLog)) {
            return R.error("Save Fail");
        }
        return R.ok("Save Success").add(waitPakinLog);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:update')")
    @OperationLog("Update 组拖历史档")
    @PostMapping("/waitPakinLog/update")
    public R update(@RequestBody WaitPakinLog waitPakinLog) {
        waitPakinLog.setUpdateBy(getLoginUserId());
        waitPakinLog.setUpdateTime(new Date());
        if (!waitPakinLogService.updateById(waitPakinLog)) {
            return R.error("Update Fail");
        }
        return R.ok("Update Success").add(waitPakinLog);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:remove')")
    @OperationLog("Delete 组拖历史档")
    @PostMapping("/waitPakinLog/remove/{ids}")
    public R remove(@PathVariable Long[] ids) {
        if (!waitPakinLogService.removeByIds(Arrays.asList(ids))) {
            return R.error("Delete Fail");
        }
        return R.ok("Delete Success").add(ids);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
    @PostMapping("/waitPakinLog/query")
    public R query(@RequestParam(required = false) String condition) {
        List<KeyValVo> vos = new ArrayList<>();
        LambdaQueryWrapper<WaitPakinLog> wrapper = new LambdaQueryWrapper<>();
        if (!Cools.isEmpty(condition)) {
            wrapper.like(WaitPakinLog::getId, condition);
        }
        waitPakinLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
        );
        return R.ok().add(vos);
    }
    @PreAuthorize("hasAuthority('manager:waitPakinLog:list')")
    @PostMapping("/waitPakinLog/export")
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
        ExcelUtil.build(ExcelUtil.create(waitPakinLogService.list(), WaitPakinLog.class), response);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -137,6 +137,12 @@
    private Double qty;
    /**
     * 生产日期
     */
    @ApiModelProperty("生产日期")
    private String prodTime;
    /**
     * 供应商编码
     */
    @ApiModelProperty(value= "供应商编码")
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -71,7 +71,6 @@
     * 是否删除 1: 是  0: 否  
     */
    @ApiModelProperty(value= "是否删除 1: 是  0: 否  ")
    @TableLogic
    private Integer deleted;
    /**
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItemLog.java
New file
@@ -0,0 +1,313 @@
package com.vincent.rsf.server.manager.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.vincent.rsf.server.manager.service.MatnrService;
import com.vincent.rsf.server.manager.service.WaitPakinService;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.SpringUtils;
import com.vincent.rsf.server.system.service.UserService;
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
import java.util.Date;
@Data
@Accessors(chain = true)
@TableName("man_wait_pakin_item_log")
public class WaitPakinItemLog implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 主单ID
     */
    @ApiModelProperty(value= "主单ID")
    private Long pakinId;
    /**
     * 明细ID
     */
    @ApiModelProperty(value= "明细ID")
    private Long pakinItemId;
    /**
     * 订单ID
     */
    @ApiModelProperty(value= "订单ID")
    private Long asnId;
    /**
     * 订单号
     */
    @ApiModelProperty(value= "订单号")
    private String asnCode;
    /**
     * 明细ID
     */
    @ApiModelProperty(value= "明细ID")
    private Long asnItemId;
    /**
     * 物料跟踪码
     */
    @ApiModelProperty(value= "物料跟踪码")
    private String trackCode;
    /**
     * 物料名称
     */
    @ApiModelProperty(value= "物料名称")
    private String maktx;
    /**
     * 物料ID
     */
    @ApiModelProperty(value= "物料ID")
    private Long matnrId;
    /**
     * 物料编码
     */
    @ApiModelProperty(value= "物料编码")
    private String matnrCode;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    /**
     * 执行中数量
     */
    @ApiModelProperty(value= "执行中数量")
    private Double workQty;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String unit;
    /**
     * 扩展字段标识
     */
    @ApiModelProperty(value= "扩展字段标识")
    private String fieldsIndex;
    /**
     * 已完成数量
     */
    @ApiModelProperty(value= "已完成数量")
    private Double qty;
    /**
     * 批次号
     */
    @ApiModelProperty(value= "批次号")
    private String batch;
    /**
     * 状态 1: 正常  0: 冻结
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 冻结  ")
    private Integer status;
    /**
     * 是否删除 1: 是  0: 否
     */
    @ApiModelProperty(value= "是否删除 1: 是  0: 否  ")
    @TableLogic
    private Integer deleted;
    /**
     * 租户
     */
    @ApiModelProperty(value= "租户")
    private Integer tenantId;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    private Long createBy;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    private Long updateBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public WaitPakinItemLog() {}
    public WaitPakinItemLog(Long pakinId,Long pakinItemId,Long asnId,String asnCode,Long asnItemId,String trackCode,String maktx,Long matnrId,String matnrCode,Double anfme,Double workQty,String unit,String fieldsIndex,Double qty,String batch,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
        this.pakinId = pakinId;
        this.pakinItemId = pakinItemId;
        this.asnId = asnId;
        this.asnCode = asnCode;
        this.asnItemId = asnItemId;
        this.trackCode = trackCode;
        this.maktx = maktx;
        this.matnrId = matnrId;
        this.matnrCode = matnrCode;
        this.anfme = anfme;
        this.workQty = workQty;
        this.unit = unit;
        this.fieldsIndex = fieldsIndex;
        this.qty = qty;
        this.batch = batch;
        this.status = status;
        this.deleted = deleted;
        this.tenantId = tenantId;
        this.createBy = createBy;
        this.createTime = createTime;
        this.updateBy = updateBy;
        this.updateTime = updateTime;
        this.memo = memo;
    }
//    WaitPakinItemLog waitPakinItemLog = new WaitPakinItemLog(
//            null,    // 主单ID
//            null,    // 明细ID
//            null,    // 订单ID
//            null,    // 订单号
//            null,    // 明细ID
//            null,    // 物料跟踪码
//            null,    // 物料名称
//            null,    // 物料ID
//            null,    // 物料编码
//            null,    // 数量
//            null,    // 执行中数量
//            null,    // 单位
//            null,    // 扩展字段标识
//            null,    // 已完成数量
//            null,    // 批次号
//            null,    // 状态[非空]
//            null,    // 是否删除[非空]
//            null,    // 租户
//            null,    // 添加人员
//            null,    // 添加时间[非空]
//            null,    // 修改人员
//            null,    // 修改时间[非空]
//            null    // 备注
//    );
    public String getPakinId$(){
        WaitPakinService service = SpringUtils.getBean(WaitPakinService.class);
        WaitPakin waitPakin = service.getById(this.pakinId);
        if (!Cools.isEmpty(waitPakin)){
            return String.valueOf(waitPakin.getId());
        }
        return null;
    }
    public String getMatnrId$(){
        MatnrService service = SpringUtils.getBean(MatnrService.class);
        Matnr matnr = service.getById(this.matnrId);
        if (!Cools.isEmpty(matnr)){
            return String.valueOf(matnr.getUnit());
        }
        return null;
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "正常";
            case 0:
                return "冻结";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getCreateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.createBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.updateBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
    public Boolean getStatusBool(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return true;
            case 0:
                return false;
            default:
                return null;
        }
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinLog.java
New file
@@ -0,0 +1,225 @@
package com.vincent.rsf.server.manager.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.text.SimpleDateFormat;
import java.util.Date;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.SpringUtils;
import com.vincent.rsf.server.system.service.UserService;
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
import java.util.Date;
@Data
@Accessors(chain = true)
@TableName("man_wait_pakin_log")
public class WaitPakinLog implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ID
     */
    @ApiModelProperty(value= "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 主单ID
     */
    @ApiModelProperty(value= "主单ID")
    private Long pakinId;
    /**
     * 编码
     */
    @ApiModelProperty(value= "编码")
    private String code;
    /**
     * 容器码
     */
    @ApiModelProperty(value= "容器码")
    private String barcode;
    /**
     * 组拖数量
     */
    @ApiModelProperty(value= "组拖数量")
    private Double anfme;
    /**
     * 组拖状态 0: 待入库   1:  入库中
     */
    @ApiModelProperty(value= "组拖状态 0: 待入库   1:  入库中  ")
    private Short ioStatus;
    /**
     * 状态 1: 正常  0: 冻结
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 冻结  ")
    private Integer status;
    /**
     * 是否删除 1: 是  0: 否
     */
    @ApiModelProperty(value= "是否删除 1: 是  0: 否  ")
    @TableLogic
    private Integer deleted;
    /**
     * 租户
     */
    @ApiModelProperty(value= "租户")
    private Integer tenantId;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    private Long createBy;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    private Long updateBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public WaitPakinLog() {}
    public WaitPakinLog(Long pakinId,String code,String barcode,Double anfme,Short ioStatus,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
        this.pakinId = pakinId;
        this.code = code;
        this.barcode = barcode;
        this.anfme = anfme;
        this.ioStatus = ioStatus;
        this.status = status;
        this.deleted = deleted;
        this.tenantId = tenantId;
        this.createBy = createBy;
        this.createTime = createTime;
        this.updateBy = updateBy;
        this.updateTime = updateTime;
        this.memo = memo;
    }
//    WaitPakinLog waitPakinLog = new WaitPakinLog(
//            null,    // 主单ID
//            null,    // 编码
//            null,    // 容器码
//            null,    // 组拖数量
//            null,    // 组拖状态[非空]
//            null,    // 状态[非空]
//            null,    // 是否删除[非空]
//            null,    // 租户
//            null,    // 添加人员
//            null,    // 添加时间[非空]
//            null,    // 修改人员
//            null,    // 修改时间[非空]
//            null    // 备注
//    );
    public String getIoStatus$(){
        if (null == this.ioStatus){ return null; }
        switch (this.ioStatus){
            case 0:
                return "待入库";
            case  1:
                return " 入库中";
            default:
                return String.valueOf(this.ioStatus);
        }
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "正常";
            case 0:
                return "冻结";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getCreateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.createBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.updateBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
    public Boolean getStatusBool(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return true;
            case 0:
                return false;
            default:
                return null;
        }
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WaitPakinItemLogMapper.java
New file
@@ -0,0 +1,12 @@
package com.vincent.rsf.server.manager.mapper;
import com.vincent.rsf.server.manager.entity.WaitPakinItemLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface WaitPakinItemLogMapper extends BaseMapper<WaitPakinItemLog> {
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WaitPakinLogMapper.java
New file
@@ -0,0 +1,12 @@
package com.vincent.rsf.server.manager.mapper;
import com.vincent.rsf.server.manager.entity.WaitPakinLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface WaitPakinLogMapper extends BaseMapper<WaitPakinLog> {
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -10,6 +10,7 @@
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -20,6 +21,7 @@
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * @author Ryan
@@ -47,6 +49,16 @@
    @Resource
    private SysStockProperties flowProperties;
    @Autowired
    private WaitPakinService waitPakinService;
    @Autowired
    private WaitPakinItemService waitPakinItemService;
    @Autowired
    private WaitPakinLogService waitPakinLogService;
    @Autowired
    private WaitPakinItemLogService waitPakinItemLogService;
    /**
     * @author Ryan
     * @description  根据PO单据生成ASN单,自动生成ASN单为全量生成
@@ -55,7 +67,6 @@
     * @time 2025/3/3 15:44
     */
    @Scheduled(cron = "0 0/05 * * * ?  ")
//    @Scheduled(cron = "0/5 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void genAsnOrder() {
        //判断是否开启自动生成ASN单据
@@ -131,13 +142,15 @@
            if (!purchaseService.saveOrUpdate(purchase)) {
                throw new CoolException("PO单执行完成后,保存失败!!");
            }
        });
    }
    /**
     * 生成物料标签
     * @author Ryan
     * @description 生成物料标签
     * @param
     * @return
     * @time 2025/3/29 12:35
     */
    @Scheduled(cron = "0 0/05 * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
@@ -163,4 +176,57 @@
        }
    }
    /**
     * @author Ryan
     * @description 组拖历史档
     * @param
     * @return
     * @time 2025/3/29 12:36
     */
    @Scheduled(cron = "0/5 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void pakinLog() {
        List<WaitPakin>  pakinIds = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getIoStatus, 2).select(WaitPakin::getId));
        if (pakinIds.isEmpty()) {
            return;
        }
        List<Long> list = pakinIds.stream().map(WaitPakin::getId).collect(Collectors.toList());
        List<WaitPakin> pakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().in(WaitPakin::getId, list));
        if (pakins.isEmpty()) {
            throw new CoolException("组拖单为空!!");
        }
        List<WaitPakinLog> pakinLogs = new ArrayList<>();
        pakins.forEach(pakin ->{
            WaitPakinLog log = new WaitPakinLog();
            BeanUtils.copyProperties(pakin, log);
            log.setPakinId(pakin.getId()).setIoStatus(Short.parseShort("2"));
            pakinLogs.add(log);
        });
        if (!waitPakinLogService.saveBatch(pakinLogs)) {
            throw new CoolException("历史档保存失败!!");
        }
        List<WaitPakinItemLog> itemLogs = new ArrayList<>();
        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().in(WaitPakinItem::getPakinId, list));
        if (pakinItems.isEmpty()) {
            throw new CoolException("组拖明细为空!!");
        }
        pakinItems.forEach(item -> {
            WaitPakinItemLog itemLog = new WaitPakinItemLog();
            BeanUtils.copyProperties(item, itemLog);
            itemLog.setPakinItemId(item.getId())
                    .setPakinId(item.getPakinId());
            itemLogs.add(itemLog);
        });
        if (!waitPakinItemLogService.saveBatch(itemLogs)) {
            throw new CoolException("历史明细档保存失败!!");
        }
        if (!waitPakinService.removeByIds(pakins)) {
            throw new CoolException("原单据删除失败!!");
        }
        if (!waitPakinItemService.removeByIds(pakinItems)) {
            throw new CoolException("原单据明细删除失败!!");
        }
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinItemLogService.java
New file
@@ -0,0 +1,8 @@
package com.vincent.rsf.server.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vincent.rsf.server.manager.entity.WaitPakinItemLog;
public interface WaitPakinItemLogService extends IService<WaitPakinItemLog> {
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinLogService.java
New file
@@ -0,0 +1,8 @@
package com.vincent.rsf.server.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vincent.rsf.server.manager.entity.WaitPakinLog;
public interface WaitPakinLogService extends IService<WaitPakinLog> {
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -108,10 +108,6 @@
            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, asnOrderItem);
            asnOrderItem.setTrackCode(ruleCode);
        }
        if (StringUtils.isBlank(asnOrderItem.getBatch())) {
            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_BATCH_CODE, asnOrderItem);
            asnOrderItem.setBatch(ruleCode);
        }
        if (!this.saveOrUpdate(asnOrderItem)) {
            throw new CoolException("收货通知单明细保存失败!!");
        }
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinItemLogServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.vincent.rsf.server.manager.service.impl;
import com.vincent.rsf.server.manager.mapper.WaitPakinItemLogMapper;
import com.vincent.rsf.server.manager.entity.WaitPakinItemLog;
import com.vincent.rsf.server.manager.service.WaitPakinItemLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("waitPakinItemLogService")
public class WaitPakinItemLogServiceImpl extends ServiceImpl<WaitPakinItemLogMapper, WaitPakinItemLog> implements WaitPakinItemLogService {
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinLogServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.vincent.rsf.server.manager.service.impl;
import com.vincent.rsf.server.manager.mapper.WaitPakinLogMapper;
import com.vincent.rsf.server.manager.entity.WaitPakinLog;
import com.vincent.rsf.server.manager.service.WaitPakinLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("waitPakinLogService")
public class WaitPakinLogServiceImpl extends ServiceImpl<WaitPakinLogMapper, WaitPakinLog> implements WaitPakinLogService {
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -61,8 +61,9 @@
        if (StringUtils.isBlank(ruleCode)) {
            throw new CoolException("编码规则错误: 编码规则「SYS_WAIT_PAKIN_CODE」规则是不存在");
        }
        pakin.setCode(ruleCode)
                //状态修改为入库中
                .setIoStatus(Short.parseShort("1"))
                .setAnfme(sum)
                .setBarcode(waitPakin.getBarcode());
        if (!this.save(pakin)) {
@@ -89,7 +90,6 @@
                    .setMatnrCode(item.getMatnrCode())
                    .setBatch(item.getSplrBatch())
                    .setUnit(item.getStockUnit())
                    .setBatch(item.getSplrBatch())
                    .setFieldsIndex(item.getFieldsIndex())
                    .setUnit(item.getStockUnit())
                    .setMatnrId(StringUtils.isNotBlank(item.getMatnrId()) ? Long.parseLong(item.getMatnrId()) : null)
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
@@ -43,10 +43,4 @@
     * 组拖编码生成规则
     */
    public final static String SYS_WAIT_PAKIN_CODE = "sys_wait_pakin_code";
    /**
     * 库存批次编码规则
     */
    public final static String SYS_STOCK_BATCH_CODE = "sys_stock_batch_code";
}
rsf-server/src/main/resources/mapper/manager/WaitPakinItemLogMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vincent.rsf.server.manager.mapper.WaitPakinItemLogMapper">
</mapper>
rsf-server/src/main/resources/mapper/manager/WaitPakinLogMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vincent.rsf.server.manager.mapper.WaitPakinLogMapper">
</mapper>