From b4896b70617e9967812b8ef6c65f838269bf6d71 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 20 Nov 2023 14:44:06 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/menu/impl/SysMenuServiceImpl.java | 1 + .../point/service/ISchBasePointService.java | 7 + .../service/impl/SchBasePointServiceImpl.java | 11 + .../iostorInv/StIvtIostorinvController.java | 95 ++++ .../wms/storage_manage/ios/enums/IOSEnum.java | 14 +- .../iostorInv/IStIvtIostorinvService.java | 127 +++++ .../iostorInv/IStIvtIostorinvdisService.java | 42 ++ .../iostorInv/IStIvtIostorinvdtlService.java | 36 ++ .../iostorInv/dao/StIvtIostorinvdis.java | 150 ++++++ .../iostorInv/dao/StIvtIostorinvdtl.java | 160 ++++++ .../dao/mapper/StIvtIostorinvdisMapper.java | 36 ++ .../dao/mapper/StIvtIostorinvdtlMapper.java | 26 + .../mapper/xml/StIvtIostorinvdisMapper.xml | 64 +++ .../mapper/xml/StIvtIostorinvdtlMapper.xml | 26 + .../impl/StIvtIostorinvServiceImpl.java | 482 +++++++++++++++++- .../impl/StIvtIostorinvdisServiceImpl.java | 81 +++ .../impl/StIvtIostorinvdtlServiceImpl.java | 128 +++++ .../ios/util/IosInRuleService.java | 29 ++ .../storage_manage/ios/util/dto/RuleDto.java | 12 + .../ios/util/impl/IosInRuleServiceImpl.java | 27 + .../src/main/resources/config/application.yml | 25 +- .../storage_manage/ios/inbill/AddDialog.vue | 7 +- .../storage_manage/ios/inbill/DivDialog.vue | 58 ++- .../storage_manage/ios/inbill/TaskDialog.vue | 84 ++- .../storage_manage/ios/inbill/ViewDialog.vue | 23 +- .../wms/storage_manage/ios/inbill/inbill.js | 91 +++- .../wms/storage_manage/ios/inbill/index.vue | 12 +- 27 files changed, 1794 insertions(+), 60 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdisMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdtlMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/IosInRuleService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/dto/RuleDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/impl/IosInRuleServiceImpl.java diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java index 71ea6fa..e4b2bf6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java @@ -67,6 +67,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List query(MenuQuery query, PageQuery page) { + page.setSort("menu_sort DESC"); if (StringUtils.isNotEmpty(query.getBlurry())){ query.setPid(null); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java index 9a301ca..60472bb 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java @@ -61,4 +61,11 @@ public interface ISchBasePointService extends IService { * @param points */ void changeLock(JSONObject points); + + /** + * 业务锁 + * @param list 点位集合 + * @param lock_ype 锁定类型 + */ + void lockPoint(List list, String lock_ype); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 8a6731c..182b4cb 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -23,6 +23,7 @@ import org.nl.wms.sch.task_manage.enums.PointStatusEnum; import org.nl.wms.util.PointUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; @@ -204,4 +205,14 @@ public class SchBasePointServiceImpl extends ServiceImpl list, String lock_ype) { + list.forEach(row -> { + row.setPoint_status(lock_ype); + }); + + this.updateBatchById(list); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/controller/iostorInv/StIvtIostorinvController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/controller/iostorInv/StIvtIostorinvController.java index ad378d1..bb50747 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/controller/iostorInv/StIvtIostorinvController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/controller/iostorInv/StIvtIostorinvController.java @@ -32,10 +32,105 @@ public class StIvtIostorinvController { return new ResponseEntity<>(iStIvtIostorinvService.pageQuery(query,page), HttpStatus.OK); } + @PostMapping + @Log("新增入库单") + public ResponseEntity create(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.create(whereJson); + return new ResponseEntity<>( HttpStatus.OK); + } + + @PutMapping + @Log("修改入库单") + public ResponseEntity update(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.update(whereJson); + return new ResponseEntity<>( HttpStatus.OK); + } + + @DeleteMapping + @Log("删除入库单") + public ResponseEntity delete(@RequestBody Long[] ids){ + iStIvtIostorinvService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/queryBoxMater") @Log("查询入库单") public ResponseEntity queryBoxMater(@RequestBody JSONObject whereJson){ return new ResponseEntity<>(iStIvtIostorinvService.queryBoxMater(whereJson), HttpStatus.OK); } + + @PostMapping("/getInDtl") + @Log("查询新增入库单明细") + public ResponseEntity getInDtl(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(iStIvtIostorinvService.getInDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/getIosDtl") + @Log("查询明细") + public ResponseEntity getIosDtl(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(iStIvtIostorinvService.getIosDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/getIosDis") + @Log("查询分配明细") + public ResponseEntity getIosDis(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(iStIvtIostorinvService.getIosDis(whereJson), HttpStatus.OK); + } + + @PostMapping("/autoDivPoint") + @Log("自动分配点位") + public ResponseEntity autoDivPoint(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.autoDivPoint(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/unDivPoint") + @Log("取消分配") + public ResponseEntity unDivPoint(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.unDivPoint(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/setPoint") + @Log("设置起点") + public ResponseEntity setPoint(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.setPoint(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getIosDisTask") + @Log("获取明细任务") + public ResponseEntity getIosDisTask(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(iStIvtIostorinvService.getIosDisTask(whereJson),HttpStatus.OK); + } + + @PostMapping("/delTask") + @Log("删除任务") + public ResponseEntity delTask(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.delTask(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/issueTask") + @Log("下发任务") + public ResponseEntity issueTask(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.issueTask(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/confirmTask") + @Log("完成任务") + public ResponseEntity confirmTask(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.confirmTask(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/confirm") + @Log("强制确认单据") + public ResponseEntity confirm(@RequestBody JSONObject whereJson){ + iStIvtIostorinvService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/enums/IOSEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/enums/IOSEnum.java index 31a519b..de7891d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/enums/IOSEnum.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/enums/IOSEnum.java @@ -15,23 +15,29 @@ import java.util.Map; @AllArgsConstructor @Getter public enum IOSEnum { + //是否 + IS_NOTANDYES(MapOf.of("否", "0", "是", "1")), + //出入库类型 IO_TYPE(MapOf.of("入库", "0", "出库", "1","移库", "2")), - //出入单据状态 + //出入单据主表/明细状态 BILL_STATUS(MapOf.of("生成", "10", "提交", "20","分配中", "30","分配完","40","完成","99")), + //出入单据分配状态 + WORK_STATUS(MapOf.of("未生成", "10", "生成", "20","执行中", "30","完成","99")), + //出入单创建方式 CREATE_MODE(MapOf.of("PC产生", "10", "终端产生", "20","外部接口产生", "30")), - //出入任务执行状态 - WORK_STATUS(MapOf.of("未生成", "10", "生成", "20","执行中", "30","完成","99")), - //入库单据类型 IN_TYPE(MapOf.of("手工入库", "99")), //出库单据类型 OUT_TYPE(MapOf.of("手工出库", "99")), + + //点位锁定类型 + LOCK_TYPE(MapOf.of("未锁定", "00","入库锁", "10","出库锁", "20")), ; private Map code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java index 50ff6d9..b2dcb62 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java @@ -30,4 +30,131 @@ public interface IStIvtIostorinvService extends IService { * @return 、 */ JSONArray queryBoxMater(JSONObject whereJson); + + /** + * 新增入库单 + * @param whereJson + * { + * bill_status, bill_type, biz_date, create_mode, detail_count, remark, stor_id, total_qty + * tableData: [明细] + * } + */ + void create(JSONObject whereJson); + + /** + * 修改入库单 + * @param whereJson + * { + * mst: {} + * tableData: [明细] + * } + */ + void update(JSONObject whereJson); + + /** + * 删除入库单 + * @param ids / + */ + void delete(Long[] ids); + + /** + * 查询新增入库单明细 + * @param whereJson + * { + * iostorinv_id + * } + * @return JSONArray + */ + JSONArray getInDtl(JSONObject whereJson); + + /** + * 查询查询明 + * @param whereJson + * { + * iostorinv_id + * } + * @return JSONArray + */ + JSONArray getIosDtl(JSONObject whereJson); + + /** + * 查询分配明细 + * @param whereJson + * { + * iostorinvdtl_id + * } + * @return JSONArray + */ + JSONArray getIosDis(JSONObject whereJson); + + /** + * 自动分配点位 + * @param whereJson { + * dtl_row: {明细} + * sect_id: + * stor_id: + * storage_qty: + * point_code + * checked + * tableMater:[分配明细] + * } + */ + void autoDivPoint(JSONObject whereJson); + + /** + * 取消分配 + * @param whereJson 明细 + */ + void unDivPoint(JSONObject whereJson); + + /** + * 设置起点 + * @param whereJson{ + * 明细 + * point_code + * } + */ + void setPoint(JSONObject whereJson); + + /** + * 获取明细任务 + * @param whereJson { + * 明细, + * checked:是否显示未完成任务 + * } + * @return JSONArray + */ + JSONArray getIosDisTask(JSONObject whereJson); + + /** + * 删除任务 + * @param whereJson { + * 分配明细 + * } + */ + void delTask(JSONObject whereJson); + + /** + * 下发任务 + * @param whereJson { + * 分配明细 + * } + */ + void issueTask(JSONObject whereJson); + + /** + * 完成任务 + * @param whereJson { + * 分配明细 + * } + */ + void confirmTask(JSONObject whereJson); + + /** + * 强制确认单据 + * @param whereJson { + * iostorinv_id + * } + */ + void confirm(JSONObject whereJson); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java new file mode 100644 index 0000000..58371b3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java @@ -0,0 +1,42 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; + +import java.util.List; + +/** + *

+ * 出入库单分配表 服务类 + *

+ * + * @author generator + * @since 2023-11-16 + */ +public interface IStIvtIostorinvdisService extends IService { + + /** + * 插入分配明细 + * @param collect {出入库明细} + */ + void insetDis(List collect); + + /** + * 获取分配明细 + * @param whereJson {iostorinvdtl_id iostorinv_id} + * @return JSONArray + */ + JSONArray getIosDis(JSONObject whereJson); + + /** + * 获取明细任务 + * @param whereJson { + * iostorinvdtl_id: + * checked: 是否显示全部任务 + * } + * @return JSONArray + */ + JSONArray getIosDisTask(JSONObject whereJson); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java new file mode 100644 index 0000000..148fad5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java @@ -0,0 +1,36 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 出入库单明细表 服务类 + *

+ * + * @author generator + * @since 2023-11-16 + */ +public interface IStIvtIostorinvdtlService extends IService { + + /** + * 插入明细 + * @param iostorinv_id 、 + * @param tableDataList 、 + * @return 、 + */ + ArrayList insertDtl(String iostorinv_id, List tableDataList); + + /** + * 获取单据明细 + * @param {iostorinv_id} 、 + * @return JSONArray 、 + */ + JSONArray getIosDtl(JSONObject param); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java new file mode 100644 index 0000000..e798133 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java @@ -0,0 +1,150 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

+ * 出入库单分配表 + *

+ * + * @author generator + * @since 2023-11-16 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("st_ivt_iostorinvdis") +@Builder +public class StIvtIostorinvdis implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 出入单分配标识 + */ + @TableId + private String iostorinvdis_id; + + /** + * 出入单标识 + */ + private String iostorinv_id; + + /** + * 出入单明细标识 + */ + private String iostorinvdtl_id; + + /** + * 明细序号 + */ + private BigDecimal seq_no; + + /** + * 库区标识 + */ + private String sect_id; + + /** + * 库区编码 + */ + private String sect_code; + + /** + * 库区名称 + */ + private String sect_name; + + /** + * 仓位标识 + */ + private String struct_id; + + /** + * 仓位编码 + */ + private String struct_code; + + /** + * 仓位名称 + */ + private String struct_name; + + /** + * 物料标识 + */ + private String material_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 品质类型 + */ + private String quality_scode; + + /** + * 执行状态 + */ + private String work_status; + + /** + * 任务标识 + */ + private String task_id; + + /** + * 存储载具标识 + */ + private String storagevehicle_id; + + /** + * 存储载具编码 + */ + private String storagevehicle_code; + + /** + * 是否已下发 + */ + private Boolean is_issued; + + /** + * 数量计量单位标识 + */ + private String qty_unit_id; + + /** + * 数量计量单位名称 + */ + private String qty_unit_name; + + /** + * 计划数量 + */ + private BigDecimal plan_qty; + + /** + * 实际数量 + */ + private BigDecimal real_qty; + + /** + * 出入点位标识 + */ + private String point_id; + + /** + * 箱号 + */ + private String box_no; + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java new file mode 100644 index 0000000..9b6e179 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java @@ -0,0 +1,160 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

+ * 出入库单明细表 + *

+ * + * @author generator + * @since 2023-11-16 + */ +@Data +@Builder +@EqualsAndHashCode(callSuper = false) +@TableName("st_ivt_iostorinvdtl") +public class StIvtIostorinvdtl implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 出入单明细标识 + */ + @TableId + private String iostorinvdtl_id; + + /** + * 出入单标识 + */ + private String iostorinv_id; + + /** + * 明细序号 + */ + private BigDecimal seq_no; + + /** + * 物料标识 + */ + private String material_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 品质类型 + */ + private String quality_scode; + + /** + * 单据明细状态 + */ + private String bill_status; + + /** + * 数量计量单位标识 + */ + private String qty_unit_id; + + /** + * 数量计量单位名称 + */ + private String qty_unit_name; + + /** + * 计划数量 + */ + private BigDecimal plan_qty; + + /** + * 实际数量 + */ + private BigDecimal real_qty; + + /** + * 来源单据明细标识 + */ + private String source_billdtl_id; + + /** + * 来源单据类型 + */ + private String source_bill_type; + + /** + * 来源单编号 + */ + private String source_bill_code; + + /** + * 来源单表名 + */ + private String source_bill_table; + + /** + * 基础单据明细标识 + */ + private String base_billdtl_id; + + /** + * 基础单据类型 + */ + private String base_bill_type; + + /** + * 基础单编号 + */ + private String base_bill_code; + + /** + * 基础单表名 + */ + private String base_bill_table; + + /** + * 备注 + */ + private String remark; + + /** + * 已分配数量 + */ + private BigDecimal assign_qty; + + /** + * 未分配数量 + */ + private BigDecimal unassign_qty; + + /** + * 箱号 + */ + private String box_no; + + /** + * 来源交货单 + */ + private String vbeln; + + /** + * 来源交货单行 + */ + private String posnr; + + /** + * 发货幅宽 + */ + private String width; + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java new file mode 100644 index 0000000..a8d66f0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java @@ -0,0 +1,36 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv.dao.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; + +import java.util.List; + +/** + *

+ * 出入库单分配表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-11-16 + */ +public interface StIvtIostorinvdisMapper extends BaseMapper { + + /** + * 获取分配明细 + * @param whereJson {iostorinvdtl_id, iostorinv_id} + * @return List + */ + List getIosDis(JSONObject whereJson); + + /** + * 获取明细任务 + * @param whereJson { + * iostorinvdtl_id: + * iostorinv_id: + * checked: 是否显示全部任务 + * } + * @return List + */ + List getIosDisTask(JSONObject whereJson); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java new file mode 100644 index 0000000..9035bdc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java @@ -0,0 +1,26 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv.dao.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; + +import java.util.List; + +/** + *

+ * 出入库单明细表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-11-16 + */ +public interface StIvtIostorinvdtlMapper extends BaseMapper { + + /** + * 获取明细 + * @param param {iostorinv_id} + * @return List + */ + List getIosDtl(JSONObject param); + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdisMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdisMapper.xml new file mode 100644 index 0000000..61db4ba --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdisMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdtlMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdtlMapper.xml new file mode 100644 index 0000000..a4db036 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/dao/mapper/xml/StIvtIostorinvdtlMapper.xml @@ -0,0 +1,26 @@ + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java index 515a16a..e394e23 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java @@ -1,24 +1,43 @@ package org.nl.wms.storage_manage.ios.service.iostorInv.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; -import oracle.sql.ROWID; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; import org.nl.wms.pdm.subpackage.service.IPdmBiSubpackagerelationService; import org.nl.wms.pdm.subpackage.service.dao.PdmBiSubpackagerelation; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; import org.nl.wms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService; +import org.nl.wms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService; +import org.nl.wms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService; import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; import org.nl.wms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvMapper; import org.nl.wms.storage_manage.ios.service.iostorInv.dto.IostorInvQuery; +import org.nl.wms.storage_manage.ios.util.IosInRuleService; +import org.nl.wms.storage_manage.ios.util.dto.RuleDto; 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.List; import java.util.Map; import java.util.stream.Collectors; @@ -37,10 +56,25 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); - page.setOrderBy("create_time DESC"); + page.setOrderBy("input_time DESC"); List mst_detail = this.baseMapper.getPageQuery(query, pageQuery); TableDataInfo build = TableDataInfo.build(mst_detail); @@ -65,4 +99,448 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl dtlList = new ArrayList<>(); + for (int i = 0; i < tableData.size(); i++) { + JSONObject json = tableData.getJSONObject(i); + + JSONObject dtl = new JSONObject(); + dtl.put("material_code",json.getString("product_name")); + dtl.put("pcsn",json.getString("container_name")); + dtl.put("plan_qty",json.getString("net_weight")); + dtl.put("box_no",json.getString("package_box_sn")); + dtlList.add(dtl); + } + + // 插入明细 + iStIvtIostorinvdtlService.insertDtl(mstDao.getIostorinv_id(), dtlList); + + } + + @Override + @Transactional + public void update(JSONObject whereJson) { + StIvtIostorinv mstDao = this.getById(whereJson.getString("iostorinv_id")); + + // 组织主表数据 + updateMst(mstDao, whereJson); + + mstDao.setUpdate_optid(SecurityUtils.getCurrentUserId()); + mstDao.setUpdate_optname(SecurityUtils.getCurrentNickName()); + mstDao.setUpdate_time(DateUtil.now()); + this.updateById(mstDao); + + // 组织插入明细、分配的数据 + JSONArray tableData = whereJson.getJSONArray("tableData"); + + ArrayList dtlList = new ArrayList<>(); + for (int i = 0; i < tableData.size(); i++) { + JSONObject json = tableData.getJSONObject(i); + + JSONObject dtl = new JSONObject(); + dtl.put("material_code",json.getString("product_name")); + dtl.put("pcsn",json.getString("container_name")); + dtl.put("plan_qty",json.getString("net_weight")); + dtl.put("box_no",json.getString("package_box_sn")); + dtlList.add(dtl); + } + + // 插入明细 + iStIvtIostorinvdtlService.insertDtl(mstDao.getIostorinv_id(), dtlList); + } + + @Override + @Transactional + public void delete(Long[] ids) { + for (Long id : ids) { + this.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinv::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")) + .eq(StIvtIostorinv::getIostorinv_id, id) + ); + } + } + + @Override + public JSONArray getInDtl(JSONObject whereJson) { + + // 查询明细 + List dtlDaoList = iStIvtIostorinvdtlService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdtl::getIostorinv_id, whereJson.getString("iostorinv_id")) + ).stream() + .map(row -> JSON.parseObject(JSONObject.toJSONString(row))) + .collect(Collectors.toList()); + + dtlDaoList.forEach(row -> { + row.put("package_box_sn",row.getString("box_no")); + }); + + // 调用查询子卷包装关系服务 + JSONObject param = new JSONObject(); + param.put("data",JSON.parseArray(JSONArray.toJSONString(dtlDaoList))); + + return queryBoxMater(param); + } + + @Override + public JSONArray getIosDtl(JSONObject whereJson) { + return iStIvtIostorinvdtlService.getIosDtl(whereJson); + } + + @Override + public JSONArray getIosDis(JSONObject whereJson) { + return iStIvtIostorinvdisService.getIosDis(whereJson); + } + + @Override + @Transactional + public void autoDivPoint(JSONObject whereJson) { + // 明细 + JSONObject dtl_row = whereJson.getJSONObject("dtl_row"); + + // 校验是否需要分配 + if (!dtl_row.getString("bill_status").equals(IOSEnum.BILL_STATUS.code("生成"))) + throw new BadRequestException("此明细不需要分配!"); + + // 找到一个可用点位 + + SchBasePoint pointDao = new SchBasePoint(); + if (ObjectUtil.isEmpty(whereJson.getString("struct_code"))) { + + JSONObject param = new JSONObject(); + param.put("sect_id",whereJson.getString("sect_id")); + param.put("stor_id",whereJson.getString("stor_id")); + param.put("type", RuleDto.PRODUCTION_IN_1); + + pointDao = iosInRuleService.getOnePoint(param); + } else { + pointDao = iSchBasePointService.getById(whereJson.getString("point_code")); + } + + if (ObjectUtil.isEmpty(pointDao)) throw new BadRequestException("未找到可用点位!"); + + // 更新所有分配明细 + iStIvtIostorinvdisService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdis::getSect_id, "1") + .set(StIvtIostorinvdis::getSect_code, pointDao.getRegion_code()) + .set(StIvtIostorinvdis::getSect_name, pointDao.getRegion_name()) + .set(StIvtIostorinvdis::getStruct_id, "1") + .set(StIvtIostorinvdis::getStruct_code, pointDao.getPoint_code()) + .set(StIvtIostorinvdis::getStruct_name, pointDao.getPoint_name()) + .eq(StIvtIostorinvdis::getIostorinvdtl_id, dtl_row.getString("iostorinvdtl_id")) + ); + + + // 更新同一木箱明细状态 + iStIvtIostorinvdtlService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdtl::getBill_status, IOSEnum.BILL_STATUS.code("分配完")) + .eq(StIvtIostorinvdtl::getIostorinv_id, dtl_row.getString("iostorinv_id")) + .eq(StIvtIostorinvdtl::getBox_no, dtl_row.getString("box_no")) + ); + + // 更新主表状态 + this.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinv::getUpdate_optid,SecurityUtils.getCurrentUserId()) + .set(StIvtIostorinv::getUpdate_optname,SecurityUtils.getCurrentNickName()) + .set(StIvtIostorinv::getUpdate_time,DateUtil.now()) + .set(StIvtIostorinv::getDis_optid, SecurityUtils.getCurrentUserId()) + .set(StIvtIostorinv::getDis_optname,SecurityUtils.getCurrentNickName()) + .set(StIvtIostorinv::getDis_time,DateUtil.now()) + .eq(StIvtIostorinv::getIostorinv_id, whereJson.getString("iostorinv_id")) + ); + updateMstStatus(whereJson.getString("iostorinv_id")); + + // 锁定点位/解锁点位 + ArrayList paramList = new ArrayList<>(); + paramList.add(pointDao); + iSchBasePointService.lockPoint(paramList,IOSEnum.LOCK_TYPE.code("入库锁")); + + // 更新库存 + + } + + @Override + @Transactional + public void unDivPoint(JSONObject whereJson) { + + // 校验是否需要分配 + if (!whereJson.getString("bill_status").equals(IOSEnum.BILL_STATUS.code("分配完"))) + throw new BadRequestException("此明细不需要取消分配!"); + + // 点位编码 + String point_code = iStIvtIostorinvdisService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdis::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ).get(0).getStruct_code(); + + + // 更新分配明细 + iStIvtIostorinvdisService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdis::getSect_id, "") + .set(StIvtIostorinvdis::getSect_code, "") + .set(StIvtIostorinvdis::getSect_name, "") + .set(StIvtIostorinvdis::getStruct_id, "") + .set(StIvtIostorinvdis::getStruct_code, "") + .set(StIvtIostorinvdis::getStruct_name, "") + .eq(StIvtIostorinvdis::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ); + + // 更新同一木箱明细状态 + iStIvtIostorinvdtlService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdtl::getBill_status, IOSEnum.BILL_STATUS.code("生成")) + .eq(StIvtIostorinvdtl::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdtl::getBox_no, whereJson.getString("box_no")) + ); + + // 更新主表状态 + this.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinv::getDis_optid, "") + .set(StIvtIostorinv::getDis_optname,"") + .set(StIvtIostorinv::getDis_time,"") + .eq(StIvtIostorinv::getIostorinv_id, whereJson.getString("iostorinv_id")) + ); + updateMstStatus(whereJson.getString("iostorinv_id")); + + // 锁定点位/解锁点位 + ArrayList paramList = new ArrayList<>(); + paramList.add(iSchBasePointService.getById(point_code)); + iSchBasePointService.lockPoint(paramList,IOSEnum.LOCK_TYPE.code("未锁定")); + + // 更新库存 + + } + + @Override + @Transactional + public void setPoint(JSONObject whereJson) { + + // 校验入库点 + SchBasePoint pointDao = iSchBasePointService.getOne( + new QueryWrapper().lambda() + .eq(SchBasePoint::getPoint_code, whereJson.getString("point_code")) + ); + if (ObjectUtil.isEmpty(pointDao)) throw new BadRequestException("入库点不存在!"); + + // 生成任务 + + // 更新分配明细 + iStIvtIostorinvdisService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdis::getPoint_id, pointDao.getPoint_code()) + .set(StIvtIostorinvdis::getWork_status, IOSEnum.WORK_STATUS.code("生成")) + .set(StIvtIostorinvdis::getTask_id, "") + .eq(StIvtIostorinvdis::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ); + + } + + @Override + public JSONArray getIosDisTask(JSONObject whereJson) { + return iStIvtIostorinvdisService.getIosDisTask(whereJson); + } + + @Override + @Transactional + public void delTask(JSONObject whereJson) { + // 校验任务是否为生成 + SchBaseTask taskDao = iSchBaseTaskService.getById(whereJson.getString("task_id")); + if (!taskDao.getTask_status().equals("20")) throw new BadRequestException("请检查任务状态!"); + + // 删除任务 + taskDao.setIs_delete(true); + iSchBaseTaskService.updateById(taskDao); + + // 更新分配明细 + iStIvtIostorinvdisService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdis::getWork_status, IOSEnum.WORK_STATUS.code("未生成")) + .set(StIvtIostorinvdis::getTask_id, "") + .set(StIvtIostorinvdis::getPoint_id, "") + .eq(StIvtIostorinvdis::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ); + } + + @Override + @Transactional + public void issueTask(JSONObject whereJson) { + // 校验任务是否为生成 + SchBaseTask taskDao = iSchBaseTaskService.getById(whereJson.getString("task_id")); + if (!taskDao.getTask_status().equals("20")) throw new BadRequestException("请检查任务状态!"); + + // 调用下发方法 + + } + + @Override + @Transactional + public void confirmTask(JSONObject whereJson) { + // 更新任务为完成 + iSchBaseTaskService.update( + new UpdateWrapper().lambda() + .set(SchBaseTask::getTask_status, "07") + .eq(SchBaseTask::getTask_id, whereJson.getString("task_id")) + ); + + // 更新分配明细状态 + iStIvtIostorinvdisService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdis::getWork_status, IOSEnum.WORK_STATUS.code("完成")) + .eq(StIvtIostorinvdis::getTask_id, whereJson.getString("task_id")) + ); + + // 更新明细状态 + updateDtlStatus(whereJson.getString("iostorinvdtl_id")); + + } + + @Override + @Transactional + public void confirm(JSONObject whereJson) { + StIvtIostorinv mstDao = this.getById(whereJson.getString("iostorinv_id")); + + // 调用方法 + updateIvt(mstDao.getIostorinv_id()); + } + + /** + * 更新主表状态 + * @param iostorinv_id 、 + */ + private void updateMstStatus(String iostorinv_id) { + StIvtIostorinv mstDao = this.getById(iostorinv_id); + + // 查询所有明细是否都为完成、分配中、分配完 + List dtlDaoList = iStIvtIostorinvdtlService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id) + ); + + boolean is_confirm = dtlDaoList.stream() + .allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("完成"))); + + boolean is_div = dtlDaoList.stream() + .allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完"))); + + boolean is_create = dtlDaoList.stream() + .allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成"))); + + if (is_confirm) { + // 都为完成 + mstDao.setBill_status(IOSEnum.BILL_STATUS.code("完成")); + } else { + if (is_div) { + mstDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); + } else { + mstDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + } + } + + if (is_create) { + mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成")); + } + + this.updateById(mstDao); + + if (is_confirm) updateIvt(mstDao.getIostorinv_id()); + } + + /** + * 更新明细状态 + * @param iostorinvdtl_id 、 + */ + private void updateDtlStatus(String iostorinvdtl_id) { + + StIvtIostorinvdtl dtlDao = iStIvtIostorinvdtlService.getById(iostorinvdtl_id); + + // 查询所有分配明细是否都为完成 + List disDao = iStIvtIostorinvdisService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdis::getIostorinvdtl_id, iostorinvdtl_id) + ); + + // 判断是否都为完成 + boolean is_confirm = disDao.stream() + .allMatch(row -> row.getWork_status().equals(IOSEnum.WORK_STATUS.code("完成"))); + + if (is_confirm) { + // 更新明细为完成 + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("完成")); + iStIvtIostorinvdtlService.updateById(dtlDao); + + updateMstStatus(dtlDao.getIostorinv_id()); + } + } + + /** + * 更新库存 + * @param iostorinv_id 、 + */ + private void updateIvt(String iostorinv_id) { + // 更新主表状态为完成 + StIvtIostorinv mstDao = this.getById(iostorinv_id); + mstDao.setBill_status(IOSEnum.BILL_STATUS.code("完成")); + mstDao.setConfirm_optid(SecurityUtils.getCurrentUserId()); + mstDao.setConfirm_optname(SecurityUtils.getCurrentNickName()); + mstDao.setConfirm_time(DateUtil.now()); + this.updateById(mstDao); + + // 更新库存 + } + + /** + * 组织主表数据 + * @param mstDao / + * @param whereJson / + */ + private void updateMst(StIvtIostorinv mstDao, JSONObject whereJson) { + mstDao.setBuss_type(whereJson.getString("bill_type")); + mstDao.setBill_type(whereJson.getString("bill_type")); + mstDao.setBiz_date(whereJson.getString("biz_date").substring(0,10)); + mstDao.setStor_id(whereJson.getString("stor_id")); + mstDao.setStor_code(whereJson.getString("stor_code")); + mstDao.setStor_name(whereJson.getString("stor_name")); + mstDao.setSource_id(whereJson.getString("source_id")); + mstDao.setSource_name(whereJson.getString("source_name")); + mstDao.setSource_type(whereJson.getString("source_type")); + mstDao.setTotal_qty(whereJson.getBigDecimal("total_qty")); + mstDao.setDetail_count(whereJson.getBigDecimal("detail_count")); + mstDao.setRemark(whereJson.getString("remark")); + mstDao.setSyscompanyid("1"); + mstDao.setSysdeptid("1"); + mstDao.setIs_delete(false); + mstDao.setIs_upload(false); + mstDao.setIs_writeoff(false); + mstDao.setUpload_mes(false); + mstDao.setUpload_sap(false); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java new file mode 100644 index 0000000..d14833e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java @@ -0,0 +1,81 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.config.IdUtil; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; +import org.nl.wms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 出入库单分配表 服务实现类 + *

+ * + * @author generator + * @since 2023-11-16 + */ +@Service +public class StIvtIostorinvdisServiceImpl extends ServiceImpl implements IStIvtIostorinvdisService { + + @Override + @Transactional + public void insetDis(List collect) { + + ArrayList disDaoList = new ArrayList<>(); + + for (int i = 0; i < collect.size(); i++) { + JSONObject json = collect.get(i); + + StIvtIostorinvdis disDao = StIvtIostorinvdis.builder() + .iostorinvdis_id(IdUtil.getStringId()) + .iostorinv_id(json.getString("iostorinv_id")) + .iostorinvdtl_id(json.getString("iostorinvdtl_id")) + .seq_no(BigDecimal.valueOf(i)) + .sect_id(json.getString("sect_id")) + .sect_code(json.getString("sect_code")) + .sect_name(json.getString("sect_name")) + .struct_id(json.getString("struct_id")) + .struct_code(json.getString("struct_code")) + .struct_name(json.getString("struct_name")) + .material_id(json.getString("material_id")) + .pcsn(json.getString("pcsn")) + .quality_scode(json.getString("quality_scode")) + .work_status(IOSEnum.WORK_STATUS.code("未生成")) + .task_id(json.getString("task_id")) + .storagevehicle_id(json.getString("storagevehicle_id")) + .storagevehicle_code(json.getString("box_no")) + .is_issued(false) + .qty_unit_id(json.getString("qty_unit_id")) + .qty_unit_name(json.getString("qty_unit_name")) + .plan_qty(json.getBigDecimal("plan_qty")) + .real_qty(json.getBigDecimal("real_qty")) + .box_no(json.getString("box_no")) + .build(); + + disDaoList.add(disDao); + } + + this.saveBatch(disDaoList); + } + + @Override + public JSONArray getIosDis(JSONObject whereJson) { + return JSON.parseArray(JSONArray.toJSONString(this.baseMapper.getIosDis(whereJson))); + + } + + @Override + public JSONArray getIosDisTask(JSONObject whereJson) { + return JSON.parseArray(JSONArray.toJSONString(this.baseMapper.getIosDisTask(whereJson))); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java new file mode 100644 index 0000000..16cf850 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java @@ -0,0 +1,128 @@ +package org.nl.wms.storage_manage.ios.service.iostorInv.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.exception.BadRequestException; +import org.nl.config.IdUtil; +import org.nl.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.storage_manage.ios.enums.IOSEnum; +import org.nl.wms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService; +import org.nl.wms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService; +import org.nl.wms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; +import org.nl.wms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdtlMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 出入库单明细表 服务实现类 + *

+ * + * @author generator + * @since 2023-11-16 + */ +@Service +public class StIvtIostorinvdtlServiceImpl extends ServiceImpl implements IStIvtIostorinvdtlService { + + @Autowired + private IMdBaseMaterialService iMdBaseMaterialService; // 物料服务 + + @Autowired + private IStIvtIostorinvService iStIvtIostorinvService; // 出入库主表服务 + + @Autowired + private IStIvtIostorinvdisService iStIvtIostorinvdisService; // 出入库分配服务 + + @Override + @Transactional + public ArrayList insertDtl(String iostorinv_id, List tableDataList) { + + // 查询所有对应物料集合 + List materialList = iMdBaseMaterialService.list( + new QueryWrapper().lambda() + .in(MdBaseMaterial::getMaterial_code, + tableDataList.stream() + .map(row -> row.getString("material_code")) + .collect(Collectors.toSet()) + ) + ); + + ArrayList dtlDaoList = new ArrayList<>(); + + // 先删除 + this.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id) + ); + + // 插入明细 + for (int i = 0; i < tableDataList.size(); i++) { + JSONObject json = tableDataList.get(i); + + MdBaseMaterial materDao = materialList.stream() + .filter(row -> row.getMaterial_code().equals(json.getString("material_code"))) + .collect(Collectors.toList()).get(0); + if (ObjectUtil.isEmpty(materDao)) throw new BadRequestException("物料不存在"+json.getString("material_code")); + + StIvtIostorinvdtl dtlDao = StIvtIostorinvdtl.builder() + .iostorinvdtl_id(IdUtil.getStringId()) + .iostorinv_id(iostorinv_id) + .seq_no(BigDecimal.valueOf(i)) + .material_id(materDao.getMaterial_id()) + .pcsn(json.getString("pcsn")) + .quality_scode("00") + .bill_status(IOSEnum.BILL_STATUS.code("生成")) + .qty_unit_id("1") + .qty_unit_name("KG") + .plan_qty(json.getBigDecimal("plan_qty")) + .source_billdtl_id(json.getString("source_billdtl_id")) + .source_bill_type(json.getString("source_bill_type")) + .source_bill_code(json.getString("source_bill_code")) + .source_bill_table(json.getString("source_bill_table")) + .base_billdtl_id(json.getString("base_billdtl_id")) + .base_bill_type(json.getString("base_bill_type")) + .base_bill_code(json.getString("base_bill_code")) + .base_bill_table(json.getString("base_bill_table")) + .remark(json.getString("remark")) + .assign_qty(BigDecimal.valueOf(0)) + .unassign_qty(json.getBigDecimal("plan_qty")) + .box_no(json.getString("box_no")) + .vbeln(json.getString("vbeln")) + .posnr(json.getString("posnr")) + .width(json.getString("width")).build(); + dtlDaoList.add(dtlDao); + + } + + this.saveBatch(dtlDaoList); + + // 插入分配明细 + StIvtIostorinv mstDao = iStIvtIostorinvService.getById(iostorinv_id); + if (mstDao.getIo_type().equals(IOSEnum.IO_TYPE.code("入库"))) { + iStIvtIostorinvdisService.insetDis(dtlDaoList.stream() + .map(row -> JSON.parseObject(JSONObject.toJSONString(row))) + .collect(Collectors.toList()) + ); + } + + return dtlDaoList; + } + + @Override + public JSONArray getIosDtl(JSONObject param) { + return JSON.parseArray(JSONArray.toJSONString(this.baseMapper.getIosDtl(param))); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/IosInRuleService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/IosInRuleService.java new file mode 100644 index 0000000..b0f03d2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/IosInRuleService.java @@ -0,0 +1,29 @@ +package org.nl.wms.storage_manage.ios.util; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +/** + *

+ * 入库分配规则 服务类 + *

+ * + * @author generator + * @since 2023-11-10 + */ +public interface IosInRuleService{ + + /** + * 获取一个可用点位 + * @param param + * { + * sect_id: 区域, + * stor_id: 仓库, + * ...等等 + * type: 规则类型 + * } + * @return SchBasePoint:点位 + */ + SchBasePoint getOnePoint(JSONObject param); + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/dto/RuleDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/dto/RuleDto.java new file mode 100644 index 0000000..de82639 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/dto/RuleDto.java @@ -0,0 +1,12 @@ +package org.nl.wms.storage_manage.ios.util.dto; + +public class RuleDto { + + /* + * 入库分配: + * 按照仓库、区域、找到一个点位 + */ + public static final String PRODUCTION_IN_1 = "in_1"; + +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/impl/IosInRuleServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/impl/IosInRuleServiceImpl.java new file mode 100644 index 0000000..b3a3fa8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/storage_manage/ios/util/impl/IosInRuleServiceImpl.java @@ -0,0 +1,27 @@ +package org.nl.wms.storage_manage.ios.util.impl; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.storage_manage.ios.util.IosInRuleService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + *

+ * 入库分配规则 服务实现类 + *

+ * + * @author generator + * @since 2023-11-16 + */ +@Service +public class IosInRuleServiceImpl implements IosInRuleService { + + @Override + @Transactional + public SchBasePoint getOnePoint(JSONObject param) { + String type = param.getString("type"); + + return new SchBasePoint(); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml index add0608..8f517e2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -122,10 +122,31 @@ security: mybatis-plus: configuration: map-underscore-to-camel-case: false + call-setters-on-nulls: true jdbc-type-for-null: null - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: - - classpath:org.nl.**.mapper/*.xml + - classpath:/org/nl/**/mapper/**/*.xml global-config: db-config: id-type: INPUT +jetcache: + statIntervalMinutes: 15 + areaInCacheName: false + local: + default: + type: linkedhashmap + keyConvertor: fastjson + remote: + default: + type: redis + keyConvertor: fastjson2 + broadcastChannel: projectA + valueEncoder: java + valueDecoder: java + poolConfig: + minIdle: 5 + maxIdle: 20 + maxTotal: 50 + host: 127.0.0.1 + port: 6379 diff --git a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/AddDialog.vue b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/AddDialog.vue index 5f2c0cd..7c0d05b 100644 --- a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/AddDialog.vue +++ b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/AddDialog.vue @@ -205,7 +205,9 @@ export default { bill_btn: false, mater_btn: false, materType: '', - storlist: [], + storlist: [ + { 'stor_id': '1010101', 'stor_name': '测试仓库' } + ], rules: { stor_id: [ { required: true, message: '仓库不能为空', trigger: 'blur' } @@ -237,6 +239,9 @@ export default { }, [CRUD.HOOK.afterToEdit]() { // 获取入库单明细 + inBill.getInDtl({ 'iostorinv_id': this.form.iostorinv_id }).then(res => { + this.form.tableData = res + }) }, [CRUD.HOOK.afterToAdd]() { this.bill_btn = false diff --git a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/DivDialog.vue b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/DivDialog.vue index 64878e9..19c833f 100644 --- a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/DivDialog.vue +++ b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/DivDialog.vue @@ -15,7 +15,7 @@ - 全部分配 - + --> 关闭 @@ -138,7 +138,7 @@ type="primary" icon="el-icon-delete" size="mini" - @click="divPoint()" + @click="setPoint()" > 设置起点 @@ -237,7 +237,7 @@ export default { }, methods: { open() { - /* crudUserStor.getSect({ 'stor_id': this.storId }).then(res => { + /* crudUserStor.getSect({ 'stor_id': this.storId }).then(res => { this.sects = res.content }) @@ -258,13 +258,9 @@ export default { }, clcikRow(row) { this.form.dtl_row = row - /*crudRawAssist.getIODtl({ 'bill_code': this.form.dtl_row.bill_code }).then(res => { - this.openParam = res - this.form.dtl_row = res[row.index] - }) - crudRawAssist.getDisDtl(row).then(res => { + inBill.getIosDis(row).then(res => { this.form.tableMater = res - })*/ + }) }, tableRowClassName({ row, rowIndex }) { row.index = rowIndex @@ -295,20 +291,58 @@ export default { this.form.tableMater[i].sect_name = row.sect_name this.form.tableMater.splice(i, 1, this.form.tableMater[i]) // 通过splice 替换数据 触发视图更新 } - /* crudRawAssist.divStruct(this.form).then(res => { + /* crudRawAssist.divStruct(this.form).then(res => { crudRawAssist.getIODtl({ 'bill_code': this.form.dtl_row.bill_code, 'open_flag': '1' }).then(res => { this.openParam = res }) this.form.tableMater = [] })*/ }, - divPoint() { + setPoint() { + if (!this.form.dtl_row) { + this.crud.notify('请选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + if (!this.form.point_code) { + this.crud.notify('请选择入库点', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + this.form.dtl_row.point_code = this.form.point_code + inBill.setPoint(this.form.dtl_row).then(res => { + + }) }, allDivStruct() { }, divStruct() { + if (!this.form.dtl_row) { + this.crud.notify('请选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + // 判断是手工分配还是自动分配 + if (this.form.checked === true) { + if (!this.sect_id) { + this.crud.notify('请先选择区域!', CRUD.NOTIFICATION_TYPE.INFO) + return + } + this.divBtn = true + this.form.sect_id = this.sect_id + this.form.stor_id = this.stor_id + inBill.autoDivPoint(this.form).then(res => { + + }).finally(() => { + this.divBtn = false + }) + } }, unDivStruct() { + if (!this.form.dtl_row) { + this.crud.notify('请选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + inBill.unDivPoint(this.form.dtl_row).then(res => { + + }) } } } diff --git a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/TaskDialog.vue b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/TaskDialog.vue index 9ff85bb..9be4e0c 100644 --- a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/TaskDialog.vue +++ b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/TaskDialog.vue @@ -35,20 +35,11 @@ @row-click="clcikRow" > - - - @@ -80,7 +71,7 @@ type="warning" icon="el-icon-check" size="mini" - @click="reIssueTask()" + @click="issueTask()" > 下发 @@ -117,7 +108,7 @@ - + @@ -174,23 +165,68 @@ export default { this.form.dtl_row = null this.$emit('AddChanged') }, - delTask() { - }, - statusFormat(row, column) { - return this.dict.label.TASK_STATUS[row.work_status] - }, - confirmTask() { - }, - reIssueTask() { - }, - checkedChange(val) { - }, clcikRow(row, column, event) { this.form.dtl_row = row row.checked = this.form.checked - /* crudRawAssist.queryTask(row).then(res => { + inBill.getIosDisTask(row).then(res => { this.form.tableMater = res - })*/ + }) + }, + delTask() { + if (!this.dis_row) { + this.crud.notify('请选择一条任务项', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + if (this.dis_row.work_status !== '20') { + this.crud.notify('只能对状态为生成的任务进行删除!', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + inBill.delTask(this.dis_row).then(rea => { + this.form.dtl_row.checked = this.form.checked + inBill.getIosDisTask(this.form.dtl_row).then(res => { + this.form.tableMater = res + this.crud.notify('删除成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + }) + }) + }, + issueTask() { + if (!this.dis_row) { + this.crud.notify('请选择一条任务项', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + if (this.dis_row.work_status !== '20') { + this.crud.notify('只能对状态为生成的任务进行下发!', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + inBill.issueTask(this.dis_row).then(rea => { + this.form.dtl_row.checked = this.form.checked + inBill.getIosDisTask(this.form.dtl_row).then(res => { + this.form.tableMater = res + this.crud.notify('下发成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + }) + }) + }, + confirmTask() { + if (!this.dis_row) { + this.crud.notify('请选择一条任务项', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + if (this.dis_row.work_status === '99' || this.dis_row.work_status === '00') { + this.crud.notify('只能已生成或下发进行中的任务完成!', CRUD.NOTIFICATION_TYPE.INFO) + return false + } + inBill.confirmTask(this.dis_row).then(rea => { + this.form.dtl_row.checked = this.form.checked + inBill.getIosDisTask(this.form.dtl_row).then(res => { + this.form.tableMater = res + this.crud.notify('操作成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + }) + }) + }, + checkedChange(val) { + }, + statusFormat(row, column) { + return this.dict.label.TASK_STATUS[row.work_status] }, clcikDisRow(row, column, event) { this.dis_row = row diff --git a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/ViewDialog.vue b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/ViewDialog.vue index 316acb6..fdb6f9e 100644 --- a/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/ViewDialog.vue +++ b/lms/nladmin-ui/src/views/wms/storage_manage/ios/inbill/ViewDialog.vue @@ -41,7 +41,7 @@ :disabled="true" > - @@ -152,13 +152,14 @@