Browse Source

feat: 改切管理

master
李永德 6 days ago
parent
commit
13f90b7736
  1. 11
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtProductplandtlService.java
  2. 19
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtProductplanmstService.java
  3. 72
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtProductplandtl.java
  4. 123
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtProductplanmst.java
  5. 11
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplandtlMapper.java
  6. 4
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplandtlMapper.xml
  7. 19
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplanmstMapper.java
  8. 92
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplanmstMapper.xml
  9. 17
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtProductplandtlServiceImpl.java
  10. 31
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtProductplanmstServiceImpl.java
  11. 12
      lms/nladmin-system/src/main/java/org/nl/wms/st/instor/rest/RecutPlanController.java
  12. 6
      lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/RecutPlanService.java
  13. 23
      lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/dto/RecutPlanPageParam.java
  14. 49
      lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java
  15. 224
      lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/RecutPlanServiceImpl.java
  16. 5
      lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTPLAN.wql

11
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtProductplandtlService.java

@ -0,0 +1,11 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplandtl;
/**
* @Author: lyd
* @Date: 2025/7/17
*/
public interface IStIvtProductplandtlService extends IService<StIvtProductplandtl> {
}

19
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtProductplanmstService.java

@ -0,0 +1,19 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplanmst;
import org.nl.wms.st.instor.service.dto.RecutPlanPageParam;
import java.util.Map;
/**
* @Author: lyd
* @Date: 2025/7/17
*/
public interface IStIvtProductplanmstService extends IService<StIvtProductplanmst> {
IPage<StIvtProductplanmst> returnCutplanPage(IPage<StIvtProductplanmst> pages, RecutPlanPageParam param);
JSONArray getOutBillDtl(Map param);
}

72
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtProductplandtl.java

@ -0,0 +1,72 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Author: lyd
* @Date: 2025/7/17
*/
@Data
@TableName("st_ivt_productplandtl")
public class StIvtProductplandtl implements Serializable {
/**
* 改切计划明细标识
*/
@TableId
private String plandtl_id;
/**
* 改切计划标识
*/
private String plan_id;
/**
* 明细序号
*/
private BigDecimal seq_no;
/**
* 物料标识
*/
private String material_id;
/**
* 批次
*/
private String pcsn;
/**
* 木箱唯一码
*/
private String package_box_sn;
/**
* 数量计量单位标识
*/
private String qty_unit_id;
/**
* 数量计量单位名称
*/
private String qty_unit_name;
/**
* 重量
*/
private BigDecimal qty;
/**
* 状态
*/
private String status;
/**
* 不合格描述
*/
private String remark;
}

123
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtProductplanmst.java

@ -0,0 +1,123 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 改切计划主表实体类
* @Author: lyd
* @Date: 2025/7/17
*/
@TableName("st_ivt_productplanmst")
@Data
public class StIvtProductplanmst implements Serializable {
/**
* 改切计划标识
*/
@TableId
private String plan_id;
/**
* 改切计划编号
*/
private String plan_code;
/**
* 业务日期
*/
private String biz_date;
/**
* 仓库标识
*/
private String stor_id;
/**
* 仓库编码
*/
private String stor_code;
/**
* 仓库名称
*/
private String stor_name;
/**
* 总数量
*/
private BigDecimal total_qty;
/**
* 明细数
*/
private BigDecimal detail_count;
/**
* 单据状态
*/
private String bill_status;
/**
* 备注
*/
private String remark;
/**
* 制单人
*/
private String input_optid;
/**
* 制单人姓名
*/
private String input_optname;
/**
* 制单时间
*/
private String input_time;
/**
* 审核人
*/
private String update_optid;
/**
* 审核人姓名
*/
private String update_optname;
/**
* 审核时间
*/
private String update_time;
/**
* 确认人
*/
private String confirm_optid;
/**
* 确认人姓名
*/
private String confirm_optname;
/**
* 确认时间
*/
private String confirm_time;
/**
* 是否删除
*/
private String is_delete = "0";
/**
* 外部标识
*/
private String ext_code;
}

11
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplandtlMapper.java

@ -0,0 +1,11 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplandtl;
/**
* @Author: lyd
* @Date: 2025/7/17
*/
public interface StIvtProductplandtlMapper extends BaseMapper<StIvtProductplandtl> {
}

4
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplandtlMapper.xml

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtProductplandtlMapper">
</mapper>

19
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplanmstMapper.java

@ -0,0 +1,19 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplanmst;
import org.nl.wms.st.instor.service.dto.RecutPlanPageParam;
import java.util.Map;
/**
* @Author: lyd
* @Date: 2025/7/17
*/
public interface StIvtProductplanmstMapper extends BaseMapper<StIvtProductplanmst> {
IPage<StIvtProductplanmst> returnCutplanPage(IPage<StIvtProductplanmst> pages, RecutPlanPageParam param);
JSONArray getOutBillDtl(Map param);
}

92
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtProductplanmstMapper.xml

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtProductplanmstMapper">
<select id="returnCutplanPage"
resultType="org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplanmst">
SELECT
mst.plan_id,
mst.plan_code,
mst.biz_date,
mst.stor_id,
mst.stor_code,
mst.stor_name,
mst.total_qty,
mst.detail_count,
mst.bill_status,
mst.remark,
mst.input_optid,
mst.input_optname,
mst.input_time,
mst.update_optid,
mst.update_optname,
mst.update_time,
mst.confirm_optid,
mst.confirm_optname,
mst.confirm_time,
mst.is_delete,
mst.ext_code
FROM
st_ivt_productplanmst mst
INNER JOIN (
SELECT
plan_id
FROM
st_ivt_productplandtl dtl
WHERE
1=1
<if test="param.pcsn != null and param.pcsn != ''">
AND dtl.pcsn = #{param.pcsn}
</if>
GROUP BY plan_id
) a ON mst.plan_id = a.plan_id
WHERE
1 = 1
AND mst.is_delete = '0'
<if test="param.in_stor_id != null and !param.in_stor_id.isEmpty()">
AND mst.stor_id IN
<foreach collection="param.in_stor_id" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="param.bill_code != null and param.bill_code != ''">
AND mst.plan_code LIKE '%${param.bill_code}%'
</if>
<if test="param.stor_id != null and param.stor_id != ''">
AND mst.stor_id = #{param.stor_id}
</if>
<if test="param.bill_status != null and param.bill_status != ''">
AND mst.bill_status = #{param.bill_status}
</if>
<if test="param.begin_time != null and param.begin_time != ''">
AND mst.input_time <![CDATA[ >= ]]> #{param.begin_time}
</if>
<if test="param.end_time != null and param.end_time != ''">
AND mst.input_time <![CDATA[ <= ]]> #{param.end_time}
</if>
ORDER BY plan_id desc
</select>
<select id="getOutBillDtl" resultType="com.alibaba.fastjson.JSONObject">
SELECT
dtl.*,
mater.material_code,
mater.material_name,
sub.package_box_sn
FROM
st_ivt_productplandtl dtl
LEFT JOIN st_ivt_productplanmst mst ON mst.plan_id = dtl.plan_id
LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id
LEFT JOIN pdm_bi_subpackagerelation sub ON sub.sap_pcsn = dtl.pcsn
WHERE
1 = 1
<if test="plan_id != null and plan_id != ''">
AND dtl.plan_id = #{plan_id}
</if>
<if test="scrapdtl_id != null and scrapdtl_id != ''">
AND dtl.scrapdtl_id = #{scrapdtl_id}
</if>
<if test="status != null and status != ''">
AND dtl.status = #{status}
</if>
order by sub.package_box_sn
</select>
</mapper>

17
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtProductplandtlServiceImpl.java

@ -0,0 +1,17 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtProductplandtlService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplandtl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtProductplandtlMapper;
import org.springframework.stereotype.Service;
/**
* @Author: lyd
* @Date: 2025/7/17
*/
@Service
@Slf4j
public class StIvtProductplandtlServiceImpl extends ServiceImpl<StIvtProductplandtlMapper, StIvtProductplandtl> implements IStIvtProductplandtlService {
}

31
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtProductplanmstServiceImpl.java

@ -0,0 +1,31 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtProductplanmstService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplanmst;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtProductplanmstMapper;
import org.nl.wms.st.instor.service.dto.RecutPlanPageParam;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @Author: lyd
* @Date: 2025/7/17
*/
@Slf4j
@Service
public class StIvtProductplanmstServiceImpl extends ServiceImpl<StIvtProductplanmstMapper, StIvtProductplanmst> implements IStIvtProductplanmstService {
@Override
public IPage<StIvtProductplanmst> returnCutplanPage(IPage<StIvtProductplanmst> pages, RecutPlanPageParam param) {
return this.baseMapper.returnCutplanPage(pages, param);
}
@Override
public JSONArray getOutBillDtl(Map param) {
return this.baseMapper.getOutBillDtl(param);
}
}

12
lms/nladmin-system/src/main/java/org/nl/wms/st/instor/rest/RecutPlanController.java

@ -3,8 +3,11 @@ package org.nl.wms.st.instor.rest;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.modules.logging.annotation.Log;
import org.nl.wms.st.instor.service.RecutPlanService;
import org.nl.wms.st.instor.service.dto.RecutPlanPageParam;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@ -22,9 +25,8 @@ public class RecutPlanController {
@GetMapping
@Log("查询改切计划")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(recutPlanService.pageQuery(whereJson, page), HttpStatus.OK);
public ResponseEntity<Object> query(RecutPlanPageParam whereJson, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(recutPlanService.pageQuery(whereJson, page)), HttpStatus.OK);
}
@GetMapping("/getOutBillDtl")
@ -59,8 +61,7 @@ public class RecutPlanController {
}
@PostMapping("/createBill")
@Log("创建出库单")
@Log("改切审核-创建出库单")
public ResponseEntity<Object> createBill(@RequestBody JSONObject whereJson) {
recutPlanService.createBill(whereJson);
return new ResponseEntity<>(HttpStatus.CREATED);
@ -68,7 +69,6 @@ public class RecutPlanController {
@PostMapping("/confirm")
@Log("强制确认")
public ResponseEntity<Object> auditOut(@RequestBody JSONObject whereJson) {
recutPlanService.auditOut(whereJson);
return new ResponseEntity<>(HttpStatus.CREATED);

6
lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/RecutPlanService.java

@ -2,6 +2,10 @@ package org.nl.wms.st.instor.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplanmst;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.st.instor.service.dto.RecutPlanPageParam;
import org.springframework.data.domain.Pageable;
import java.util.Map;
@ -14,7 +18,7 @@ public interface RecutPlanService {
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> pageQuery(Map whereJson, Pageable page);
IPage<StIvtProductplanmst> pageQuery(RecutPlanPageParam whereJson, PageQuery page);
/**
* 多选删除

23
lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/dto/RecutPlanPageParam.java

@ -0,0 +1,23 @@
package org.nl.wms.st.instor.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 改切分页查询对象
*
* @Author: lyd
* @Date: 2025/7/17
*/
@Data
public class RecutPlanPageParam implements Serializable {
private List<String> in_stor_id;
private String bill_code;
private String stor_id;
private String bill_status;
private String begin_time;
private String end_time;
private String pcsn;
}

49
lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java

@ -1,7 +1,6 @@
package org.nl.wms.st.instor.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@ -9,7 +8,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -18,8 +16,12 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.storagevehicleext.service.IMdPbStoragevehicleextService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtMoveinvService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtMoveinvdtlService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtMoveinv;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtMoveinvdtl;
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr;
@ -31,10 +33,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.dict.dao.Dict;
import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.st.inbill.service.StorPublicService;
import org.nl.wms.st.instor.service.HandMoveStorService;
@ -42,7 +41,6 @@ import org.nl.wms.st.instor.service.dto.MoveInvPageParam;
import org.nl.wms.st.instor.service.dto.MoveStockInfoDto;
import org.nl.wms.st.instor.service.vo.MoveChooseMaterialVo;
import org.nl.wms.st.instor.task.HandMoveStorAcsTask;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -73,6 +71,8 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
private final IStIvtMoveinvdtlService moveinvdtlService;
private final IMdPbStoragevehicleextService storagevehicleextService;
private final ISysDictService dictService;
private final IStIvtIostorinvService iostorinvService;
private final IStIvtIostorinvdtlService iostorinvdtlService;
@Override
public IPage<StIvtMoveinv> pageQuery(MoveInvPageParam param, PageQuery page) {
@ -678,6 +678,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
from_start.put("lock_type", "1");
from_start.put("storagevehicle_code", jo.getString("storagevehicle_code"));
from_start.put("struct_id", jo.getString("turnout_struct_id"));
// hint: 修改????
if (jo.getString("turnout_sect_code").equals("BZC01")) {
storPublicService.updateStructAndPointTwo(from_start);
} else {
@ -689,6 +690,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
from_end.put("struct_id", jo.getString("turnin_struct_id"));
from_end.put("is_free", "0");
from_end.put("storagevehicle_code", jo.getString("storagevehicle_code"));
// hint: 修改????
if (jo.getString("turnout_sect_code").equals("BZC01")) {
storPublicService.updateStructAndPointTwo(from_end);
} else {
@ -929,6 +931,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
for (int i = 0; i < stockTaskInfo.size(); i++) {
MoveStockInfoDto moveStockInfoDto = stockTaskInfo.get(i);
String task_id = moveStockInfoDto.getTask_id();
// 将任务更新为起点终点确定,准备下发ACS
boolean update = taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
.set(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode())
.eq(SchBaseTask::getTask_id, task_id));
@ -987,40 +990,38 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
* @param iostorinv_id
*/
void updateMststatus(String iostorinv_id) {
//出库主表
WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv");
//出库明细表
WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl");
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
//查询主表信息
JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0);
jo_mst.put("update_optid", currentUserId + "");
jo_mst.put("update_optname", nickName);
jo_mst.put("update_time", now);
StIvtIostorinv jo_mst = iostorinvService.getById(iostorinv_id);
jo_mst.setUpdate_optid(currentUserId);
jo_mst.setUpdate_optname(nickName);
jo_mst.setUpdate_time(now);
//更新主表状态
JSONArray dtls_40 = wo_dtl.query("bill_status='40' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0);
List<StIvtIostorinvdtl> dtls_40 = iostorinvdtlService.list(new LambdaQueryWrapper<StIvtIostorinvdtl>()
.eq(StIvtIostorinvdtl::getBill_status, "40")
.eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id));
//已分配完明细数小于总明细数
if (dtls_40.size() < jo_mst.getInteger("detail_count")) {
JSONArray dtls_30 = wo_dtl.query("bill_status='30' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0);
if (dtls_40.size() < jo_mst.getDetail_count().intValue()) {
List<StIvtIostorinvdtl> dtls_30 = iostorinvdtlService.list(new LambdaQueryWrapper<StIvtIostorinvdtl>()
.eq(StIvtIostorinvdtl::getBill_status, "30")
.eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id));
//存在分配完的明细
if (dtls_40.size() != 0) {//分配中明细数不为0
jo_mst.put("bill_status", "30");
jo_mst.setBill_status("30");
} else if (dtls_40.size() == 0) {
//不存在分配中和分配完的明细
if (dtls_30.size() == 0) {
jo_mst.put("bill_status", "10");
jo_mst.setBill_status("10");
}//存在分配中的明细
else if (dtls_30.size() != 0) {
jo_mst.put("bill_status", "30");
jo_mst.setBill_status("30");
}
}
} else {//已分配完明细数等于总明细数
jo_mst.put("bill_status", "40");
jo_mst.setBill_status("40");
}
wo_mst.update(jo_mst);
iostorinvService.updateById(jo_mst);
}
}

224
lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/RecutPlanServiceImpl.java

@ -6,27 +6,42 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtProductplandtlService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtProductplanmstService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplandtl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtProductplanmst;
import org.nl.b_lms.storage_manage.md.dao.MdMeMaterialBase;
import org.nl.b_lms.storage_manage.md.dao.MdPbMeasureunit;
import org.nl.b_lms.storage_manage.md.service.MaterialbaseService;
import org.nl.b_lms.storage_manage.md.service.MdPbMeasureunitService;
import org.nl.b_lms.storage_manage.st.dao.StIvtStructivt;
import org.nl.b_lms.storage_manage.st.service.StIvtBsrealstorattrService;
import org.nl.b_lms.storage_manage.st.service.StIvtStructivtService;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.system.service.user.ISysUserService;
import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl;
import org.nl.wms.st.instor.service.RecutPlanService;
import org.nl.wms.st.instor.service.dto.RecutPlanPageParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
@ -42,52 +57,41 @@ public class RecutPlanServiceImpl implements RecutPlanService {
private IStIvtIostorinvOutService iStIvtIostorinvOutService;
@Autowired
private ISysUserService iSysUserService;
@Override
public Map<String, Object> pageQuery(Map whereJson, Pageable page) {
HashMap<String, String> map = new HashMap<>(whereJson);
map.put("flag", "1");
if (StrUtil.isNotEmpty(map.get("bill_code"))) {
map.put("bill_code", "%" + map.get("bill_code") + "%");
}
if (StrUtil.isNotEmpty(map.get("material_code"))) {
map.put("material_code", "%" + map.get("material_code") + "%");
}
if (StrUtil.isNotEmpty(map.get("pcsn"))) {
map.put("pcsn", (String) whereJson.get("pcsn"));
}
private StIvtBsrealstorattrService bsrealstorattrService;
//获取人员对应的仓库
UserStorServiceImpl userStorService = new UserStorServiceImpl();
String in_stor_id = userStorService.getInStor();
if (ObjectUtil.isNotEmpty(in_stor_id)) {
map.put("in_stor_id", in_stor_id);
}
@Autowired
private IStIvtProductplanmstService productplanmstService;
@Autowired
private IStIvtProductplandtlService productplandtlService;
@Autowired
private IpdmBiSubpackagerelationService subpackagerelationService;
@Autowired
private StIvtStructivtService structivtService;
@Autowired
private MaterialbaseService materialbaseService;
@Autowired
private MdPbMeasureunitService measureunitService;
JSONObject jo = WQL.getWO("QST_IVT_PRODUCTPLAN").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "plan_id desc");
return jo;
@Override
public IPage<StIvtProductplanmst> pageQuery(RecutPlanPageParam param, PageQuery page) {
List<String> storeForUser = bsrealstorattrService.getStoreForUser(SecurityUtils.getCurrentUserId());
param.setIn_stor_id(storeForUser);
IPage<StIvtProductplanmst> pages = new Page<>(page.getPage() + 1, page.getSize());
pages = productplanmstService.returnCutplanPage(pages, param);
return pages;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAll(Long[] ids) {
WQLObject wo_mst = WQLObject.getWQLObject("st_ivt_productplanmst");
JSONObject jsonObject = new JSONObject();
jsonObject.put("is_delete", "1");
for (Long plan_id : ids) {
wo_mst.update(jsonObject, "plan_id = '" + plan_id + "'");
}
productplanmstService.update(new LambdaUpdateWrapper<StIvtProductplanmst>()
.set(StIvtProductplanmst::getIs_delete, "1")
.in(StIvtProductplanmst::getPlan_id, Arrays.asList(ids)));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void insertDtl(JSONObject map) {
//主表
WQLObject wo_mst = WQLObject.getWQLObject("st_ivt_productplanmst");
JSONArray rows = map.getJSONArray("tableData");
map.remove("tableData");
String currentUserId = SecurityUtils.getCurrentUserId();
@ -111,7 +115,7 @@ public class RecutPlanServiceImpl implements RecutPlanService {
//调用明细处理方法
JSONObject ret = this.insertDtlByRows(mst_jo, rows);
mst_jo.put("total_qty", ret.getDoubleValue("total_qty"));
wo_mst.insert(mst_jo);
productplanmstService.save(mst_jo.toJavaObject(StIvtProductplanmst.class));
}
/**
@ -121,7 +125,6 @@ public class RecutPlanServiceImpl implements RecutPlanService {
*/
@Transactional(rollbackFor = Exception.class)
public JSONObject insertDtlByRows(JSONObject jsonMst, JSONArray rows) {
WQLObject wo_dtl = WQLObject.getWQLObject("st_ivt_productplandtl");
//定义返回数据
JSONObject ret = new JSONObject();
@ -141,7 +144,7 @@ public class RecutPlanServiceImpl implements RecutPlanService {
jsonDtl.put("qty", json.getDoubleValue("qty"));
jsonDtl.put("remark", json.getString("remark"));
jsonDtl.put("status", "10");
wo_dtl.insert(jsonDtl);
productplandtlService.save(jsonDtl.toJavaObject(StIvtProductplandtl.class));
total_qty = NumberUtil.add(total_qty, json.getDoubleValue("qty"));
@ -152,54 +155,40 @@ public class RecutPlanServiceImpl implements RecutPlanService {
@Override
public JSONArray getOutBillDtl(Map whereJson) {
whereJson.put("flag", "2");
JSONArray jo = WQL.getWO("QST_IVT_PRODUCTPLAN")
.addParamMap((HashMap) whereJson)
.process()
.getResultJSONArray(0);
return jo;
return productplanmstService.getOutBillDtl(whereJson);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(JSONObject whereJson) {
//主表
WQLObject wo_mst = WQLObject.getWQLObject("st_ivt_productplanmst");
//主表
WQLObject wo_dtl = WQLObject.getWQLObject("st_ivt_productplandtl");
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
String plan_id = (String) whereJson.get("plan_id");
String plan_id = whereJson.getString("plan_id");
//查询主表
JSONObject jo_mst = wo_mst.query("plan_id='" + plan_id + "'").uniqueResult(0);
StIvtProductplanmst productplanmst = productplanmstService.getById(plan_id);
//删除所有明细
wo_dtl.delete("plan_id = '" + plan_id + "'");
productplandtlService.remove(new LambdaQueryWrapper<StIvtProductplandtl>()
.eq(StIvtProductplandtl::getPlan_id, plan_id));
//获取明细
JSONArray rows = whereJson.getJSONArray("tableData");
//调用明细处理方法
JSONObject ret = this.insertDtlByRows(jo_mst, rows);
jo_mst.put("remark", whereJson.get("remark"));
jo_mst.put("biz_date", whereJson.get("biz_date"));
jo_mst.put("detail_count", rows.size());
jo_mst.put("total_qty", ret.getString("total_qty"));
jo_mst.put("update_optid", currentUserId + "");
jo_mst.put("update_optname", nickName);
jo_mst.put("update_time", now);
JSONObject ret = this.insertDtlByRows((JSONObject) JSON.toJSON(productplanmst), rows);
productplanmst.setRemark(whereJson.getString("remark"));
productplanmst.setBiz_date(whereJson.getString("biz_date"));
productplanmst.setDetail_count(BigDecimal.valueOf(rows.size()));
productplanmst.setTotal_qty(ret.getBigDecimal("total_qty"));
productplanmst.setUpdate_optid(currentUserId);
productplanmst.setUpdate_optname(nickName);
productplanmst.setUpdate_time(now);
//更新主表
wo_mst.update(jo_mst);
productplanmstService.updateById(productplanmst);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void createBill(JSONObject whereJson) {
WQLObject dtl_wo = WQLObject.getWQLObject("st_ivt_productplandtl");
WQLObject mst_wo = WQLObject.getWQLObject("st_ivt_productplanmst");
JSONArray rows = whereJson.getJSONArray("rows");
JSONObject mst_jo = whereJson.getJSONObject("mst_jo");
@ -221,73 +210,70 @@ public class RecutPlanServiceImpl implements RecutPlanService {
if (StrUtil.isEmpty("sap_pcsn")) {
throw new BadRequestException("请求参数SAP批次不能为空!");
}
JSONObject sub_jo = WQLObject.getWQLObject("PDM_BI_SubPackageRelation").query("sap_pcsn = '" + sap_pcsn + "'").uniqueResult(0);
PdmBiSubpackagerelation sub_jo = subpackagerelationService.getOne(
new LambdaQueryWrapper<PdmBiSubpackagerelation>()
.eq(PdmBiSubpackagerelation::getSap_pcsn, sap_pcsn), false);
if (ObjectUtil.isEmpty(sub_jo)) {
throw new BadRequestException("LMS中不存在SAP批次为【" + sap_pcsn + "】的包装关系");
}
String container_name = sub_jo.getString("container_name");
JSONObject struct_ivt = WQLObject.getWQLObject("st_ivt_structivt").query("pcsn = '" + container_name + "'").uniqueResult(0);
String container_name = sub_jo.getContainer_name();
StIvtStructivt struct_ivt = structivtService.getOneByPcsn(container_name, false);
if (ObjectUtil.isEmpty(struct_ivt)) {
throw new BadRequestException("SAP批次为【" + sap_pcsn + "】的成品卷不存在或已经出库!");
} else {
if (struct_ivt.getDoubleValue("frozen_qty") > 0) {
if (struct_ivt.getFrozen_qty().doubleValue() > 0) {
throw new BadRequestException("SAP批次为【" + sap_pcsn + "】的成品卷已经被分配或出库中");
} else {
JSONObject dtl = new JSONObject();
//查询该物料
JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + sub_jo.getString("product_name") + "'").uniqueResult(0);
MdMeMaterialBase mater_jo = materialbaseService.getOne(new LambdaQueryWrapper<MdMeMaterialBase>()
.eq(MdMeMaterialBase::getMaterial_code, sub_jo.getProduct_name()), false);
if (ObjectUtil.isEmpty(mater_jo)) {
throw new BadRequestException("未查询到物料:" + sub_jo.getString("product_name") + ",信息!");
throw new BadRequestException("未查询到物料:" + sub_jo.getProduct_name() + ",信息!");
}
dtl.put("material_id", mater_jo.getString("material_id"));
dtl.put("material_id", mater_jo.getMaterial_id());
dtl.put("pcsn", container_name);
dtl.put("box_no", sub_jo.getString("package_box_sn"));
JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + mater_jo.getString("base_unit_id") + "'").uniqueResult(0);
dtl.put("box_no", sub_jo.getPackage_box_sn());
MdPbMeasureunit unit = measureunitService.getById(mater_jo.getBase_unit_id());
if (ObjectUtil.isEmpty(unit)) {
throw new BadRequestException("未查询到物料计量单位:" + mater_jo.getString("base_unit_id") + ",信息!");
throw new BadRequestException("未查询到物料计量单位:" + mater_jo.getBase_unit_id() + ",信息!");
}
dtl.put("qty_unit_id", unit.getString("measure_unit_id"));
dtl.put("qty_unit_name", unit.getString("unit_name"));
dtl.put("plan_qty", sub_jo.getString("net_weight"));
dtl.put("qty_unit_id", unit.getMeasure_unit_id());
dtl.put("qty_unit_name", unit.getUnit_name());
dtl.put("plan_qty", sub_jo.getNet_weight());
dtls.add(dtl);
}
}
//将已经生成的明细状态变更为完成
HashMap map = new HashMap<>();
map.put("status", "99");
dtl_wo.update(map, "plan_id = '" + mst_jo.getString("plan_id") + "' AND pcsn = '" + sap_pcsn + "'");
productplandtlService.update(new LambdaUpdateWrapper<StIvtProductplandtl>()
.set(StIvtProductplandtl::getStatus, "99")
.eq(StIvtProductplandtl::getPlan_id, mst_jo.getString("plan_id"))
.eq(StIvtProductplandtl::getPcsn, sap_pcsn));
//判断是否全部变更为99
JSONArray dtl_rows = dtl_wo.query("plan_id = '" + mst_jo.getString("plan_id") + "' AND status < '99' ").getResultJSONArray(0);
List<StIvtProductplandtl> dtl_rows = productplandtlService.list(new LambdaQueryWrapper<StIvtProductplandtl>()
.eq(StIvtProductplandtl::getPlan_id, mst_jo.getString("plan_id"))
.lt(StIvtProductplandtl::getStatus, "99"));
if (dtl_rows.size() > 0) {
//主表更新为出库中
HashMap mst_map = new HashMap<>();
mst_map.put("bill_status", "20");
mst_wo.update(mst_map, "plan_id = '" + mst_jo.getString("plan_id") + "'");
productplanmstService.update(new LambdaUpdateWrapper<StIvtProductplanmst>()
.set(StIvtProductplanmst::getBill_status, "20")
.eq(StIvtProductplanmst::getPlan_id, mst_jo.getString("plan_id")));
} else {
HashMap mst_map = new HashMap<>();
mst_map.put("bill_status", "99");
mst_map.put("confirm_optid", SecurityUtils.getCurrentUserId());
mst_map.put("confirm_optname", SecurityUtils.getCurrentNickName());
mst_map.put("confirm_time", DateUtil.now());
mst_wo.update(mst_map, "plan_id = '" + mst_jo.getString("plan_id") + "'");
productplanmstService.update(new LambdaUpdateWrapper<StIvtProductplanmst>()
.set(StIvtProductplanmst::getBill_status, "99")
.set(StIvtProductplanmst::getUpdate_optid, SecurityUtils.getCurrentUserId())
.set(StIvtProductplanmst::getUpdate_optname, SecurityUtils.getCurrentNickName())
.set(StIvtProductplanmst::getUpdate_time, DateUtil.now())
.eq(StIvtProductplanmst::getPlan_id, mst_jo.getString("plan_id")));
}
}
if (!dtls.isEmpty()) {
// 判断仓库是否是二期仓库
if (mst_jo.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
jsonMst.put("tableData", dtls);
String iostorinv_id = iStIvtIostorinvOutService.insertMst(jsonMst);
//调用自动分配
JSONObject out_jo = new JSONObject();
out_jo.put("iostorinv_id", iostorinv_id);
out_jo.put("div_type", "1");
// 改为手动分配
// iStIvtIostorinvOutService.allDiv(out_jo);
}
jsonMst.put("tableData", dtls);
iStIvtIostorinvOutService.insertMst(jsonMst);
// hint: 手动分配,不自动分配
} else {
throw new BadRequestException("推送失败!SAP推送的子卷明细不符合出库状态!");
@ -298,14 +284,12 @@ public class RecutPlanServiceImpl implements RecutPlanService {
@Override
@Transactional(rollbackFor = Exception.class)
public void auditOut(JSONObject whereJson) {
WQLObject mst = WQLObject.getWQLObject("st_ivt_productplanmst");
// 更新主表为完成
JSONObject param = new JSONObject();
param.put("bill_status", "99");
param.put("confirm_optid", SecurityUtils.getCurrentUserId());
param.put("confirm_optname", SecurityUtils.getCurrentNickName());
param.put("confirm_time", DateUtil.now());
mst.update(param, "plan_id = '" + whereJson.getString("plan_id") + "'");
productplanmstService.update(new LambdaUpdateWrapper<StIvtProductplanmst>()
.set(StIvtProductplanmst::getBill_status, "99")
.set(StIvtProductplanmst::getUpdate_optid, SecurityUtils.getCurrentUserId())
.set(StIvtProductplanmst::getUpdate_optname, SecurityUtils.getCurrentNickName())
.set(StIvtProductplanmst::getUpdate_time, DateUtil.now())
.eq(StIvtProductplanmst::getPlan_id, whereJson.getString("plan_id")));
}
}

5
lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTPLAN.wql

@ -1,6 +1,7 @@
[交易说明]
交易名: 成品报废审核分页查询
所属模块:
所属模块:flag1见:org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtProductplanmstMapper.returnCutplanPage
flag2见:org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtProductplanmstMapper.getOutBillDtl
功能简述:
版权所有:
表引用:
@ -121,4 +122,4 @@
order by sub.package_box_sn
ENDSELECT
ENDQUERY
ENDIF
ENDIF

Loading…
Cancel
Save