diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java index 91d8e99a..960f43a4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java @@ -57,10 +57,10 @@ public class CodeGenerator { mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); - dsc.setUrl("jdbc:mysql://192.168.46.5:3306/hl_one_mes_test?serverTimezone=GMT&setUnicode=true&characterEncoding=utf8"); + dsc.setUrl("jdbc:mysql://192.168.81.252:3306/hl_one_mes_xc?serverTimezone=GMT&setUnicode=true&characterEncoding=utf8"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); - dsc.setPassword("123456"); + dsc.setPassword("Root.123456"); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java index 366d7cb6..d1d3b351 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java @@ -126,7 +126,7 @@ public class MdPbBucketrecord implements Serializable { /** * 存储载具标识 */ - private Long storagevehicle_id; + private String storagevehicle_id; /** * 存储载具编码 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/mapper/xml/MdPbBucketrecordMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/mapper/xml/MdPbBucketrecordMapper.xml index ce376b97..7456c19c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/mapper/xml/MdPbBucketrecordMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/mapper/xml/MdPbBucketrecordMapper.xml @@ -21,6 +21,9 @@ and re.status = #{status} + + and re.storagevehicle_code = #{storagevehicle_code} + and ( re.bucketunique like '{bucketunique}%$' ) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java index f930d511..d63355d7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java @@ -67,7 +67,7 @@ public class MdPbBucketrecordServiceImpl extends ServiceImpl code; + + public String code(String desc) { + String code = this.getCode().get(desc); + if (StringUtils.isNotEmpty(code)) { + return code; + } + throw new BadRequestException(this.name() + "对应类型" + desc + "未定义"); + } + + public String check(String code) { + for (Map.Entry entry : this.getCode().entrySet()) { + if (entry.getValue().equals("code")) { + return entry.getValue(); + } + } + throw new BadRequestException(this.name() + "对应类型" + code + "未定义"); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/check/StIvtCheckmstCpController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/check/StIvtCheckmstCpController.java index 9cd8d2e7..7c77a392 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/check/StIvtCheckmstCpController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/check/StIvtCheckmstCpController.java @@ -1,8 +1,18 @@ package org.nl.wms.storage_manage.productmanage.controller.check; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.nl.common.anno.Log; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.productmanage.service.check.IStIvtCheckmstCpService; +import org.nl.wms.storage_manage.productmanage.service.check.dto.CheckQueryMst; +import org.nl.wms.storage_manage.rawmanage.service.check.IStIvtCheckmstYlService; +import org.nl.wms.storage_manage.rawmanage.service.check.dto.CheckQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; /** *

@@ -13,8 +23,95 @@ import org.springframework.web.bind.annotation.RestController; * @since 2023-05-04 */ @RestController -@RequestMapping("/stIvtCheckmstCp") +@RequestMapping("/api/stIvtCheckmstCp") public class StIvtCheckmstCpController { + @Autowired + private IStIvtCheckmstCpService iStIvtCheckmstCpService; + + @GetMapping + @Log("查询盘点单主表") + @ApiOperation("查询盘点单主表") + public ResponseEntity query(CheckQueryMst query, PageQuery page) { + return new ResponseEntity<>(iStIvtCheckmstCpService.pageQuery(query, page), HttpStatus.OK); + } + + @PostMapping + @Log("创建盘点单") + @ApiOperation("创建盘点单") + public ResponseEntity create(@RequestBody JSONObject whereJson) { + iStIvtCheckmstCpService.create(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getCheckDtl") + @Log("查询盘点明细") + @ApiOperation("查询盘点明细") + public ResponseEntity getCheckDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(iStIvtCheckmstCpService.getCheckDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/update") + @Log("修改盘点单") + @ApiOperation("修改盘点单") + public ResponseEntity update(@RequestBody JSONObject whereJson) { + iStIvtCheckmstCpService.update(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/delete") + @Log("删除盘点单") + @ApiOperation("删除盘点单") + public ResponseEntity delete(@RequestBody Long[] ids){ + iStIvtCheckmstCpService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/saveCheck") + @Log("盘点保存") + @ApiOperation("盘点保存") + public ResponseEntity saveCheck(@RequestBody JSONObject whereJson) { + iStIvtCheckmstCpService.saveCheck(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirm") + @Log("盘点强制确认") + @ApiOperation("盘点强制确认") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + iStIvtCheckmstCpService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/process1") + @Log("实盘为准,生成损溢单修改库存") + @ApiOperation("实盘为准,生成损溢单修改库存") + public ResponseEntity process1(@RequestBody JSONObject whereJson) { + iStIvtCheckmstCpService.process1(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/process0") + @Log("账务为准") + @ApiOperation("账务为准") + public ResponseEntity process0(@RequestBody JSONObject whereJson) { + iStIvtCheckmstCpService.process0(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getBucketrecord") + @Log("获取箱") + @ApiOperation("获取箱") + public ResponseEntity getBucketrecord(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(iStIvtCheckmstCpService.getBucketrecord(whereJson),HttpStatus.OK); + } + + @PostMapping("/processBox") + @Log("拆箱盘点保存") + @ApiOperation("拆箱盘点保存") + public ResponseEntity processBox(@RequestBody JSONObject whereJson) { + iStIvtCheckmstCpService.processBox(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java index 457e6fc6..4cec9f98 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java @@ -90,6 +90,14 @@ public class IStivtlostorivnCpInController { return new ResponseEntity<>(HttpStatus.OK); } + @PostMapping("/cancelConfirmvehicle") + @Log("取消组盘") + @ApiOperation("取消组盘") + public ResponseEntity cancelConfirmvehicle(@RequestBody JSONObject whereJson){ + iStIvtIostorinvCpService.cancelConfirmvehicle(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/divStruct") @Log("分配") @ApiOperation("分配") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckdtlCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckdtlCpService.java index 921f3300..030f5b4b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckdtlCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckdtlCpService.java @@ -1,7 +1,14 @@ package org.nl.wms.storage_manage.productmanage.service.check; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckdtlCp; +import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckmstCp; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckmstYl; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +20,7 @@ import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckdtlCp */ public interface IStIvtCheckdtlCpService extends IService { + double create(JSONArray row, StIvtCheckmstCp mst); + + List getCheckDtl(JSONObject map); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckmstCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckmstCpService.java index 8ad652fa..b039d4bd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckmstCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/IStIvtCheckmstCpService.java @@ -1,7 +1,14 @@ package org.nl.wms.storage_manage.productmanage.service.check; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckmstCp; +import org.nl.wms.storage_manage.productmanage.service.check.dto.CheckQueryMst; +import org.nl.wms.storage_manage.rawmanage.service.check.dto.CheckQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -12,5 +19,37 @@ import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckmstCp * @since 2023-05-04 */ public interface IStIvtCheckmstCpService extends IService { + /** + * 分页查询 + * @param query,page / + * @return JSONObject + */ + Object pageQuery(CheckQueryMst query, PageQuery page); + void create(JSONObject jo); + + List getCheckDtl(JSONObject map); + + void update(JSONObject map); + + /** + * 删除 + * @param ids + * { + * 主表id.. + * } + */ + void delete(Long[] ids); + + void saveCheck(JSONObject jo); + + void confirm(JSONObject jo); + + void process0(JSONObject jo); + + void process1(JSONObject jo); + + Object getBucketrecord(JSONObject whereJson); + + void processBox(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckdtlCp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckdtlCp.java index 4fcc9b32..435c56d2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckdtlCp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckdtlCp.java @@ -1,5 +1,6 @@ package org.nl.wms.storage_manage.productmanage.service.check.dao; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -25,6 +26,7 @@ public class StIvtCheckdtlCp implements Serializable { /** * 盘点单明细id */ + @TableId private String checkdtl_id; /** @@ -115,7 +117,7 @@ public class StIvtCheckdtlCp implements Serializable { /** * 盘点结果 */ - private Boolean check_result; + private String check_result; /** * 盘点人 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckmstCp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckmstCp.java index fc8b70b6..bc70e8cd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckmstCp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/StIvtCheckmstCp.java @@ -1,5 +1,6 @@ package org.nl.wms.storage_manage.productmanage.service.check.dao; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -26,6 +27,7 @@ public class StIvtCheckmstCp implements Serializable { /** * 盘点单标识 */ + @TableId private String check_id; /** @@ -76,7 +78,7 @@ public class StIvtCheckmstCp implements Serializable { /** * 创建时间 */ - private LocalDateTime create_time; + private String create_time; /** * 审核人 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.java index 5895150f..1ef5b4e6 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.java @@ -1,8 +1,13 @@ package org.nl.wms.storage_manage.productmanage.service.check.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckdtlCp; +import java.util.List; +import java.util.Map; + /** *

* 盘点单明细表 Mapper 接口 @@ -13,4 +18,5 @@ import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckdtlCp */ public interface StIvtCheckdtlCpMapper extends BaseMapper { + List getCheckDtl(@Param("map") Map map); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.xml index db74fdf1..36fb345f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dao/mapper/StIvtCheckdtlCpMapper.xml @@ -1,5 +1,37 @@ - + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dto/CheckQueryMst.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dto/CheckQueryMst.java new file mode 100644 index 00000000..af2312a9 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/dto/CheckQueryMst.java @@ -0,0 +1,35 @@ +package org.nl.wms.storage_manage.productmanage.service.check.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckmstCp; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckmstYl; + +/* + * @author ZZQ + * @Date 2023/5/4 19:49 + */ +@Data +public class CheckQueryMst extends BaseQuery { + + + private String stor_id; + + private String status; + + private String check_type; + + private String check_code; + + private Boolean is_delete = false; + + + @Override + public void paramMapping() { + super.doP.put("check_code", QParam.builder().k(new String[]{"check_code"}).type(QueryTEnum.LK).build()); + } + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckdtlCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckdtlCpServiceImpl.java index 6be30fdf..ce12448a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckdtlCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckdtlCpServiceImpl.java @@ -1,11 +1,35 @@ package org.nl.wms.storage_manage.productmanage.service.check.impl; +import cn.hutool.core.util.ObjectUtil; +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 org.nl.common.utils.IdUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.storage_manage.CHECKEnum; +import org.nl.wms.storage_manage.IOSEnum; import org.nl.wms.storage_manage.productmanage.service.check.IStIvtCheckdtlCpService; import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckdtlCp; +import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckmstCp; import org.nl.wms.storage_manage.productmanage.service.check.dao.mapper.StIvtCheckdtlCpMapper; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckdtlYl; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckmstYl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + /** *

* 盘点单明细表 服务实现类 @@ -17,4 +41,72 @@ import org.springframework.stereotype.Service; @Service public class StIvtCheckdtlCpServiceImpl extends ServiceImpl implements IStIvtCheckdtlCpService { + @Autowired + private IStIvtSectattrService sectattrService; // 库区服务 + + @Autowired + private IStIvtStructattrService structattrService; // 仓位服务 + + @Autowired + private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; // 载具信息服务 + + @Override + public double create(JSONArray rows, StIvtCheckmstCp mst) { + double total_qty = 0; + + if (rows.size() > 0 && ObjectUtil.isNotEmpty(mst)) { + // 先删除在插入 + this.remove(new QueryWrapper().eq("check_id", mst.getCheck_id())); + + for (int i = 0; i < rows.size(); i++) { + String checkdtl_id = IdUtil.getStringId(); + StIvtCheckdtlCp row = rows.getJSONObject(i).toJavaObject(StIvtCheckdtlCp.class); + row.setCheckdtl_id(checkdtl_id); + row.setCheck_id(mst.getCheck_id()); + row.setCheck_code(mst.getCheck_code()); + row.setSeq_no(BigDecimal.valueOf(i + 1)); + + // 获取库区信息 + QueryWrapper sect_wrapper = new QueryWrapper<>(); + sect_wrapper.eq("sect_id", row.getSect_id()); + sect_wrapper.eq("is_used", true); + StIvtSectattr sectDao = sectattrService.getOne(sect_wrapper); + if (ObjectUtil.isEmpty(sectDao)) throw new BadRequestException("库区不存在或未启用!"); + row.setSect_name(sectDao.getSect_name()); + + // 获取仓位信息 + QueryWrapper struct_wrapper = new QueryWrapper<>(); + struct_wrapper.eq("struct_id", row.getStruct_id()); + struct_wrapper.eq("is_used", true); + StIvtStructattr structDao = structattrService.getOne(struct_wrapper); + if (ObjectUtil.isEmpty(structDao)) throw new BadRequestException("仓位不存在或未启用!"); + row.setStruct_name(structDao.getStruct_name()); + + // 获取载具信息 + MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleinfo::getStoragevehicle_code, row.getStoragevehicle_code()) + ); + + row.setStoragevehicle_id(vehicleDao.getStoragevehicle_id()); + row.setStoragevehicle_code(vehicleDao.getStoragevehicle_code()); + row.setStatus(CHECKEnum.DTL_STATUS.code("生成")); + this.save(row); + + //锁定货位 + structattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("盘点锁")) + .set(StIvtStructattr::getInv_code,mst.getCheck_code()) + .eq(StIvtStructattr::getStruct_id, row.getStruct_id()) + ); + } + } + return total_qty; + } + + @Override + public List getCheckDtl(JSONObject map) { + return this.baseMapper.getCheckDtl(map); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckmstCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckmstCpServiceImpl.java index 019b09f7..602b53c5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckmstCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/check/impl/StIvtCheckmstCpServiceImpl.java @@ -1,10 +1,52 @@ package org.nl.wms.storage_manage.productmanage.service.check.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +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.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.jsonwebtoken.lang.Assert; +import org.jetbrains.annotations.NotNull; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService; +import org.nl.wms.masterdata_manage.service.vehicle.dao.mapper.MdPbBucketrecordMapper; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.storage_manage.CHECKEnum; +import org.nl.wms.storage_manage.productmanage.service.check.IStIvtCheckdtlCpService; import org.nl.wms.storage_manage.productmanage.service.check.IStIvtCheckmstCpService; +import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckdtlCp; import org.nl.wms.storage_manage.productmanage.service.check.dao.StIvtCheckmstCp; import org.nl.wms.storage_manage.productmanage.service.check.dao.mapper.StIvtCheckmstCpMapper; +import org.nl.wms.storage_manage.productmanage.service.check.dto.CheckQueryMst; +import org.nl.wms.storage_manage.productmanage.service.moreOrLess.IStIvtMoreorlessmstCpService; +import org.nl.wms.storage_manage.rawmanage.service.check.IStIvtCheckdtlYlService; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckdtlYl; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckmstYl; +import org.nl.wms.storage_manage.rawmanage.service.check.dto.CheckQuery; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.IStIvtMoreorlessmstYlService; +import org.nl.wms.storage_manage.semimanage.MLEnum; +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.HashSet; +import java.util.List; +import java.util.Map; /** *

@@ -17,4 +59,434 @@ import org.springframework.stereotype.Service; @Service public class StIvtCheckmstCpServiceImpl extends ServiceImpl implements IStIvtCheckmstCpService { + @Autowired + private IStIvtBsrealstorattrService stIvtBsrealstorattrService; // 实物属性服务 + + @Autowired + private IStIvtCheckdtlCpService iStIvtCheckdtlCpService; // 盘点明细服务 + + @Autowired + private IStIvtStructattrService structattrService; // 仓位服务 + + @Autowired + private IStIvtMoreorlessmstCpService iStIvtMoreorlessmstCpService; // 损益主表服务 + + @Autowired + private IMdPbBucketrecordService iMdPbBucketrecordService; // 箱服务 + + @Autowired(required = false) + private MdPbBucketrecordMapper mdPbBucketrecordMapper; // 箱mapper服务 + + @Override + public Object pageQuery(CheckQueryMst query, PageQuery page) { + // 查询条件 + page.setSort("check_code,DESC"); + // 分页查询 + Page pageQuery = this.page(page.build(), query.build()); + TableDataInfo build = TableDataInfo.build(pageQuery); + return build; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(JSONObject form) { + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + + // 调用主表 插入/更新方法 + StIvtCheckmstCp checkmstCp = packageMstForm(new StIvtCheckmstCp(), form); + this.save(checkmstCp); + + //调用明细表 插入方法 + iStIvtCheckdtlCpService.create(rows, checkmstCp); + + } + + @Override + public List getCheckDtl(JSONObject map) { + return iStIvtCheckdtlCpService.getCheckDtl(map); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject form) { + Assert.notNull(new Object[]{form, form.get("check_id")}, "请求参数不能为空"); + StIvtCheckmstCp mst = form.toJavaObject(StIvtCheckmstCp.class); + this.updateById(mst); + + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + // 调用明细表 插入/更新方法 + iStIvtCheckdtlCpService.create(rows, mst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveCheck(JSONObject whereJson) { + JSONObject form = whereJson.getJSONObject("row"); + JSONArray rows = whereJson.getJSONArray("rows"); + + StIvtCheckmstCp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"10", "30"})); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + iStIvtCheckdtlCpService.remove(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"01", "04"})); + for (int i = 0; i < rows.size(); i++) { + JSONObject jo = rows.getJSONObject(i); + String status = jo.getString("status"); + StIvtCheckdtlCp dtl = jo.toJavaObject(StIvtCheckdtlCp.class); + double base_qty = jo.getDoubleValue("base_qty"); + dtl.setSeq_no(BigDecimal.valueOf(i + 1)); + //已盘点过的明细不再处理 + if ("05,06,07,99".contains(status)) { + iStIvtCheckdtlCpService.updateById(dtl); + continue; + } + dtl.setStatus(CHECKEnum.DTL_STATUS.code("盘点中")); + dtl.setCheck_optid(SecurityUtils.getCurrentUserId()); + dtl.setCheck_optname(SecurityUtils.getCurrentNickName()); + dtl.setCheck_time(DateUtil.now()); + double fac_qty = jo.getDoubleValue("fac_qty"); + //判断盈亏 + if (fac_qty > base_qty) { + dtl.setCheck_result("2"); + } else if (fac_qty < base_qty) { + dtl.setCheck_result("1"); + } else { + dtl.setCheck_result("0"); + } + if (StrUtil.isEmpty(jo.getString("checkdtl_id"))) { + jo.put("checkdtl_id", IdUtil.getStringId()); + } + iStIvtCheckdtlCpService.save(dtl); + } + jo_mst.setDtl_num(BigDecimal.valueOf(rows.size())); + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("盘点中")); + jo_mst.setIs_nok(false); + List dtl_list = iStIvtCheckdtlCpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("check_result", "0")); + if (dtl_list.size() != 0) { + jo_mst.setIs_nok(true); + } + this.updateById(jo_mst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(JSONObject whereJson) { + + JSONObject form = whereJson.getJSONObject("row"); + JSONArray rows = whereJson.getJSONArray("rows"); + + StIvtCheckmstCp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"10", "30"})); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + iStIvtCheckdtlCpService.remove(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"01", "04"})); + //定义需要需要更新的的点位集合 + HashSet set = new HashSet<>(); + for (int i = 0; i < rows.size(); i++) { + JSONObject jo = rows.getJSONObject(i); + String status = jo.getString("status"); + StIvtCheckdtlCp dtl = jo.toJavaObject(StIvtCheckdtlCp.class); + double base_qty = jo.getDoubleValue("base_qty"); + dtl.setSeq_no(BigDecimal.valueOf(i + 1)); + //已盘点过的明细不再处理 + if ("05,06,07,99".contains(status)) { + iStIvtCheckdtlCpService.updateById(dtl); + continue; + } + dtl.setStatus(CHECKEnum.DTL_STATUS.code("已盘点")); + dtl.setCheck_optid(SecurityUtils.getCurrentUserId()); + dtl.setCheck_optname(SecurityUtils.getCurrentNickName()); + dtl.setCheck_time(DateUtil.now()); + double fac_qty = jo.getDoubleValue("fac_qty"); + //判断盈亏 + if (fac_qty > base_qty) { + dtl.setCheck_result("2"); + } else if (fac_qty < base_qty) { + dtl.setCheck_result("1"); + } else { + dtl.setCheck_result("0"); + dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成")); + } + if (StrUtil.isEmpty(jo.getString("checkdtl_id"))) { + jo.put("checkdtl_id", IdUtil.getStringId()); + } + iStIvtCheckdtlCpService.save(dtl); + set.add(dtl.getStruct_id()); + } + jo_mst.setDtl_num(BigDecimal.valueOf(rows.size())); + + jo_mst.setIs_nok(false); + List dtl_list = iStIvtCheckdtlCpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("check_result", "0")); + if (dtl_list.size() != 0) { + jo_mst.setIs_nok(true); + } + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("盘点中")); + List finish_list = iStIvtCheckdtlCpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"})); + //说明全部确认 + if (finish_list.size() == jo_mst.getDtl_num().intValue()) { + iStIvtCheckdtlCpService.update(new UpdateWrapper().set("status", "99").eq("check_id", form.getString("check_id"))); + + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成")); + jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + jo_mst.setConfirm_time(DateUtil.now()); + //锁定起点点位、仓位 + set.forEach(struct_id -> structattrService.update(new UpdateWrapper().set("lock_type", "0").set("inv_code", "").eq("struct_id", struct_id))); + } + this.updateById(jo_mst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void process0(JSONObject whereJson) { + JSONObject form = whereJson.getJSONObject("form"); + JSONObject row = whereJson.getJSONObject("row"); + + StIvtCheckmstCp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("status", "99")); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + StIvtCheckdtlCp dtl = row.toJavaObject(StIvtCheckdtlCp.class); + dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成")); + dtl.setProcess_optid(SecurityUtils.getCurrentUserId()); + dtl.setProcess_time(DateUtil.now()); + dtl.setProcess_type(CHECKEnum.PROCESS_TYPE.code("账务为准")); + dtl.setIs_process(true); + iStIvtCheckdtlCpService.updateById(dtl); + List finish_list = iStIvtCheckdtlCpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"})); + //说明全部确认 + if (finish_list.size() == jo_mst.getDtl_num().intValue()) { + iStIvtCheckdtlCpService.update(new UpdateWrapper().set("status", "99").eq("check_id", form.getString("check_id"))); + + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成")); + jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + jo_mst.setConfirm_time(DateUtil.now()); + //解锁起点点位、仓位 + finish_list.stream() + .map(finish -> finish.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("inv_code", "").set("lock_type", "0").eq("struct_id", struct_id))); + } + this.updateById(jo_mst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void process1(JSONObject whereJson) { + JSONObject form = whereJson.getJSONObject("form"); + JSONObject row = whereJson.getJSONObject("row"); + + StIvtCheckmstCp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("status", "99")); + StIvtCheckdtlCp dtl = row.toJavaObject(StIvtCheckdtlCp.class); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + + //创建损溢单 + JSONObject mol_jo = new JSONObject(); + mol_jo.put("buss_type", MLEnum.BILL_TYPE.code("盘点损溢")); + if (row.getString("check_result").equals("1")) { + mol_jo.put("mol_type", MLEnum.MOL_TYPE.code("损")); + } else { + mol_jo.put("mol_type", MLEnum.MOL_TYPE.code("溢")); + } + mol_jo.put("stor_id", jo_mst.getStor_id()); + mol_jo.put("remark", "盘点单:" + jo_mst.getCheck_code() + "生成的损溢单"); + + //创建明细 + JSONObject dtl_jo = new JSONObject(); + dtl_jo.put("sect_id", dtl.getSect_id()); + dtl_jo.put("material_id", dtl.getMaterial_id()); + dtl_jo.put("struct_id", dtl.getStruct_id()); + dtl_jo.put("qty_unit_id", dtl.getQty_unit_id()); + dtl_jo.put("qty_unit_name", dtl.getQty_unit_name()); + dtl_jo.put("mol_qty", row.getString("check_result").equals("1") ? NumberUtil.sub(dtl.getBase_qty(), dtl.getFac_qty()) : NumberUtil.sub(dtl.getFac_qty(), dtl.getBase_qty())); + dtl_jo.put("source_billdtl_id", dtl.getCheckdtl_id()); + dtl_jo.put("source_bill_type", jo_mst.getCheck_type()); + dtl_jo.put("source_bill_code", jo_mst.getCheck_code()); + dtl_jo.put("source_bill_table", "ST_IVT_CheckMst_CP"); + dtl_jo.put("storagevehicle_id", dtl.getStoragevehicle_id()); + dtl_jo.put("storagevehicle_code", dtl.getStoragevehicle_code()); + JSONArray mol_rows = new JSONArray(); + mol_rows.add(dtl_jo); + mol_jo.put("tableData", mol_rows); + mol_jo.put("auto_confirm", "1"); + //创建损溢单 + iStIvtMoreorlessmstCpService.create(mol_jo); + + + dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成")); + dtl.setProcess_optid(SecurityUtils.getCurrentUserId()); + dtl.setProcess_time(DateUtil.now()); + dtl.setProcess_type(CHECKEnum.PROCESS_TYPE.code("实盘为准")); + dtl.setIs_process(true); + iStIvtCheckdtlCpService.updateById(dtl); + List finish_list = iStIvtCheckdtlCpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"})); + //说明全部确认 + if (finish_list.size() == jo_mst.getDtl_num().intValue()) { + iStIvtCheckdtlCpService.update(new UpdateWrapper().set("status", "99").eq("check_id", form.getString("check_id"))); + + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成")); + jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + jo_mst.setConfirm_time(DateUtil.now()); + //解锁起点点位、仓位 + finish_list.stream() + .map(finish -> finish.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("inv_code", "").set("lock_type", "0").eq("struct_id", struct_id))); + } + this.updateById(jo_mst); + } + + @Override + public Object getBucketrecord(JSONObject whereJson) { + + List maps = mdPbBucketrecordMapper.queryAll(whereJson); + + if (ObjectUtil.isEmpty(maps)) { + JSONObject param = new JSONObject(); + param.put("checkdtl_id", whereJson.getString("checkdtl_id")); + + List checkDtl = this.getCheckDtl(param); + + for (Map json : checkDtl) { + json.put("storage_qty", json.get("base_qty")); + } + + maps = checkDtl; + } + + + return maps; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void processBox(JSONObject whereJson) { + JSONObject form = whereJson.getJSONObject("form"); + JSONArray row = whereJson.getJSONArray("row"); + + StIvtCheckmstCp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("status", "99")); + + StIvtCheckdtlCp dtl = iStIvtCheckdtlCpService.getById(form.getString("checkdtl_id")); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + + //创建损溢单 + JSONObject mol_jo = new JSONObject(); + mol_jo.put("buss_type", MLEnum.BILL_TYPE.code("盘点损溢")); + if (dtl.getCheck_result().equals("1")) { + mol_jo.put("mol_type", MLEnum.MOL_TYPE.code("损")); + } else { + mol_jo.put("mol_type", MLEnum.MOL_TYPE.code("溢")); + } + mol_jo.put("stor_id", jo_mst.getStor_id()); + mol_jo.put("remark", "盘点单:" + jo_mst.getCheck_code() + "生成的损溢单"); + + //创建明细 + JSONArray mol_rows = new JSONArray(); + for (int i = 0; i < row.size(); i++) { + JSONObject json = row.getJSONObject(i); + JSONObject dtl_jo = new JSONObject(); + dtl_jo.put("sect_id", dtl.getSect_id()); + dtl_jo.put("material_id", dtl.getMaterial_id()); + dtl_jo.put("struct_id", dtl.getStruct_id()); + dtl_jo.put("qty_unit_id", dtl.getQty_unit_id()); + dtl_jo.put("qty_unit_name", dtl.getQty_unit_name()); + dtl_jo.put("bucketunique", json.getString("bucketunique")); + dtl_jo.put("mol_qty", dtl.getCheck_result().equals("1") ? NumberUtil.sub(json.getBigDecimal("storage_qty"), json.getBigDecimal("ivt_qty_ck")) : NumberUtil.sub(json.getBigDecimal("ivt_qty_ck"), json.getBigDecimal("storage_qty"))); + dtl_jo.put("source_billdtl_id", dtl.getCheckdtl_id()); + dtl_jo.put("source_bill_type", jo_mst.getCheck_type()); + dtl_jo.put("source_bill_code", jo_mst.getCheck_code()); + dtl_jo.put("source_bill_table", "ST_IVT_CheckMst_CP"); + dtl_jo.put("storagevehicle_id", dtl.getStoragevehicle_id()); + dtl_jo.put("storagevehicle_code", dtl.getStoragevehicle_code()); + mol_rows.add(dtl_jo); + + } + mol_jo.put("tableData", mol_rows); + mol_jo.put("auto_confirm", "1"); + //创建损溢单 + iStIvtMoreorlessmstCpService.create(mol_jo); + + dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成")); + dtl.setProcess_optid(SecurityUtils.getCurrentUserId()); + dtl.setProcess_time(DateUtil.now()); + dtl.setProcess_type(CHECKEnum.PROCESS_TYPE.code("实盘为准")); + dtl.setIs_process(true); + iStIvtCheckdtlCpService.updateById(dtl); + List finish_list = iStIvtCheckdtlCpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"})); + //说明全部确认 + if (finish_list.size() == jo_mst.getDtl_num().intValue()) { + iStIvtCheckdtlCpService.update(new UpdateWrapper().set("status", "99").eq("check_id", form.getString("check_id"))); + + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成")); + jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + jo_mst.setConfirm_time(DateUtil.now()); + //解锁起点点位、仓位 + finish_list.stream() + .map(finish -> finish.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("inv_code", "").set("lock_type", "0").eq("struct_id", struct_id))); + } + this.updateById(jo_mst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + for (Long id : ids) { + StIvtCheckmstCp dao = this.getOne(new QueryWrapper().eq("check_id", id)); + dao.setIs_delete(true); + + //获取所有明细下的仓位解锁 + List dtl_list = iStIvtCheckdtlCpService.list(new QueryWrapper().eq("check_id", id)); + dtl_list.stream() + .map(dtl -> dtl.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("inv_code", "").set("lock_type", "0").eq("struct_id", struct_id))); + this.updateById(dao); + } + } + + @NotNull + private StIvtCheckmstCp packageMstForm(StIvtCheckmstCp checkmstCp, JSONObject whereJson) { + JSONArray rows = whereJson.getJSONArray("tableData"); + // 新增 + checkmstCp.setCheck_id(IdUtil.getStringId()); + checkmstCp.setCheck_code(CodeUtil.getNewCode("PD_CODE")); + checkmstCp.setBuss_type(whereJson.getString("check_type")); + checkmstCp.setCheck_type(checkmstCp.getBuss_type()); + + // 获取仓库信息 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("stor_id", whereJson.getString("stor_id")); + wrapper.eq("is_used", true); + StIvtBsrealstorattr bsrealDao = stIvtBsrealstorattrService.getOne(wrapper); + if (ObjectUtil.isEmpty(bsrealDao)) throw new BadRequestException("仓库不存在或未启用!"); + + checkmstCp.setStor_id(bsrealDao.getStor_id()); + checkmstCp.setStor_name(bsrealDao.getStor_name()); + checkmstCp.setDtl_num(BigDecimal.valueOf(rows.size())); + checkmstCp.setCreate_mode(CHECKEnum.CREATE_MODE.code("PC产生")); + checkmstCp.setStatus(CHECKEnum.BILL_STATUS.code("生成")); + checkmstCp.setCreate_id(SecurityUtils.getCurrentUserId()); + checkmstCp.setCreate_name(SecurityUtils.getCurrentNickName()); + checkmstCp.setCreate_time(DateUtil.now()); + checkmstCp.setIs_delete(false); + checkmstCp.setIs_upload(true); + // TODO 暂时写死 + checkmstCp.setSysdeptid("111"); + checkmstCp.setSyscompanyid("111"); + + checkmstCp.setRemark(whereJson.getString("remark")); + + return checkmstCp; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java index d82b7976..d5a191a2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java @@ -91,6 +91,15 @@ public interface IStIvtIostorinvCpService extends IService { */ void confirmvehicle(JSONObject whereJson); + /** + * 取消组盘 + * @param whereJson + * { + * "dtl_row":{明细对象..} + * } + */ + void cancelConfirmvehicle(JSONObject whereJson); + /** * 删除 * @param ids @@ -144,4 +153,5 @@ public interface IStIvtIostorinvCpService extends IService { * } */ void confirm(JSONObject whereJson); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java index 2789151f..04a85910 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil; 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.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.jsonwebtoken.lang.Assert; @@ -202,6 +203,14 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, jsonDtl.getString("iostorinvdtl_id")) + ); + if (ObjectUtil.isNotEmpty(disIs)) throw new BadRequestException("此明细已组盘"); + List disDtlList = tableDisDtl .stream() .map(row -> (JSONObject) row) @@ -302,6 +311,55 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl disDaoList = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ); + + if (ObjectUtil.isEmpty(disDaoList)) throw new BadRequestException("没有可取消组盘的分配明细!"); + + boolean is_struct = disDaoList.stream() + .anyMatch(row -> ObjectUtil.isNotEmpty(row.getStruct_id())); + + if (is_struct) throw new BadRequestException("有分配明细已分配货位不可取消组盘!"); + + // 2.更新载具扩展属性、 箱记录 + Map> collect = disDaoList.stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getStoragevehicle_code)); + + for (String storagevehicle_code : collect.keySet()) { + // 更新载具扩展属性 + iMdPbStoragevehicleextService.update( + new UpdateWrapper().lambda() + .set(MdPbStoragevehicleext::getMaterial_id, "") + .set(MdPbStoragevehicleext::getStorage_qty, "0") + .eq(MdPbStoragevehicleext::getStoragevehicle_code, storagevehicle_code) + ); + + // 更新箱记录表 + iMdPbBucketrecordService.update( + new UpdateWrapper().lambda() + .set(MdPbBucketrecord::getStoragevehicle_code, "") + .set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成")) + .set(MdPbBucketrecord::getStoragevehicle_id, "") + .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘")) + .eq(MdPbBucketrecord::getStoragevehicle_code, storagevehicle_code) + ); + } + + // 3.删除分配表 + iostorinvdisCpService.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ); + + } + + @Override + @Transactional(rollbackFor = Exception.class) public void delete(Long[] ids) { for (Long id : ids) { @@ -331,7 +389,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().eq("mol_id", id)); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/controller/structIvt/StIvtStructivtYlController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/controller/structIvt/StIvtStructivtYlController.java index 0b03c860..d1181bc1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/controller/structIvt/StIvtStructivtYlController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/controller/structIvt/StIvtStructivtYlController.java @@ -36,11 +36,25 @@ public class StIvtStructivtYlController { return new ResponseEntity<>(structivtYlService.getRawIvt(query, page), HttpStatus.OK); } + @GetMapping("/getProductIvt") + @Log("查询可用的成品库存") + @ApiOperation("查询可用的成品库存") + public ResponseEntity getProductIvt(StructIvtYLQuery query, PageQuery page) { + return new ResponseEntity<>(structivtYlService.getProductIvt(query,page), HttpStatus.OK); + } + @PostMapping("/getStructIvt") @Log("查询库存") @ApiOperation("查询库存") public ResponseEntity getStructIvt(StructIvtYLQuery query) { return new ResponseEntity<>(structivtYlService.getStructIvt(query), HttpStatus.OK); } + + @PostMapping("/getSemiProductIvt") + @Log("查询可用的半成品库存") + @ApiOperation("查询可用的半成品库存") + public ResponseEntity getSemiProductIvt(StructIvtYLQuery query) { + return new ResponseEntity<>(structivtYlService.getSemiProductIvt(query), HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/check/impl/StIvtCheckmstYlServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/check/impl/StIvtCheckmstYlServiceImpl.java index 7cdec05d..4edf33bc 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/check/impl/StIvtCheckmstYlServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/check/impl/StIvtCheckmstYlServiceImpl.java @@ -62,7 +62,7 @@ public class StIvtCheckmstYlServiceImpl extends ServiceImpl pageQuery = this.page(page.build(), query.build()); TableDataInfo build = TableDataInfo.build(pageQuery); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/IStIvtStructivtYlService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/IStIvtStructivtYlService.java index 4c3cda74..ba9cf85a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/IStIvtStructivtYlService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/IStIvtStructivtYlService.java @@ -28,4 +28,15 @@ public interface IStIvtStructivtYlService extends IService { Object getRawIvt(StructIvtYLQuery query, PageQuery page); List getStructIvt(StructIvtYLQuery query); + + /** + * 分页查询可用的成品库存 + * + * @param query / + * @return JSONObject + */ + Object getProductIvt(StructIvtYLQuery query, PageQuery page); + + + Object getSemiProductIvt(StructIvtYLQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/StIvtStructivtYlMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/StIvtStructivtYlMapper.java index 74c92292..d710eae8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/StIvtStructivtYlMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/StIvtStructivtYlMapper.java @@ -22,5 +22,9 @@ public interface StIvtStructivtYlMapper extends BaseMapper { List getRawIvt(@Param("query") StructIvtYLQuery query, @Param("pageQuery") PageQuery pageQuery); + List getProductIvt(@Param("query") StructIvtYLQuery query, @Param("pageQuery") PageQuery pageQuery); + + List getSemiProductIvt(@Param("query") StructIvtYLQuery query); + List getStructIvt(@Param("query") StructIvtYLQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/xml/StIvtStructivtYlMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/xml/StIvtStructivtYlMapper.xml index 1b88c84d..bd4d2d1e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/xml/StIvtStructivtYlMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/rawmanage/service/structIvt/dao/mapper/xml/StIvtStructivtYlMapper.xml @@ -37,6 +37,78 @@ + + + + + SELECT + CheckDtl.*, + struct.struct_code, + struct.sect_code, + mb.material_code, + mb.material_name, + user1.person_name AS process_optname + FROM + st_ivt_checkdtl_bcp CheckDtl + LEFT JOIN md_me_materialbase mb ON mb.material_id = CheckDtl.material_id + LEFT JOIN st_ivt_structattr struct ON struct.struct_id = CheckDtl.struct_id + LEFT JOIN sys_user user1 ON user1.user_id = CheckDtl.process_optid + + 1=1 + + and CheckDtl.check_id = #{map.check_id} + + + and CheckDtl.checkdtl_id = #{map.checkdtl_id} + + + and #{map.status} >= CheckDtl.status + + + and #{map.check_result} = CheckDtl.check_result + + + and CheckDtl.check_result IN ('1','2') + + + order by CheckDtl.seq_no + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/dto/CheckQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/dto/CheckQuery.java new file mode 100644 index 00000000..094653c9 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/dto/CheckQuery.java @@ -0,0 +1,34 @@ +package org.nl.wms.storage_manage.semimanage.service.check.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.storage_manage.semimanage.service.check.dao.StIvtCheckmstBcp; + +/* + * @author ZZQ + * @Date 2023/5/4 19:49 + */ +@Data +public class CheckQuery extends BaseQuery { + + + private String stor_id; + + private String status; + + private String check_type; + + private String check_code; + + private Boolean is_delete = false; + + + @Override + public void paramMapping() { + super.doP.put("check_code", QParam.builder().k(new String[]{"check_code"}).type(QueryTEnum.LK).build()); + } + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckdtlBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckdtlBcpServiceImpl.java index 2c15febd..6272b7aa 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckdtlBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckdtlBcpServiceImpl.java @@ -1,11 +1,31 @@ package org.nl.wms.storage_manage.semimanage.service.check.impl; +import cn.hutool.core.util.ObjectUtil; +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 org.nl.common.utils.IdUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.storage_manage.CHECKEnum; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckdtlYl; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckmstYl; import org.nl.wms.storage_manage.semimanage.service.check.dao.StIvtCheckdtlBcp; +import org.nl.wms.storage_manage.semimanage.service.check.dao.StIvtCheckmstBcp; import org.nl.wms.storage_manage.semimanage.service.check.dao.mapper.StIvtCheckdtlBcpMapper; import org.nl.wms.storage_manage.semimanage.service.check.IStIvtCheckdtlBcpService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + /** *

* 盘点单明细表 服务实现类 @@ -17,4 +37,54 @@ import org.springframework.stereotype.Service; @Service public class StIvtCheckdtlBcpServiceImpl extends ServiceImpl implements IStIvtCheckdtlBcpService { + @Autowired + private IStIvtSectattrService sectattrService; + @Autowired + private IStIvtStructattrService structattrService; + + @Override + public double create(JSONArray rows, StIvtCheckmstBcp mst) { + double total_qty = 0; + + if (rows.size() > 0 && ObjectUtil.isNotEmpty(mst)) { + // 先删除在插入 + this.remove(new QueryWrapper().eq("check_id", mst.getCheck_id())); + + for (int i = 0; i < rows.size(); i++) { + String checkdtl_id = IdUtil.getStringId(); + StIvtCheckdtlBcp row = rows.getJSONObject(i).toJavaObject(StIvtCheckdtlBcp.class); + row.setCheckdtl_id(checkdtl_id); + row.setCheck_id(mst.getCheck_id()); + row.setCheck_code(mst.getCheck_code()); + row.setSeq_no(BigDecimal.valueOf(i + 1)); + + // 获取库区信息 + QueryWrapper sect_wrapper = new QueryWrapper<>(); + sect_wrapper.eq("sect_id", row.getSect_id()); + sect_wrapper.eq("is_used", true); + StIvtSectattr sectDao = sectattrService.getOne(sect_wrapper); + if (ObjectUtil.isEmpty(sectDao)) throw new BadRequestException("库区不存在或未启用!"); + row.setSect_name(sectDao.getSect_name()); + // 获取仓位信息 + QueryWrapper struct_wrapper = new QueryWrapper<>(); + struct_wrapper.eq("struct_id", row.getStruct_id()); + struct_wrapper.eq("is_used", true); + StIvtStructattr structDao = structattrService.getOne(struct_wrapper); + if (ObjectUtil.isEmpty(structDao)) throw new BadRequestException("仓位不存在或未启用!"); + row.setStruct_name(structDao.getStruct_name()); + + row.setStatus(CHECKEnum.DTL_STATUS.code("生成")); + this.save(row); + + //锁定货位 + structattrService.update(new UpdateWrapper().set("lock_type", "1").set("inv_code",mst.getCheck_code()).eq("struct_id", row.getStruct_id())); + } + } + return total_qty; + } + + @Override + public List getCheckDtl(JSONObject map) { + return this.baseMapper.getCheckDtl(map); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java index be6cb9e0..f17b70f0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/check/impl/StIvtCheckmstBcpServiceImpl.java @@ -1,11 +1,46 @@ package org.nl.wms.storage_manage.semimanage.service.check.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +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.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.jsonwebtoken.lang.Assert; +import org.jetbrains.annotations.NotNull; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.storage_manage.CHECKEnum; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckdtlYl; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckmstYl; +import org.nl.wms.storage_manage.semimanage.service.check.dao.StIvtCheckdtlBcp; +import org.nl.wms.storage_manage.semimanage.service.check.dto.CheckQuery; +import org.nl.wms.storage_manage.semimanage.MLEnum; +import org.nl.wms.storage_manage.semimanage.service.check.IStIvtCheckdtlBcpService; +import org.nl.wms.storage_manage.semimanage.service.check.IStIvtCheckmstBcpService; import org.nl.wms.storage_manage.semimanage.service.check.dao.StIvtCheckmstBcp; import org.nl.wms.storage_manage.semimanage.service.check.dao.mapper.StIvtCheckmstBcpMapper; -import org.nl.wms.storage_manage.semimanage.service.check.IStIvtCheckmstBcpService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessmstBcpService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + /** *

* 盘点单主表 服务实现类 @@ -17,4 +52,324 @@ import org.springframework.stereotype.Service; @Service public class StIvtCheckmstBcpServiceImpl extends ServiceImpl implements IStIvtCheckmstBcpService { + @Autowired + private IStIvtBsrealstorattrService stIvtBsrealstorattrService; + + @Autowired + private IStIvtCheckdtlBcpService checkdtlBcpService; + + @Autowired + private IStIvtStructattrService structattrService; + @Autowired + private IStIvtMoreorlessmstBcpService moreorlessmstBcpService; + + @Override + public Object pageQuery(CheckQuery query, PageQuery page) { + // 查询条件 + page.setSort("check_code"); + // 分页查询 + Page pageQuery = this.page(page.build(), query.build()); + TableDataInfo build = TableDataInfo.build(pageQuery); + return build; + } + + @Override + public void create(JSONObject form) { + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + + // 调用主表 插入/更新方法 + StIvtCheckmstBcp checkmstYl = packageMstForm(new StIvtCheckmstBcp(), form); + this.save(checkmstYl); + + //调用明细表 插入方法 + checkdtlBcpService.create(rows, checkmstYl); + + } + + @Override + public List getCheckDtl(JSONObject map) { + return checkdtlBcpService.getCheckDtl(map); + } + + @Override + public void update(JSONObject form) { + Assert.notNull(new Object[]{form, form.get("check_id")}, "请求参数不能为空"); + StIvtCheckmstBcp mst = form.toJavaObject(StIvtCheckmstBcp.class); + this.updateById(mst); + + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + // 调用明细表 插入/更新方法 + checkdtlBcpService.create(rows, mst); + } + + @Override + public void saveCheck(JSONObject whereJson) { + JSONObject form = whereJson.getJSONObject("row"); + JSONArray rows = whereJson.getJSONArray("rows"); + + StIvtCheckmstBcp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"10", "30"})); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + checkdtlBcpService.remove(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"01", "04"})); + for (int i = 0; i < rows.size(); i++) { + JSONObject jo = rows.getJSONObject(i); + String status = jo.getString("status"); + StIvtCheckdtlBcp dtl = jo.toJavaObject(StIvtCheckdtlBcp.class); + double base_qty = jo.getDoubleValue("base_qty"); + dtl.setSeq_no(BigDecimal.valueOf(i + 1)); + //已盘点过的明细不再处理 + if ("05,06,07,99".contains(status)) { + checkdtlBcpService.updateById(dtl); + continue; + } + dtl.setStatus(CHECKEnum.DTL_STATUS.code("盘点中")); + dtl.setCheck_optid(SecurityUtils.getCurrentUserId()); + dtl.setCheck_optname(SecurityUtils.getCurrentNickName()); + dtl.setCheck_time(DateUtil.now()); + double fac_qty = jo.getDoubleValue("fac_qty"); + //判断盈亏 + if (fac_qty > base_qty) { + dtl.setCheck_result("2"); + } else if (fac_qty < base_qty) { + dtl.setCheck_result("1"); + } else { + dtl.setCheck_result("0"); + } + if (StrUtil.isEmpty(jo.getString("checkdtl_id"))) { + jo.put("checkdtl_id", IdUtil.getStringId()); + } + checkdtlBcpService.save(dtl); + } + jo_mst.setDtl_num(BigDecimal.valueOf(rows.size())); + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("盘点中")); + jo_mst.setIs_nok(false); + List dtl_list = checkdtlBcpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("check_result", "0")); + if (dtl_list.size() != 0) { + jo_mst.setIs_nok(true); + } + this.updateById(jo_mst); + } + + @Override + public void confirm(JSONObject whereJson) { + + JSONObject form = whereJson.getJSONObject("row"); + JSONArray rows = whereJson.getJSONArray("rows"); + + StIvtCheckmstBcp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"10", "30"})); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + checkdtlBcpService.remove(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"01", "04"})); + //定义需要需要更新的的点位集合 + HashSet set = new HashSet<>(); + for (int i = 0; i < rows.size(); i++) { + JSONObject jo = rows.getJSONObject(i); + String status = jo.getString("status"); + StIvtCheckdtlBcp dtl = jo.toJavaObject(StIvtCheckdtlBcp.class); + double base_qty = jo.getDoubleValue("base_qty"); + dtl.setSeq_no(BigDecimal.valueOf(i + 1)); + //已盘点过的明细不再处理 + if ("05,06,07,99".contains(status)) { + checkdtlBcpService.updateById(dtl); + continue; + } + dtl.setStatus(CHECKEnum.DTL_STATUS.code("已盘点")); + dtl.setCheck_optid(SecurityUtils.getCurrentUserId()); + dtl.setCheck_optname(SecurityUtils.getCurrentNickName()); + dtl.setCheck_time(DateUtil.now()); + double fac_qty = jo.getDoubleValue("fac_qty"); + //判断盈亏 + if (fac_qty > base_qty) { + dtl.setCheck_result("2"); + } else if (fac_qty < base_qty) { + dtl.setCheck_result("1"); + } else { + dtl.setCheck_result("0"); + dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成")); + } + if (StrUtil.isEmpty(jo.getString("checkdtl_id"))) { + jo.put("checkdtl_id", IdUtil.getStringId()); + } + checkdtlBcpService.save(dtl); + set.add(dtl.getStruct_id()); + } + jo_mst.setDtl_num(BigDecimal.valueOf(rows.size())); + + jo_mst.setIs_nok(false); + List dtl_list = checkdtlBcpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("check_result", "0")); + if (dtl_list.size() != 0) { + jo_mst.setIs_nok(true); + } + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("盘点中")); + List finish_list = checkdtlBcpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"})); + //说明全部确认 + if (finish_list.size() == jo_mst.getDtl_num().intValue()) { + checkdtlBcpService.update(new UpdateWrapper().set("status", "99").eq("check_id", form.getString("check_id"))); + + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成")); + jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + jo_mst.setConfirm_time(DateUtil.now()); + //锁定起点点位、仓位 + set.forEach(struct_id -> structattrService.update(new UpdateWrapper().set("lock_type", "0").set("inv_code", "").eq("struct_id", struct_id))); + } + this.updateById(jo_mst); + } + + @Override + public void process0(JSONObject whereJson) { + JSONObject form = whereJson.getJSONObject("form"); + JSONObject row = whereJson.getJSONObject("row"); + + StIvtCheckmstBcp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("status", "99")); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + StIvtCheckdtlBcp dtl = row.toJavaObject(StIvtCheckdtlBcp.class); + dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成")); + dtl.setProcess_optid(SecurityUtils.getCurrentUserId()); + dtl.setProcess_time(DateUtil.now()); + dtl.setProcess_type(CHECKEnum.PROCESS_TYPE.code("账务为准")); + dtl.setIs_process(true); + checkdtlBcpService.updateById(dtl); + List finish_list = checkdtlBcpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"})); + //说明全部确认 + if (finish_list.size() == jo_mst.getDtl_num().intValue()) { + checkdtlBcpService.update(new UpdateWrapper().set("status", "99").eq("check_id", form.getString("check_id"))); + + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成")); + jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + jo_mst.setConfirm_time(DateUtil.now()); + //解锁起点点位、仓位 + finish_list.stream() + .map(finish -> finish.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("inv_code", "").set("lock_type", "0").eq("struct_id", struct_id))); + } + this.updateById(jo_mst); + } + + @Override + public void process1(JSONObject whereJson) { + JSONObject form = whereJson.getJSONObject("form"); + JSONObject row = whereJson.getJSONObject("row"); + + StIvtCheckmstBcp jo_mst = this.getOne(new QueryWrapper().eq("check_id", form.getString("check_id")).ne("status", "99")); + StIvtCheckdtlBcp dtl = row.toJavaObject(StIvtCheckdtlBcp.class); + if (jo_mst == null) { + throw new BadRequestException("盘点单状态异常!"); + } + + //创建损溢单 + JSONObject mol_jo = new JSONObject(); + mol_jo.put("buss_type", MLEnum.BILL_TYPE.code("盘点损溢")); + if (row.getString("check_result").equals("1")) { + mol_jo.put("mol_type", MLEnum.MOL_TYPE.code("损")); + } else { + mol_jo.put("mol_type", MLEnum.MOL_TYPE.code("溢")); + } + mol_jo.put("stor_id", jo_mst.getStor_id()); + mol_jo.put("remark", "盘点单:" + jo_mst.getCheck_code() + "生成的损溢单"); + mol_jo.put("workshop_id", jo_mst.getWorkshop_id()); + + //创建明细 + JSONObject dtl_jo = new JSONObject(); + dtl_jo.put("sect_id", dtl.getSect_id()); + dtl_jo.put("material_id", dtl.getMaterial_id()); + dtl_jo.put("struct_id", dtl.getStruct_id()); + dtl_jo.put("qty_unit_id", dtl.getQty_unit_id()); + dtl_jo.put("qty_unit_name", dtl.getQty_unit_name()); + dtl_jo.put("mol_qty", row.getString("check_result").equals("1") ? NumberUtil.sub(dtl.getBase_qty(), dtl.getFac_qty()) : NumberUtil.sub(dtl.getFac_qty(), dtl.getBase_qty())); + dtl_jo.put("source_billdtl_id", dtl.getCheckdtl_id()); + dtl_jo.put("source_bill_type", jo_mst.getCheck_type()); + dtl_jo.put("source_bill_code", jo_mst.getCheck_code()); + dtl_jo.put("source_bill_table", "ST_IVT_CheckMst_YL"); + JSONArray mol_rows = new JSONArray(); + mol_rows.add(dtl_jo); + mol_jo.put("tableData", mol_rows); + mol_jo.put("auto_confirm", "1"); + //创建损溢单 + moreorlessmstBcpService.create(mol_jo); + + + dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成")); + dtl.setProcess_optid(SecurityUtils.getCurrentUserId()); + dtl.setProcess_time(DateUtil.now()); + dtl.setProcess_type(CHECKEnum.PROCESS_TYPE.code("实盘为准")); + dtl.setIs_process(true); + checkdtlBcpService.updateById(dtl); + List finish_list = checkdtlBcpService.list(new QueryWrapper().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"})); + //说明全部确认 + if (finish_list.size() == jo_mst.getDtl_num().intValue()) { + checkdtlBcpService.update(new UpdateWrapper().set("status", "99").eq("check_id", form.getString("check_id"))); + + jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成")); + jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + jo_mst.setConfirm_time(DateUtil.now()); + //解锁起点点位、仓位 + finish_list.stream() + .map(finish -> finish.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("inv_code", "").set("lock_type", "0").eq("struct_id", struct_id))); + } + this.updateById(jo_mst); + } + + @Override + public void delete(Long[] ids) { + for (Long id : ids) { + StIvtCheckmstBcp dao = this.getOne(new QueryWrapper().eq("check_id", id)); + dao.setIs_delete(true); + + //获取所有明细下的仓位解锁 + List dtl_list = checkdtlBcpService.list(new QueryWrapper().eq("check_id", id)); + dtl_list.stream() + .map(dtl -> dtl.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update(new UpdateWrapper().set("inv_code", "").set("lock_type", "0").eq("struct_id", struct_id))); + this.updateById(dao); + } + } + + @NotNull + private StIvtCheckmstBcp packageMstForm(StIvtCheckmstBcp checkmstYl, JSONObject whereJson) { + JSONArray rows = whereJson.getJSONArray("tableData"); + // 新增 + checkmstYl.setCheck_id(IdUtil.getStringId()); + checkmstYl.setCheck_code(CodeUtil.getNewCode("PD_CODE")); + checkmstYl.setBuss_type(whereJson.getString("check_type")); + checkmstYl.setCheck_type(checkmstYl.getBuss_type()); + + // 获取仓库信息 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("stor_id", whereJson.getString("stor_id")); + wrapper.eq("is_used", true); + StIvtBsrealstorattr bsrealDao = stIvtBsrealstorattrService.getOne(wrapper); + if (ObjectUtil.isEmpty(bsrealDao)) throw new BadRequestException("仓库不存在或未启用!"); + + checkmstYl.setStor_id(bsrealDao.getStor_id()); + checkmstYl.setStor_name(bsrealDao.getStor_name()); + checkmstYl.setDtl_num(BigDecimal.valueOf(rows.size())); + checkmstYl.setCreate_mode(CHECKEnum.CREATE_MODE.code("PC产生")); + checkmstYl.setStatus(CHECKEnum.BILL_STATUS.code("生成")); + checkmstYl.setCreate_id(SecurityUtils.getCurrentUserId()); + checkmstYl.setCreate_name(SecurityUtils.getCurrentNickName()); + checkmstYl.setCreate_time(DateUtil.now()); + checkmstYl.setIs_delete(false); + checkmstYl.setIs_upload(true); + // TODO 暂时写死 + checkmstYl.setSysdeptid("111"); + checkmstYl.setSyscompanyid("111"); + + checkmstYl.setRemark(whereJson.getString("remark")); + checkmstYl.setWorkshop_id(whereJson.getString("workshop_id")); + + return checkmstYl; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessdtlBcpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessdtlBcpService.java index ef401d9c..07f7b320 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessdtlBcpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessdtlBcpService.java @@ -1,7 +1,14 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dao.StIvtMoreorlessmstYl; import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessdtlBcp; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessmstBcp; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +20,14 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IStIvtMoreorlessdtlBcpService extends IService { + /** + * 主单据使用 + * @param row + * @param mst + * @return + */ + double create(JSONArray row, StIvtMoreorlessmstBcp mst); + + List getMlDtl(JSONObject form); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessmstBcpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessmstBcpService.java index 28c168b2..f74da294 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessmstBcpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/IStIvtMoreorlessmstBcpService.java @@ -1,7 +1,13 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess; -import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessmstBcp; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dto.MoreOrlessQuery; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessmstBcp; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +19,22 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IStIvtMoreorlessmstBcpService extends IService { + Object pageQuery(MoreOrlessQuery query, PageQuery page); + + void create(JSONObject jo); + + List getMlDtl(JSONObject map); + + void update(JSONObject map); + + /** + * 删除 + * @param ids + * { + * 主表id.. + * } + */ + void delete(Long[] ids); + + void confirm(JSONObject form); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessdtlBcp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessdtlBcp.java index 2adca32c..b1b6e8f3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessdtlBcp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessdtlBcp.java @@ -1,6 +1,8 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import lombok.Data; @@ -24,6 +26,7 @@ public class StIvtMoreorlessdtlBcp implements Serializable { /** * 损溢单明细id */ + @TableId private String mol_dtl_id; /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessmstBcp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessmstBcp.java index 8ac322da..655741ad 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessmstBcp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/StIvtMoreorlessmstBcp.java @@ -1,6 +1,8 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.util.Date; import java.io.Serializable; @@ -25,6 +27,7 @@ public class StIvtMoreorlessmstBcp implements Serializable { /** * 损溢单标识 */ + @TableId private String mol_id; /** @@ -80,7 +83,7 @@ public class StIvtMoreorlessmstBcp implements Serializable { /** * 创建时间 */ - private Date create_time; + private String create_time; /** * 审核人 @@ -95,7 +98,7 @@ public class StIvtMoreorlessmstBcp implements Serializable { /** * 审核时间 */ - private Date audit_time; + private String audit_time; /** * 确认人 @@ -110,7 +113,7 @@ public class StIvtMoreorlessmstBcp implements Serializable { /** * 确认时间 */ - private Date confirm_time; + private String confirm_time; /** * 备注 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessdtlBcpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessdtlBcpMapper.java index a01ff17b..ae0e4617 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessdtlBcpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessdtlBcpMapper.java @@ -1,8 +1,13 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.mapper; +import com.alibaba.fastjson.JSONObject; +import org.apache.ibatis.annotations.Param; import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessdtlBcp; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; +import java.util.Map; + /** *

* 损溢单明细表 Mapper 接口 @@ -13,4 +18,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface StIvtMoreorlessdtlBcpMapper extends BaseMapper { + List getMlDtl(@Param("map") JSONObject map); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessmstBcpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessmstBcpMapper.java index 20e01cbf..81bed01d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessmstBcpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/StIvtMoreorlessmstBcpMapper.java @@ -1,8 +1,14 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.mapper; +import org.apache.ibatis.annotations.Param; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dto.MoreOrlessQuery; import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessmstBcp; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; +import java.util.Map; + /** *

* 损溢单主表 Mapper 接口 @@ -13,4 +19,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface StIvtMoreorlessmstBcpMapper extends BaseMapper { + List getMstDetail(@Param("query") MoreOrlessQuery query, @Param("pageQuery") PageQuery pageQuery); + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessdtlBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessdtlBcpMapper.xml index 29f71136..136bd16f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessdtlBcpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessdtlBcpMapper.xml @@ -2,4 +2,20 @@ + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessmstBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessmstBcpMapper.xml index 7a992692..83d37e07 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessmstBcpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/dao/mapper/xml/StIvtMoreorlessmstBcpMapper.xml @@ -2,4 +2,58 @@ + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessdtlBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessdtlBcpServiceImpl.java index dd278663..0eb53f58 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessdtlBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessdtlBcpServiceImpl.java @@ -1,11 +1,33 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess.impl; -import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessdtlBcp; -import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.mapper.StIvtMoreorlessdtlBcpMapper; -import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessdtlBcpService; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +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 org.nl.common.utils.IdUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.storage_manage.IOSEnum; +import org.nl.wms.storage_manage.semimanage.MLEnum; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessdtlBcpService; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessdtlBcp; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessmstBcp; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.mapper.StIvtMoreorlessdtlBcpMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + /** *

* 损溢单明细表 服务实现类 @@ -17,4 +39,69 @@ import org.springframework.stereotype.Service; @Service public class StIvtMoreorlessdtlBcpServiceImpl extends ServiceImpl implements IStIvtMoreorlessdtlBcpService { + @Autowired + private IStIvtSectattrService sectattrService; // 库区服务 + + @Autowired + private IStIvtStructattrService structattrService; // 仓位服务 + + @Autowired + private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; // 载具服务 + + @Override + public List getMlDtl(JSONObject form) { + return this.baseMapper.getMlDtl(form); + } + + @Override + public double create(JSONArray rows, StIvtMoreorlessmstBcp mst) { + double total_qty = 0; + + if (rows.size() > 0 && ObjectUtil.isNotEmpty(mst)) { + // 先删除在插入 + this.remove(new QueryWrapper().eq("mol_id", mst.getMol_id())); + + for (int i = 0; i < rows.size(); i++) { + String mol_dtl_id = IdUtil.getStringId(); + StIvtMoreorlessdtlBcp row = rows.getJSONObject(i).toJavaObject(StIvtMoreorlessdtlBcp.class); + row.setMol_dtl_id(mol_dtl_id); + row.setMol_id(mst.getMol_id()); + row.setMol_code(mst.getMol_code()); + row.setSeq_no(BigDecimal.valueOf(i + 1)); + row.setPcsn(DateUtil.today()); + + // 获取库区信息 + QueryWrapper sect_wrapper = new QueryWrapper<>(); + sect_wrapper.eq("sect_id", row.getSect_id()); + sect_wrapper.eq("is_used", true); + StIvtSectattr sectDao = sectattrService.getOne(sect_wrapper); + if (ObjectUtil.isEmpty(sectDao)) throw new BadRequestException("库区不存在或未启用!"); + row.setSect_name(sectDao.getSect_name()); + // 获取仓位信息 + QueryWrapper struct_wrapper = new QueryWrapper<>(); + struct_wrapper.eq("struct_id", row.getStruct_id()); + struct_wrapper.eq("is_used", true); + StIvtStructattr structDao = structattrService.getOne(struct_wrapper); + if (ObjectUtil.isEmpty(structDao)) throw new BadRequestException("仓位不存在或未启用!"); + row.setStruct_name(structDao.getStruct_name()); + + // 获取载具信息 + MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleinfo::getStoragevehicle_code, row.getStoragevehicle_code()) + ); + + if (ObjectUtil.isEmpty(vehicleDao)) throw new BadRequestException("载具不存在!"); + + row.setStoragevehicle_id(vehicleDao.getStoragevehicle_id()); + row.setStoragevehicle_code(vehicleDao.getStoragevehicle_code()); + row.setStatus(MLEnum.DTL_STATUS.code("生成")); + this.save(row); + + //锁定货位 + structattrService.update(new UpdateWrapper().set("lock_type", IOSEnum.LOCK_TYPE.code("损溢锁")).set("inv_code",mst.getMol_code()).eq("struct_id", row.getStruct_id())); + } + } + return total_qty; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessmstBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessmstBcpServiceImpl.java index ca7737fd..0ff5ce1c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessmstBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/moveOrLess/impl/StIvtMoreorlessmstBcpServiceImpl.java @@ -1,10 +1,50 @@ package org.nl.wms.storage_manage.semimanage.service.moveOrLess.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +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 io.jsonwebtoken.lang.Assert; +import org.jetbrains.annotations.NotNull; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; +import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.storage_manage.CHECKEnum; +import org.nl.wms.storage_manage.IOSEnum; +import org.nl.wms.storage_manage.rawmanage.service.moveOrLess.dto.MoreOrlessQuery; +import org.nl.wms.storage_manage.semimanage.MLEnum; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessdtlBcpService; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessmstBcpService; +import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessdtlBcp; import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.StIvtMoreorlessmstBcp; import org.nl.wms.storage_manage.semimanage.service.moveOrLess.dao.mapper.StIvtMoreorlessmstBcpMapper; -import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessmstBcpService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp; +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.List; +import java.util.Map; /** *

@@ -17,4 +57,287 @@ import org.springframework.stereotype.Service; @Service public class StIvtMoreorlessmstBcpServiceImpl extends ServiceImpl implements IStIvtMoreorlessmstBcpService { + @Autowired + private IStIvtMoreorlessdtlBcpService iStIvtMoreorlessdtlBcpService; // 半成品明细服务 + + @Autowired + private IStIvtBsrealstorattrService stIvtBsrealstorattrService; // 实物属性服务 + + @Autowired + private IStIvtStructivtBcpService iStIvtStructivtBcpService; // 半成品库存服务 + + @Autowired + private IStIvtStructattrService structattrService; // 仓位服务 + + @Autowired + private IMdMeMaterialbaseService iMdMeMaterialbaseService; // 物料服务 + + @Autowired + protected IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务 + + @Override + public Object pageQuery(MoreOrlessQuery query, PageQuery pageQuery) { + Page page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); + List mst_detail = this.baseMapper.getMstDetail(query, pageQuery); + TableDataInfo build = TableDataInfo.build(mst_detail); + build.setTotalElements(page.getTotal()); + return build; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(JSONObject form) { + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + + // 调用主表 插入/更新方法 + StIvtMoreorlessmstBcp mlmstYl = packageMstForm(new StIvtMoreorlessmstBcp(), form); + this.save(mlmstYl); + + //调用明细表 插入方法 + iStIvtMoreorlessdtlBcpService.create(rows, mlmstYl); + + if (form.containsKey("auto_confirm") && form.getString("auto_confirm").equals("1")) { + JSONObject mst = new JSONObject(); + mst.put("mol_id", mlmstYl.getMol_id()); + this.confirm(mst); + } + } + + @Override + public List getMlDtl(JSONObject map) { + return iStIvtMoreorlessdtlBcpService.getMlDtl(map); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject form) { + Assert.notNull(new Object[]{form, form.get("mol_id")}, "请求参数不能为空"); + StIvtMoreorlessmstBcp mst = form.toJavaObject(StIvtMoreorlessmstBcp.class); + this.updateById(mst); + + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + // 调用明细表 插入/更新方法 + iStIvtMoreorlessdtlBcpService.create(rows, mst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + for (Long id : ids) { + StIvtMoreorlessmstBcp dao = this.getOne(new QueryWrapper().eq("mol_id", id)); + dao.setIs_delete(true); + this.updateById(dao); + + + // 解锁货位 + StIvtMoreorlessdtlBcp dtlDao = iStIvtMoreorlessdtlBcpService.getOne( + new QueryWrapper().lambda() + .eq(StIvtMoreorlessdtlBcp::getMol_id, id), + false + ); + + structattrService.update( + new StIvtStructattr() + .setInv_code("") + .setInv_type("") + .setInv_id("") + .setLock_type(IOSEnum.LOCK_TYPE.code("未锁定")), + new QueryWrapper().lambda() + .eq(StIvtStructattr::getStruct_id, dtlDao.getStruct_id()) + ); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(JSONObject whereJson) { + + String mol_id = (String) whereJson.get("mol_id"); + + StIvtMoreorlessmstBcp mst = this.getOne(new QueryWrapper().eq("mol_id", mol_id)); + + if (!mst.getStatus().equals(MLEnum.BILL_STATUS.code("生成"))) { + throw new BadRequestException("请选择单据状态为生成的损溢单!"); + } + + String mol_type = mst.getMol_type(); + + List dtl_list = iStIvtMoreorlessdtlBcpService.list(new QueryWrapper().eq("mol_id", mol_id)); + //更新库存 + if (mol_type.equals(MLEnum.MOL_TYPE.code("损"))) { + dtl_list.forEach(dtl -> { + StIvtStructivtBcp ivt = iStIvtStructivtBcpService.getOne(new QueryWrapper().eq("struct_id", dtl.getStruct_id()).eq("material_id", dtl.getMaterial_id())); + if (ObjectUtil.isEmpty(ivt)) { + throw new BadRequestException("未查询到相关库存!"); + } + BigDecimal canuse_qty = ivt.getCanuse_qty(); + BigDecimal mol_qty = dtl.getMol_qty(); + ivt.setCanuse_qty(NumberUtil.sub(canuse_qty, mol_qty)); + + // 更新载具扩展属性重量 + MdPbStoragevehicleext vehicleDao = iMdPbStoragevehicleextService.getOne( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, dtl.getStoragevehicle_code()) + ); + if (ObjectUtil.isNotEmpty(vehicleDao)) { + vehicleDao.setStorage_qty(NumberUtil.sub(vehicleDao.getStorage_qty(),mol_qty)); + iMdPbStoragevehicleextService.updateById(vehicleDao); + } + + //如果库存变为0则删除记录 + if (canuse_qty.compareTo(mol_qty) == 0 ) { + iStIvtStructivtBcpService.removeById(ivt.getStruct_id()); + + + // 更新载具扩展属性 - 释放载具对应物料关系 清空数量 + iMdPbStoragevehicleextService.update( + new MdPbStoragevehicleext() + .setMaterial_id("") + .setStorage_qty(BigDecimal.valueOf(0)), + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code,dtl.getStoragevehicle_code()) + ); + + // 更新货位 -- 清除载具号 + structattrService.update( + new StIvtStructattr() + .setStoragevehicle_code("") + .setInv_id("") + .setInv_type("") + .setInv_code(""), + new QueryWrapper().lambda() + .eq(StIvtStructattr::getStruct_id, ivt.getStruct_id()) + ); + } else { + iStIvtStructivtBcpService.updateById(ivt); + } + }); + } else { + dtl_list.forEach(dtl -> { + StIvtStructivtBcp ivt = iStIvtStructivtBcpService.getOne(new QueryWrapper().eq("struct_id", dtl.getStruct_id()).eq("material_id", dtl.getMaterial_id())); + BigDecimal mol_qty = dtl.getMol_qty(); + + if (ObjectUtil.isEmpty(ivt)) { + StIvtStructattr struct_jo = structattrService.getOne(new QueryWrapper().eq("struct_id", dtl.getStruct_id())); + //新增一条库存记录 + + MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(dtl.getMaterial_id()); + + iStIvtStructivtBcpService.save(StIvtStructivtBcp.builder() + .struct_id(dtl.getStruct_id()) + .struct_code(struct_jo.getStruct_code()) + .struct_name(struct_jo.getStruct_name()) + .material_id(dtl.getMaterial_id()) + .quality_scode(dtl.getQuality_scode()) + .pcsn(dtl.getPcsn()) + .ivt_level(dtl.getIvt_level()) + .is_active(dtl.getIs_active()) + .canuse_qty(mol_qty) + .qty_unit_id(dtl.getQty_unit_id()) + .instorage_time(DateUtil.now()) + .stor_id(mst.getStor_id()) + .workshop_id(mst.getProduct_area()) + .is_pick(false) + .unit_weight(materDao.getNet_weight()) + .build() + ); + + // 更新仓位 + struct_jo.setStoragevehicle_code(dtl.getStoragevehicle_code()); + structattrService.updateById(struct_jo); + + // 更新载具对应物料关系、数量 + MdPbStoragevehicleext vehicleDao = iMdPbStoragevehicleextService.getOne( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, dtl.getStoragevehicle_code()) + ); + if (ObjectUtil.isNotEmpty(vehicleDao)) { + vehicleDao.setStorage_qty(mol_qty); + vehicleDao.setMaterial_id(dtl.getMaterial_id()); + iMdPbStoragevehicleextService.updateById(vehicleDao); + } + + } else { + BigDecimal canuse_qty = ivt.getCanuse_qty(); + ivt.setCanuse_qty(NumberUtil.add(canuse_qty, mol_qty)); + + // 更新载具扩展属性 - 数量 + MdPbStoragevehicleext vehicleDao = iMdPbStoragevehicleextService.getOne( + new QueryWrapper().lambda() + .eq(MdPbStoragevehicleext::getStoragevehicle_code, dtl.getStoragevehicle_code()) + ); + + if (ObjectUtil.isNotEmpty(vehicleDao)) { + vehicleDao.setStorage_qty(NumberUtil.add(vehicleDao.getStorage_qty(), dtl.getMol_qty())); + iMdPbStoragevehicleextService.updateById(vehicleDao); + } + + iStIvtStructivtBcpService.updateById(ivt); + } + + //更新明细状态 + dtl.setStatus(MLEnum.DTL_STATUS.code("确认完成")); + iStIvtMoreorlessdtlBcpService.updateById(dtl); + }); + } + + dtl_list.stream().map(dtl -> dtl.getStruct_id()) + .distinct() + .forEach(struct_id -> structattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .set(StIvtStructattr::getInv_code, "") + .eq(StIvtStructattr::getStruct_id, struct_id)) + ); + + //更新损溢单主表 + mst.setStatus(MLEnum.BILL_STATUS.code("完成")); + mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + mst.setConfirm_time(DateUtil.now()); + this.updateById(mst); + } + + @NotNull + private StIvtMoreorlessmstBcp packageMstForm(StIvtMoreorlessmstBcp mlmstYl, JSONObject whereJson) { + JSONArray rows = whereJson.getJSONArray("tableData"); + // 新增 + mlmstYl.setMol_id(IdUtil.getStringId()); + mlmstYl.setMol_code(CodeUtil.getNewCode("MOL_CODE")); + if (StrUtil.isEmpty(whereJson.getString("buss_type"))) { + mlmstYl.setBuss_type(MLEnum.BILL_TYPE.code("普通损溢")); + mlmstYl.setMol_inv_type(MLEnum.BILL_TYPE.code("普通损溢")); + } else { + mlmstYl.setBuss_type(whereJson.getString("buss_type")); + mlmstYl.setMol_inv_type(whereJson.getString("buss_type")); + } + + mlmstYl.setMol_type(whereJson.getString("mol_type")); + + // 获取仓库信息 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("stor_id", whereJson.getString("stor_id")); + wrapper.eq("is_used", true); + StIvtBsrealstorattr bsrealDao = stIvtBsrealstorattrService.getOne(wrapper); + if (ObjectUtil.isEmpty(bsrealDao)) throw new BadRequestException("仓库不存在或未启用!"); + + mlmstYl.setStor_id(bsrealDao.getStor_id()); + mlmstYl.setStor_name(bsrealDao.getStor_name()); + mlmstYl.setDtl_num(BigDecimal.valueOf(rows.size())); + mlmstYl.setCreate_mode(CHECKEnum.CREATE_MODE.code("PC产生")); + mlmstYl.setStatus(CHECKEnum.BILL_STATUS.code("生成")); + mlmstYl.setCreate_id(SecurityUtils.getCurrentUserId()); + mlmstYl.setCreate_name(SecurityUtils.getCurrentNickName()); + mlmstYl.setCreate_time(DateUtil.now()); + mlmstYl.setIs_delete(false); + // TODO 暂时写死 + mlmstYl.setSysdeptid("111"); + mlmstYl.setSyscompanyid("111"); + + mlmstYl.setRemark(whereJson.getString("remark")); + + return mlmstYl; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframedtlBcpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframedtlBcpService.java new file mode 100644 index 00000000..41d21612 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframedtlBcpService.java @@ -0,0 +1,25 @@ +package org.nl.wms.storage_manage.semimanage.service.shutFrame; + +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframedtlBcp; + +/** + *

+ * 拆拼盘明细表 服务类 + *

+ * + * @author generator + * @since 2023-05-31 + */ +public interface IStIvtShutframedtlBcpService extends IService { + + /** + * 主单据使用 + * @param row + * @param shutframeinv_id + * @return + */ + int create(JSONArray row, String shutframeinv_id); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java index c0b49000..2cbfe111 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/IStIvtShutframeinvBcpService.java @@ -1,7 +1,13 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframeinvBcp; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dto.ShutQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +19,22 @@ import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframe */ public interface IStIvtShutframeinvBcpService extends IService { + void create (JSONObject jo); + + void update(JSONObject map); + + void delete(Long[] ids); + + /** + * 分页查询 + * @param query,page / + * @return JSONObject + */ + Object pageQuery(ShutQuery query, PageQuery page); + + List getBillDtl(JSONObject jo); + + void confirm(JSONObject jo); + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframedtlBcp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframedtlBcp.java new file mode 100644 index 00000000..86882fbd --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframedtlBcp.java @@ -0,0 +1,191 @@ +package org.nl.wms.storage_manage.semimanage.service.shutFrame.dao; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

+ * 拆拼盘明细表 + *

+ * + * @author generator + * @since 2023-05-31 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("st_ivt_shutframedtl_bcp") +public class StIvtShutframedtlBcp implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 拆拼单明细标识 + */ + private String shutframeinvdtl_id; + + /** + * 拆拼单标识 + */ + private String shutframeinv_id; + + /** + * 明细序号 + */ + private BigDecimal seqno; + + /** + * 转出库区标识 + */ + private String turnout_sect_id; + + /** + * 转出库区编码 + */ + private String turnout_sect_code; + + /** + * 转出库区名称 + */ + private String turnout_sect_name; + + /** + * 转出仓位标识 + */ + private String turnout_struct_id; + + /** + * 转出仓位编码 + */ + private String turnout_struct_code; + + /** + * 转出仓位名称 + */ + private String turnout_struct_name; + + /** + * 转出载具标识 + */ + private String storagevehicle_id; + + /** + * 转出载具编码 + */ + private String storagevehicle_code; + + /** + * 物料标识 + */ + private String material_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 品质类型 + */ + private String quality_scode; + + /** + * 库存等级 + */ + private String ivt_level; + + /** + * 是否可用 + */ + private String is_active; + + /** + * 数量计量单位标识 + */ + private String qty_unit_id; + + /** + * 数量计量单位名称 + */ + private String qty_unit_name; + + /** + * 数量 + */ + private BigDecimal qty; + + /** + * 实际数量 + */ + private BigDecimal fact_qty; + + /** + * 单重 + */ + private BigDecimal unit_weight; + + /** + * 转入库区标识 + */ + private String turnin_sect_id; + + /** + * 转入库区编码 + */ + private String turnin_sect_code; + + /** + * 转入库区名称 + */ + private String turnin_sect_name; + + /** + * 转入仓位标识 + */ + private String turnin_struct_id; + + /** + * 转入仓位编码 + */ + private String turnin_struct_code; + + /** + * 转入仓位名称 + */ + private String turnin_struct_name; + + /** + * 转入载具标识 + */ + private String storagevehicle_id_in; + + /** + * 转入载具编码 + */ + private String storagevehicle_code_in; + + /** + * 执行状态 + */ + private String work_status; + + /** + * 任务标识 + */ + private String task_id; + + /** + * 是否已下发 + */ + private Boolean is_issued; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframeinvBcp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframeinvBcp.java index 5ba12882..cf5a035c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframeinvBcp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/StIvtShutframeinvBcp.java @@ -1,12 +1,13 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.dao; -import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import java.util.Date; -import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.math.BigDecimal; + /** *

* 拆拼单主表 @@ -25,6 +26,7 @@ public class StIvtShutframeinvBcp implements Serializable { /** * 拆拼单标识 */ + @TableId private String shutframeinv_id; /** @@ -105,7 +107,7 @@ public class StIvtShutframeinvBcp implements Serializable { /** * 创建时间 */ - private Date create_time; + private String create_time; /** * 修改人 @@ -120,7 +122,7 @@ public class StIvtShutframeinvBcp implements Serializable { /** * 修改时间 */ - private Date update_time; + private String update_time; /** * 确认人 @@ -135,7 +137,7 @@ public class StIvtShutframeinvBcp implements Serializable { /** * 确认时间 */ - private Date confirm_time; + private String confirm_time; /** * 确认说明 @@ -160,7 +162,7 @@ public class StIvtShutframeinvBcp implements Serializable { /** * 车间标识 */ - private String product_area; + private String workshop_id; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/StIvtShutframedtlBcpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/StIvtShutframedtlBcpMapper.java new file mode 100644 index 00000000..a0acd3c5 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/StIvtShutframedtlBcpMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframedtlBcp; + +/** + *

+ * 拆拼盘明细表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-31 + */ +public interface StIvtShutframedtlBcpMapper extends BaseMapper { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/StIvtShutframeinvBcpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/StIvtShutframeinvBcpMapper.java index 58c3b881..c6a66b8a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/StIvtShutframeinvBcpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/StIvtShutframeinvBcpMapper.java @@ -1,7 +1,13 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.nl.common.domain.query.PageQuery; import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframeinvBcp; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dto.ShutQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +19,5 @@ import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframe */ public interface StIvtShutframeinvBcpMapper extends BaseMapper { + List getMstDetail(@Param("query")ShutQuery query, @Param("pageQuery") PageQuery pageQuery); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframedtlBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframedtlBcpMapper.xml new file mode 100644 index 00000000..0b101277 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframedtlBcpMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml index a6f76228..a6cb19c9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dao/mapper/xml/StIvtShutframeinvBcpMapper.xml @@ -1,5 +1,37 @@ - + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dto/ShutQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dto/ShutQuery.java new file mode 100644 index 00000000..fce35e4d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/dto/ShutQuery.java @@ -0,0 +1,35 @@ +package org.nl.wms.storage_manage.semimanage.service.shutFrame.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.storage_manage.rawmanage.service.check.dao.StIvtCheckmstYl; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframeinvBcp; + +/* + * @author ZZQ + * @Date 2023/5/4 19:49 + */ +@Data +public class ShutQuery extends BaseQuery { + + + private String stor_id; + + private String bill_status; + + private String bill_code; + + private String material_search; + + private Boolean is_delete = false; + + + @Override + public void paramMapping() { + super.doP.put("bill_code", QParam.builder().k(new String[]{"bill_code"}).type(QueryTEnum.LK).build()); + } + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframedtlBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframedtlBcpServiceImpl.java new file mode 100644 index 00000000..c3fbefba --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframedtlBcpServiceImpl.java @@ -0,0 +1,103 @@ +package org.nl.wms.storage_manage.semimanage.service.shutFrame.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +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.apache.commons.lang3.StringUtils; +import org.nl.common.utils.IdUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.storage_manage.IOSEnum; +import org.nl.wms.storage_manage.SHUTEnum; +import org.nl.wms.storage_manage.rawmanage.service.iostorInv.dao.StIvtIostorinvdtlYl; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.IStIvtShutframedtlBcpService; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframedtlBcp; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.mapper.StIvtShutframedtlBcpMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.LinkedList; + +/** + *

+ * 拆拼盘明细表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-31 + */ +@Service +public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl implements IStIvtShutframedtlBcpService { + + @Autowired + private IStIvtStructattrService structattrService; + + @Override + public int create(JSONArray rows, String shutframeinv_id) { + StIvtStructattr first_struct = null; + StIvtStructattr last_struct = null; + int total_qty = 1; + + if (rows.size() > 0 && StringUtils.isNotEmpty(shutframeinv_id)) { + // 先删除在插入 + this.remove(new QueryWrapper().eq("shutframeinv_id", shutframeinv_id)); + LinkedList struct_list = new LinkedList<>(); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + if (ObjectUtil.isEmpty(struct_list)) { + struct_list.addFirst(row.getString("struct_code")); + first_struct = structattrService.getOne(new QueryWrapper().eq("struct_code", row.getString("struct_code"))); + continue; + } else { + if (!struct_list.contains(row.getString("struct_code"))) { + struct_list.addLast(row.getString("struct_code")); + if (ObjectUtil.isEmpty(last_struct)) { + last_struct = structattrService.getOne(new QueryWrapper().eq("struct_code", row.getString("struct_code"))); + } + if (struct_list.size() > 2) { + throw new BadRequestException("拼盘数组数据异常!"); + } + } else { + continue; + } + } + + StIvtShutframedtlBcp dtl = new StIvtShutframedtlBcp(); + dtl.setShutframeinvdtl_id(IdUtil.getStringId()); + dtl.setShutframeinv_id(shutframeinv_id); + dtl.setSeqno(BigDecimal.valueOf(total_qty)); + dtl.setTurnout_sect_id(last_struct.getSect_id()); + dtl.setTurnout_sect_code(last_struct.getSect_code()); + dtl.setTurnout_sect_name(last_struct.getSect_name()); + dtl.setTurnout_struct_id(last_struct.getStruct_id()); + dtl.setTurnout_struct_code(last_struct.getStruct_code()); + dtl.setTurnout_struct_name(last_struct.getStruct_name()); + dtl.setStoragevehicle_code(row.getString("storagevehicle_code")); + dtl.setMaterial_id(row.getString("material_id")); + dtl.setPcsn(row.getString("pcsn")); + dtl.setQty_unit_id(row.getString("qty_unit_id")); + dtl.setQty_unit_name(row.getString("qty_unit_name")); + dtl.setQty(row.getBigDecimal("canuse_qty")); + dtl.setFact_qty(row.getBigDecimal("canuse_qty")); + dtl.setUnit_weight(row.getBigDecimal("unit_weight")); + dtl.setTurnin_sect_id(first_struct.getSect_id()); + dtl.setTurnin_sect_code(first_struct.getSect_code()); + dtl.setTurnin_sect_name(first_struct.getSect_name()); + dtl.setTurnin_struct_id(first_struct.getStruct_id()); + dtl.setTurnin_struct_code(first_struct.getStruct_code()); + dtl.setTurnin_struct_name(first_struct.getStruct_name()); + dtl.setWork_status(SHUTEnum.WORK_STATUS.code("未生成")); + dtl.setIs_issued(true); + + this.save(dtl); + total_qty++; + } + } + return total_qty--; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java index af01fe0d..24d5f290 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/shutFrame/impl/StIvtShutframeinvBcpServiceImpl.java @@ -1,12 +1,45 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +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 com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import io.jsonwebtoken.lang.Assert; +import org.jetbrains.annotations.NotNull; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.MapOf; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; +import org.nl.wms.storage_manage.IOSEnum; +import org.nl.wms.storage_manage.SHUTEnum; +import org.nl.wms.storage_manage.rawmanage.service.iostorInv.dao.StIvtIostorinvYl; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.IStIvtShutframedtlBcpService; import org.nl.wms.storage_manage.semimanage.service.shutFrame.IStIvtShutframeinvBcpService; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframedtlBcp; import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.StIvtShutframeinvBcp; import org.nl.wms.storage_manage.semimanage.service.shutFrame.dao.mapper.StIvtShutframeinvBcpMapper; +import org.nl.wms.storage_manage.semimanage.service.shutFrame.dto.ShutQuery; +import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp; +import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.mapper.StIvtStructivtBcpMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + /** *

* 拆拼单主表 服务实现类 @@ -18,4 +51,149 @@ import org.springframework.stereotype.Service; @Service public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl implements IStIvtShutframeinvBcpService { + @Autowired + private IStIvtShutframedtlBcpService shutframedtlBcpService; + @Autowired + private IStIvtBsrealstorattrService stIvtBsrealstorattrService; + @Autowired + private IStIvtStructivtBcpService structivtBcpService; + @Autowired + private StIvtStructivtBcpMapper bcpMapper; + + @Override + public Object pageQuery(ShutQuery query, PageQuery pageQuery) { + Page page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); + List mst_detail = this.baseMapper.getMstDetail(query, pageQuery); + TableDataInfo build = TableDataInfo.build(mst_detail); + build.setTotalElements(page.getTotal()); + return build; + } + + @Override + public void confirm(JSONObject form) { + Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空"); + + List list = shutframedtlBcpService.list(new QueryWrapper().eq("shutframeinv_id", form.getString("shutframeinv_id"))); + list.forEach(dtl -> { + String material_id = dtl.getMaterial_id(); + String turnin_struct_id = dtl.getTurnin_struct_id(); + String turnout_struct_id = dtl.getTurnout_struct_id(); + StIvtStructivtBcp in_ivt = structivtBcpService.getOne(new QueryWrapper().eq("struct_id", turnin_struct_id).eq("material_id", material_id)); + if (ObjectUtil.isEmpty(in_ivt)) { + throw new BadRequestException("库存不能为空!"); + } + in_ivt.setCanuse_qty(NumberUtil.add(in_ivt.getCanuse_qty(), dtl.getFact_qty())); + structivtBcpService.remove(new QueryWrapper().eq("struct_id", turnout_struct_id)); + structivtBcpService.updateById(in_ivt); + + dtl.setWork_status(SHUTEnum.WORK_STATUS.code("完成")); + shutframedtlBcpService.updateById(dtl); + }); + + StIvtShutframeinvBcp mst = this.getById(form.getString("shutframeinv_id")); + mst.setConfirm_optid(SecurityUtils.getCurrentUserId()); + mst.setConfirm_optname(SecurityUtils.getCurrentNickName()); + mst.setConfirm_time(DateUtil.now()); + mst.setBill_status(SHUTEnum.BILL_STATUS.code("完成")); + + + } + + @Override + public List getBillDtl(JSONObject jo) { + List list = shutframedtlBcpService.list(new QueryWrapper().eq("shutframeinv_id", jo.getString("shutframeinv_id"))); + List ivt_list = bcpMapper.getStructIvtInfo(MapOf.of("struct_code", list.get(0).getTurnin_struct_code())); + List ivt_list2 = bcpMapper.getStructIvtInfo(MapOf.of("struct_code", list.get(0).getTurnout_struct_code())); + ivt_list.addAll(ivt_list2); + return ivt_list; + } + + @Override + public void delete(Long[] ids) { + for (Long id : ids) { + StIvtShutframeinvBcp dao = this.getOne(new QueryWrapper().eq("shutframeinv_id", id)); + dao.setIs_delete(true); + + this.updateById(dao); + } + } + + @Override + public void update(JSONObject form) { + Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空"); + StIvtShutframeinvBcp mst = form.toJavaObject(StIvtShutframeinvBcp.class); + mst.setUpdate_optid(SecurityUtils.getCurrentUserId()); + mst.setUpdate_optname(SecurityUtils.getCurrentNickName()); + mst.setUpdate_time(DateUtil.now()); + + + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + // 调用明细表 插入/更新方法 + int i = shutframedtlBcpService.create(rows, mst.getShutframeinv_id()); + mst.setDetail_count(BigDecimal.valueOf(i)); + this.updateById(mst); + } + + @Override + public void create(JSONObject form) { + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + + // 调用主表 插入/更新方法 + StIvtShutframeinvBcp shutframeinvBcp = packageMstForm(new StIvtShutframeinvBcp(), form, false); + + // 调用明细表 插入/更新方法 + int i = shutframedtlBcpService.create(rows, shutframeinvBcp.getShutframeinv_id()); + + // 插入主表 + shutframeinvBcp.setDetail_count(BigDecimal.valueOf(i)); + this.save(shutframeinvBcp); + } + + + @NotNull + private StIvtShutframeinvBcp packageMstForm(StIvtShutframeinvBcp shutMst, JSONObject whereJson, Boolean isUpdate) { + if (!isUpdate) { + // 新增 + shutMst.setShutframeinv_id(IdUtil.getStringId()); + shutMst.setBill_code(CodeUtil.getNewCode("CPP_CODE")); + shutMst.setBusi_classs_code(SHUTEnum.BUSI_CLASSS_CODE.code("拼盘")); + shutMst.setBuss_type(whereJson.getString("bill_type")); + shutMst.setBill_type(shutMst.getBuss_type()); + shutMst.setBiz_date(whereJson.getString("biz_date")); + shutMst.setBill_status(IOSEnum.BILL_STATUS.code("生成")); + shutMst.setCreate_id(SecurityUtils.getCurrentUserId()); + shutMst.setCreate_name(SecurityUtils.getCurrentNickName()); + shutMst.setCreate_time(DateUtil.now()); + shutMst.setIs_delete(false); + // TODO 暂时写死 + shutMst.setSysdeptid("111"); + shutMst.setSyscompanyid("111"); + + } else { + // 修改 + shutMst.setUpdate_optid(SecurityUtils.getCurrentUserId()); + shutMst.setUpdate_optname(SecurityUtils.getCurrentNickName()); + shutMst.setUpdate_time(DateUtil.now()); + } + + shutMst.setBiz_date(whereJson.getString("biz_date").substring(0, 10)); + // 获取仓库信息 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("stor_id", whereJson.getString("stor_id")); + wrapper.eq("is_used", true); + StIvtBsrealstorattr bsrealDao = stIvtBsrealstorattrService.getOne(wrapper); + if (ObjectUtil.isEmpty(bsrealDao)) throw new BadRequestException("仓库不存在或未启用!"); + + shutMst.setStor_id(bsrealDao.getStor_id()); + shutMst.setStor_code(bsrealDao.getStor_code()); + shutMst.setStor_name(bsrealDao.getStor_name()); + shutMst.setTotal_qty(whereJson.getBigDecimal("total_qty")); + shutMst.setRemark(whereJson.getString("remark")); + shutMst.setWorkshop_id(whereJson.getString("workshop_id")); + + return shutMst; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/StIvtStructivtBcp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/StIvtStructivtBcp.java index 088eb0dd..0fdd5108 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/StIvtStructivtBcp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/StIvtStructivtBcp.java @@ -1,6 +1,8 @@ package org.nl.wms.storage_manage.semimanage.service.structIvt.dao; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.util.Date; import java.io.Serializable; @@ -28,6 +30,7 @@ public class StIvtStructivtBcp implements Serializable { /** * 仓位标识 */ + @TableId private String struct_id; /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java index 63c18ed2..541faad9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/StIvtStructivtBcpMapper.java @@ -26,5 +26,7 @@ public interface StIvtStructivtBcpMapper extends BaseMapper { List getBcpIvtInfo(@Param("map") JSONObject map); + List getStructIvtInfo(@Param("map") Map map); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml index 2d7c9a88..1576c315 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/structIvt/dao/mapper/xml/StIvtStructivtBcpMapper.xml @@ -84,4 +84,29 @@ + + diff --git a/mes/qd/src/views/wms/storage_manage/product/productCheck/AddDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productCheck/AddDialog.vue index 1c88a396..583c0eab 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productCheck/AddDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productCheck/AddDialog.vue @@ -11,22 +11,24 @@ > - + - 保存 + 保存 关闭 - - - + + + - + @@ -57,7 +59,7 @@ :disabled="crud.status.view > 0" > - + - +
@@ -93,7 +96,7 @@ - + - - - - - - - - - - + + + + + + + + + - + + diff --git a/mes/qd/src/views/wms/storage_manage/product/productCheck/check.js b/mes/qd/src/views/wms/storage_manage/product/productCheck/check.js index 57ee1267..e29e49af 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productCheck/check.js +++ b/mes/qd/src/views/wms/storage_manage/product/productCheck/check.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function add(data) { return request({ - url: 'api/check', + url: 'api/stIvtCheckmstCp', method: 'post', data }) @@ -10,57 +10,62 @@ export function add(data) { export function del(ids) { return request({ - url: 'api/check/', - method: 'delete', + url: 'api/stIvtCheckmstCp/delete', + method: 'post', data: ids }) } export function edit(data) { return request({ - url: 'api/check', - method: 'put', - data - }) -} - -export function getOutBillDtl(params) { - return request({ - url: '/api/check/getOutBillDtl', - method: 'get', - params - }) -} -export function getOutBillDtl2(params) { - return request({ - url: '/api/check/getOutBillDtl2', - method: 'get', - params - }) -} -export function getOutBillDis(params) { - return request({ - url: '/api/check/getOutBillDis', - method: 'get', - params - }) -} -export function getInvTypes() { - return request({ - url: '/api/check/getInvTypes', - method: 'get' - }) -} -export function insertDtl(data) { - return request({ - url: '/api/check/insertDtl', + url: 'api/stIvtCheckmstCp/update', method: 'post', data }) } + +export function getCheckDtl(data) { + return request({ + url: '/api/stIvtCheckmstCp/getCheckDtl', + method: 'post', + data + }) +} + +export function getOutBillDtl2(params) { + return request({ + url: '/api/stIvtCheckmstCp/getOutBillDtl2', + method: 'get', + params + }) +} + +export function getOutBillDis(params) { + return request({ + url: '/api/stIvtCheckmstCp/getOutBillDis', + method: 'get', + params + }) +} + +export function getInvTypes() { + return request({ + url: '/api/stIvtCheckmstCp/getInvTypes', + method: 'get' + }) +} + +export function insertDtl(data) { + return request({ + url: '/api/stIvtCheckmstCp/insertDtl', + method: 'post', + data + }) +} + export function getStructIvt(params) { return request({ - url: '/api/check/getStructIvt', + url: '/api/stIvtCheckmstCp/getStructIvt', method: 'get', params }) @@ -68,37 +73,73 @@ export function getStructIvt(params) { export function confirm(data) { return request({ - url: '/api/check/confirm', + url: '/api/stIvtCheckmstCp/confirm', method: 'post', data }) } + export function handdown(data) { return request({ - url: '/api/check/handdown', + url: '/api/stIvtCheckmstCp/handdown', method: 'post', data }) } + export function saveCheck(data) { return request({ - url: '/api/check/saveCheck', + url: '/api/stIvtCheckmstCp/saveCheck', method: 'post', data }) } + export function process0(data) { return request({ - url: '/api/check/process0', + url: '/api/stIvtCheckmstCp/process0', method: 'post', data }) } + export function process1(data) { return request({ - url: '/api/check/process1', + url: '/api/stIvtCheckmstCp/process1', method: 'post', data }) } -export default { add, edit, del, getOutBillDtl, getStructIvt, getOutBillDtl2, confirm, getInvTypes, saveCheck, process0, getOutBillDis, process1 } + +export function getBucketrecord(data) { + return request({ + url: '/api/stIvtCheckmstCp/getBucketrecord', + method: 'post', + data + }) +} + +export function processBox(data) { + return request({ + url: '/api/stIvtCheckmstCp/processBox', + method: 'post', + data + }) +} + +export default { + add, + edit, + del, + getCheckDtl, + getStructIvt, + getOutBillDtl2, + confirm, + getInvTypes, + saveCheck, + process0, + getOutBillDis, + process1, + getBucketrecord, + processBox +} diff --git a/mes/qd/src/views/wms/storage_manage/product/productCheck/index.vue b/mes/qd/src/views/wms/storage_manage/product/productCheck/index.vue index 32a7673d..9766e95f 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productCheck/index.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productCheck/index.vue @@ -78,7 +78,7 @@ @change="crud.toQuery" > - +
@@ -173,32 +173,32 @@ /> - - + + - - - - - - - + + + + + + + - + - - - + + + + diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js b/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js index 57dccafb..e8674222 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js @@ -96,6 +96,14 @@ export function confirm(data) { }) } +export function cancelConfirmvehicle(data) { + return request({ + url: '/api/productIn/cancelConfirmvehicle', + method: 'post', + data + }) +} + export default { add, edit, @@ -108,5 +116,6 @@ export default { divStruct, unDivStruct, setPoint, - confirm + confirm, + cancelConfirmvehicle } diff --git a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue index c1062b1f..d75d7b28 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue @@ -409,7 +409,7 @@ export default { this.nowrow = row }, async queryStruct() { - if (!this.form.mol_type) {structShow + if (!this.form.mol_type) { this.crud.notify('请先选择损溢类型!', CRUD.NOTIFICATION_TYPE.INFO) return } diff --git a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/index.vue b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/index.vue index a810d3ce..36abb069 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/index.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/index.vue @@ -147,7 +147,7 @@ - + diff --git a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/AddDialog.vue b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/AddDialog.vue index 0d0c01b6..8664bc20 100644 --- a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/AddDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/AddDialog.vue @@ -11,22 +11,42 @@ > - + - 保存 + 保存 关闭 - - - + + + - + + + + + + + @@ -57,7 +77,7 @@ :disabled="crud.status.view > 0" > - + - +
@@ -93,7 +114,7 @@ - + - - - - - - - - - - + + + + + + + + + - + + diff --git a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/check.js b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/check.js index 57ee1267..d3960fc4 100644 --- a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/check.js +++ b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/check.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function add(data) { return request({ - url: 'api/check', + url: 'api/bcp/check', method: 'post', data }) @@ -10,57 +10,62 @@ export function add(data) { export function del(ids) { return request({ - url: 'api/check/', - method: 'delete', + url: 'api/bcp/check/delete', + method: 'post', data: ids }) } export function edit(data) { return request({ - url: 'api/check', - method: 'put', - data - }) -} - -export function getOutBillDtl(params) { - return request({ - url: '/api/check/getOutBillDtl', - method: 'get', - params - }) -} -export function getOutBillDtl2(params) { - return request({ - url: '/api/check/getOutBillDtl2', - method: 'get', - params - }) -} -export function getOutBillDis(params) { - return request({ - url: '/api/check/getOutBillDis', - method: 'get', - params - }) -} -export function getInvTypes() { - return request({ - url: '/api/check/getInvTypes', - method: 'get' - }) -} -export function insertDtl(data) { - return request({ - url: '/api/check/insertDtl', + url: 'api/bcp/check/update', method: 'post', data }) } + +export function getCheckDtl(data) { + return request({ + url: '/api/bcp/check/getCheckDtl', + method: 'post', + data + }) +} + +export function getOutBillDtl2(params) { + return request({ + url: '/api/bcp/check/getOutBillDtl2', + method: 'get', + params + }) +} + +export function getOutBillDis(params) { + return request({ + url: '/api/bcp/check/getOutBillDis', + method: 'get', + params + }) +} + +export function getInvTypes() { + return request({ + url: '/api/bcp/check/getInvTypes', + method: 'get' + }) +} + +export function insertDtl(data) { + return request({ + url: '/api/bcp/check/insertDtl', + method: 'post', + data + }) +} + export function getStructIvt(params) { return request({ - url: '/api/check/getStructIvt', + url: '/api/bcp/check/getStructIvt', method: 'get', params }) @@ -68,37 +73,55 @@ export function getStructIvt(params) { export function confirm(data) { return request({ - url: '/api/check/confirm', + url: '/api/bcp/check/confirm', method: 'post', data }) } + export function handdown(data) { return request({ - url: '/api/check/handdown', + url: '/api/bcp/check/handdown', method: 'post', data }) } + export function saveCheck(data) { return request({ - url: '/api/check/saveCheck', + url: '/api/bcp/check/saveCheck', method: 'post', data }) } + export function process0(data) { return request({ - url: '/api/check/process0', + url: '/api/bcp/check/process0', method: 'post', data }) } + export function process1(data) { return request({ - url: '/api/check/process1', + url: '/api/bcp/check/process1', method: 'post', data }) } -export default { add, edit, del, getOutBillDtl, getStructIvt, getOutBillDtl2, confirm, getInvTypes, saveCheck, process0, getOutBillDis, process1 } + +export default { + add, + edit, + del, + getCheckDtl, + getStructIvt, + getOutBillDtl2, + confirm, + getInvTypes, + saveCheck, + process0, + getOutBillDis, + process1 +} diff --git a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/index.vue b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/index.vue index 5f3fc56e..5dbcc134 100644 --- a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/index.vue +++ b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductCheck/index.vue @@ -78,7 +78,7 @@ @change="crud.toQuery" > - +
@@ -173,32 +173,32 @@ />
- - + + - - - - - - - + + + + + + + - + - - - + + +