add:海柔半成品入库、海柔半成品库存、海柔半成品库存变动

This commit is contained in:
2023-08-01 17:56:53 +08:00
parent fad2c8289f
commit 2938cb17a4
40 changed files with 5508 additions and 2 deletions

View File

@@ -40,6 +40,7 @@ public enum AcsTaskEnum {
TASK_STRUCT_BCP_EMPOUT("17","半成品-空托盘出库"),
TASK_STRUCT_CP_IN("11","入库-成品-生产入库"),
TASK_STRUCT_CP_OUT("12","出库-成品-生产出库"),
TASK_STRUCT_HR_IN("26","入库-海柔半成品-生产入库"),
TASK_STRUCT_CP_CHECK("13","-盘点"),
TASK_WASH_LACK("20","清洗机-缺料请求"),
TASK_WASH_EMP("21","清洗机-空框请求"),

View File

@@ -62,8 +62,10 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
.eq(StIvtStructattr::getSect_id, sect_id)
.eq(StIvtStructattr::getIs_used, IOSEnum.IS_USED.code(""))
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getStoragevehicle_code, "")
.eq(StIvtStructattr::getIs_emptyvehicle, false)
.and(qr -> qr.eq(StIvtStructattr::getStoragevehicle_code,"")
.or().isNull(StIvtStructattr::getStoragevehicle_code)
)
.ne(StIvtStructattr::getIs_emptyvehicle, true)
.orderByAsc(StIvtStructattr::getStruct_code)
, false);
break;

View File

@@ -15,6 +15,7 @@ import org.nl.wms.storage_manage.semimanage.service.check.IStIvtCheckmstBcpServi
import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcpOutService;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcpService;
import org.nl.wms.storage_manage.semimanage.service.shutFrame.IStIvtShutframeinvBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -66,6 +67,10 @@ public enum TASKEnum implements FunctionStrategy<String, JSONObject> {
ISchBasePointService bean = SpringContextHolder.getBean(ISchBasePointService.class);
bean.taskOperate(form);
}),
HR_CP_IN_TASK(type -> AcsTaskEnum.TASK_STRUCT_HR_IN.getCode().equals(type), form -> {
IStIvtIostorinvHrBcpInService bean = SpringContextHolder.getBean(IStIvtIostorinvHrBcpInService.class);
bean.taskOperate(form);
}),
;

View File

@@ -0,0 +1,125 @@
package org.nl.wms.storage_manage.semimanagehr.controller.iostorInv;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 出入库记录表 前端控制器
* </p>
*
* @author generator
* @since 2023-05-10
*/
@RestController
@Api(tags = "海柔半成品入库")
@RequestMapping("/api/in/semiproductHr")
@Slf4j
@SaIgnore
public class StIvtIostorinvHrBcpInController {
@Autowired
private IStIvtIostorinvHrBcpInService stIvtIostorinvBcpService; // 海柔半成品入库服务
@Autowired
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务
@GetMapping
@Log("查询入库单据")
//("查询入库单据")
public ResponseEntity<Object> query(HrBcpIostorInvQuery query, PageQuery page) {
return new ResponseEntity<>(stIvtIostorinvBcpService.queryDtl(query,page), HttpStatus.OK);
}
@PostMapping("/create")
@Log("新增入库单")
//("新增入库单")
public ResponseEntity<Object> create(@RequestBody JSONObject form) {
stIvtIostorinvBcpService.create(form);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@Log("删除出入库单")
//("删除出入库单")
@PostMapping("/delete")
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
if (ids.length>0){
stIvtIostorinvBcpService.update(new UpdateWrapper<StIvtIostorinvHrBcp>()
.set("is_delete","1")
.in("iostorinv_id",ids));
List<StIvtIostorinvHrBcp> bcps = stIvtIostorinvBcpService.listByIds(Arrays.asList(ids));
List<String> collect = bcps.stream().map(StIvtIostorinvHrBcp::getStoragevehicle_code).collect(Collectors.toList());
// 更新载具扩展属性 - 释放载具对应物料关系 清空数量
if (!CollectionUtils.isEmpty(collect)){
iMdPbStoragevehicleextService.update(
new MdPbStoragevehicleext()
.setMaterial_id("")
.setStorage_qty(BigDecimal.valueOf(0)),
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.in(MdPbStoragevehicleext::getStoragevehicle_code,collect)
);
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/update")
@Log("修改入库单")
//("修改入库单")
public ResponseEntity<Object> update(@RequestBody JSONObject whereJson) {
stIvtIostorinvBcpService.updateBill(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/getIODtl")
@Log("查询入库分配明细")
//("查询入库分配明细")
public ResponseEntity<Object> getIODtl(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(stIvtIostorinvBcpService.getIoDtl(whereJson.toJavaObject(HrBcpIostorInvQuery.class)), HttpStatus.OK);
}
@PostMapping("/confirm")
@Log("完成单据")
//("完成单据")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
stIvtIostorinvBcpService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/confirmTask")
@Log("下发任务")
//("下发任务")
public ResponseEntity<Object> confirmTask(@RequestBody JSONObject whereJson) {
stIvtIostorinvBcpService.confirmTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}

View File

@@ -0,0 +1,103 @@
package org.nl.wms.storage_manage.semimanagehr.controller.iostorInv;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpOutService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* <p>
* 出入库记录表 前端控制器
* </p>
*
* @author generator
* @since 2023-05-10
*/
@RestController
@Api(tags = "海柔半成品出库")
@RequestMapping("/api/out/semiproductHr")
@Slf4j
@SaIgnore
public class StIvtIostorinvHrBcpOutController {
@Autowired
private IStIvtIostorinvHrBcpOutService bcpOutService;
@GetMapping
@Log("查询入库单据")
//("查询入库单据")
public ResponseEntity<Object> query(HrBcpIostorInvQuery query, PageQuery page) {
return new ResponseEntity<>(bcpOutService.queryDtl(query,page), HttpStatus.OK);
}
@PostMapping("/create")
@Log("新增出库单")
//("新增出库单")
public ResponseEntity<Object> create(@RequestBody JSONObject form) {
bcpOutService.create(form);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@Log("删除出入库单")
//("删除出入库单")
@PostMapping("/delete")
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
bcpOutService.delete(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/update")
@Log("修改出库单")
//("修改出库单")
public ResponseEntity<Object> update(@RequestBody JSONObject whereJson) {
bcpOutService.updateBill(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/commit")
@Log("出入单提交")
//("出入单提交")
public ResponseEntity<Object> commit(@RequestBody Map<String,Object> whereJson) {
//semiProductInService.commit(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/getIODtl")
@Log("查询入库分配明细")
//("查询入库分配明细")
public ResponseEntity<Object> getIODtl(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(bcpOutService.getIoDtl(whereJson.toJavaObject(HrBcpIostorInvQuery.class)), HttpStatus.OK);
}
@PostMapping("/confirm")
@Log("完成单据")
//("完成单据")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
bcpOutService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/confirmTask")
@Log("下发任务")
//("下发任务")
public ResponseEntity<Object> confirmTask(@RequestBody JSONObject whereJson) {
bcpOutService.confirmTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}

View File

@@ -0,0 +1,79 @@
package org.nl.wms.storage_manage.semimanagehr.controller.structLvt;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.MapOf;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StIvtStructivtBcpVo;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtHrBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dto.StructIvtHrBcpQuery;
import org.nl.wms.system_manage.service.tableData.ColumnInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* <p>
* 仓位库存表 前端控制器
* </p>
*
* @author generator
* @since 2023-05-10
*/
@RestController
@RequestMapping("/api/bcp/hr")
public class StIvtStructivtHrBcpController {
@Autowired
private IStIvtStructivtHrBcpService bcpService;
@Autowired
private ColumnInfoService columnInfoService;
@GetMapping
@Log("半成品库存查询")
//("半成品库存查询")
public ResponseEntity<Object> query(StructIvtHrBcpQuery query, PageQuery page) {
return new ResponseEntity<>(bcpService.packageQuery(query,page), HttpStatus.OK);
}
@PostMapping("/bypda")
@Log("半成品库存查询")
//("半成品库存查询")
public ResponseEntity<Object> bypdaQuery(@RequestBody PageQuery query) {
query.setPage(0);
return new ResponseEntity<>(bcpService.packageQuery(new StructIvtHrBcpQuery(),query), HttpStatus.OK);
}
@GetMapping("/getBcpIvt")
@Log("查询可用的半成品库存")
//("查询可用的半成品库存")
public ResponseEntity<Object> getBcpIvt(StructIvtHrBcpQuery query, PageQuery page) {
return new ResponseEntity<>(bcpService.getBcpIvt(query, page), HttpStatus.OK);
}
@PostMapping("/getBcpIvtInfo")
@Log("查询可用的半成品库存")
//("查询可用的半成品库存")
public ResponseEntity<Object> getBcpIvtInfo(@RequestBody JSONObject jo) {
return new ResponseEntity<>(bcpService.getBcpIvtInfo(jo), HttpStatus.OK);
}
@GetMapping("/download")
@Log("半成品库存导出")
//("半成品库存查询")
public ResponseEntity<Object> download(StructIvtHrBcpQuery query, PageQuery page, HttpServletResponse response) {
List<Map> maps = bcpService.queryAll(query);
String s = JSON.toJSONString(maps);
List<StIvtStructivtBcpVo> bcpVos = JSONArray.parseArray(s, StIvtStructivtBcpVo.class);
columnInfoService.exportFile(bcpVos,response, MapOf.of("stor_name","仓库名称","material_name","物料名称","material_spec","物料规格"));
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -0,0 +1,36 @@
package org.nl.wms.storage_manage.semimanagehr.controller.structLvt;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dto.IvtFlowQuery;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtflowHrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 仓位库存变动记录表 前端控制器
* </p>
*
* @author generator
* @since 2023-05-10
*/
@RestController
@RequestMapping("/api/stIvtStructivtflowHrBcp")
public class StIvtStructivtflowHrBcpController {
@Autowired
private IStIvtStructivtflowHrService iStIvtStructivtflowService;
@GetMapping
public ResponseEntity<Object> query(IvtFlowQuery query, PageQuery page) {
return new ResponseEntity<>(iStIvtStructivtflowService.queryAll(query,page), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,62 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv;
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.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
* 出入库记录表 服务类
* </p>
*
* @author generator
* @since 2023-08-01
*/
public interface IStIvtIostorinvHrBcpInService extends IService<StIvtIostorinvHrBcp> {
Object queryDtl(HrBcpIostorInvQuery query, PageQuery page);
List<Map> getIoDtl(HrBcpIostorInvQuery query);
/**
* 新增
* @param form
* @return
*/
void create(JSONObject form);
/**
* 完成
* @param form
* @return
*/
String confirm(JSONObject form);
/**
* 库存变动
* @param form
* @return
*/
void onlyConfirm(JSONObject form);
/**
* 下发单据
* @param form
* @return
*/
String confirmTask(JSONObject form);
/**
* 修改单据
* @param form
* @return
*/
String updateBill(JSONObject form);
void taskOperate(JSONObject form);
List<Map> getPdaAll(JSONObject form);
}

View File

@@ -0,0 +1,84 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
* 出入库记录表 服务类
* </p>
*
* @author generator
* @since 2023-08-01
*/
public interface IStIvtIostorinvHrBcpOutService extends IService<StIvtIostorinvHrBcp> {
Object queryDtl(HrBcpIostorInvQuery query, PageQuery page);
List<Map> getIoDtl(HrBcpIostorInvQuery query);
/**
* 新增
* @param form
* @return
*/
void create(JSONObject form);
/**
* 新增
* @param ids
* @return
*/
void delete(Long[] ids);
/**
* 完成
* @param form
* @return
*/
String confirm(JSONObject form);
/**
* 出库确认
* @param form
* @return
*/
void onlyConfirm(JSONObject form);
/**
* 自动出库
* @param param
* param.put("stor_id", form.getString("stor_id"));
* param.put("sect_id", form.getString("sect_id"));
* param.put("material_id", form.getString("material_id"));
* @return
*/
StIvtStructivtBcp autoConfirmout(JSONObject param);
StIvtStructattr autoConfirmin(JSONObject param);
void lockStruct(String struct,String type,String inv_code);
/**
* 下发单据
* @param form
* @return
*/
String confirmTask(JSONObject form);
/**
* 修改单据
* @param form
* @return
*/
String updateBill(JSONObject form);
void taskOperate(JSONObject form);
}

View File

@@ -0,0 +1,232 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* <p>
* 出入库记录表
* </p>
*
* @author generator
* @since 2023-08-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("st_ivt_iostorinv_hr_bcp")
public class StIvtIostorinvHrBcp implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 出入单标识
*/
@TableId(value = "iostorinv_id")
private String iostorinv_id;
/**
* 单据编号
*/
private String bill_code;
/**
* 出入类型
*/
private String io_type;
/**
* 业务类型
*/
private String buss_type;
/**
* 单据类型
*/
private String bill_type;
/**
* 单据zhuangtai
*/
private String bill_status;
/**
* 业务日期
*/
private String biz_date;
/**
* 关联单据
*/
private String base_bill_code;
/**
* 车间标识
*/
private String workshop_id;
/**
* 仓库标识
*/
private String stor_id;
/**
* 仓库编码
*/
private String stor_code;
/**
* 仓库名称
*/
private String stor_name;
/**
* 库区标识
*/
private String sect_id;
/**
* 库区编码
*/
private String sect_code;
/**
* 库区名称
*/
private String sect_name;
/**
* 仓位标识
*/
private String struct_id;
/**
* 仓位编码
*/
private String struct_code;
/**
* 仓位名称
*/
private String struct_name;
/**
* 物料标识
*/
private String material_id;
/**
* 批次
*/
private String pcsn;
/**
* 品质类型
*/
private String quality_scode;
/**
* 库存等级
*/
private String ivt_level;
/**
* 是否可用
*/
private Boolean is_active;
/**
* 数量
*/
private BigDecimal plan_qty;
/**
* 数量计量单位标识
*/
private String qty_unit_id;
/**
* 数量计量单位名称
*/
private String qty_unit_name;
/**
* 创建人
*/
private String create_id;
/**
* 创建人姓名
*/
private String create_name;
/**
* 创建时间
*/
private String create_time;
/**
* 修改人
*/
private String update_id;
/**
* 修改人姓名
*/
private String update_name;
/**
* 修改时间
*/
private String update_time;
/**
* 执行状态
*/
private String work_status;
/**
* 任务标识
*/
private String task_id;
/**
* 存储载具标识
*/
private String storagevehicle_id;
/**
* 存储载具编码
*/
private String storagevehicle_code;
/**
* 存储载具类型
*/
private String storagevehicle_type;
/**
* 单重
*/
private BigDecimal unit_weight;
/**
* 是否删除
*/
private Boolean is_delete;
/**
* 备注
*/
private String remark;
/**
* 入库点
*/
private String point_code;
}

View File

@@ -0,0 +1,26 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.nl.common.anno.Datazhuazhua;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
* 出入库记录表 Mapper 接口
* </p>
*
* @author generator
* @since 2023-05-10
*/
@Datazhuazhua
public interface StIvtIostorinvHrBcpMapper extends BaseMapper<StIvtIostorinvHrBcp> {
List<Map> getIostorinv(@Param("query") HrBcpIostorInvQuery query);
List<Map> getPdaAll(JSONObject form);
}

View File

@@ -0,0 +1,82 @@
<?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.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper.StIvtIostorinvHrBcpMapper">
<select id="getIostorinv" resultType="java.util.Map">
SELECT
dtl.*,
mater.material_code,
mater.material_name,
mater.material_spec,
task.task_code,
task.task_status,
ROUND(dtl.plan_qty / dtl.unit_weight,3 ) AS qty
FROM
st_ivt_iostorinv_hr_bcp dtl
LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id
LEFT JOIN sch_base_task task ON task.task_id = dtl.task_id
<where>
dtl.is_delete = false
<if test="query.stor_id != null and query.stor_id != ''">
and dtl.stor_id = #{query.stor_id}
</if>
<if test="query.iostorinv_id != null and query.iostorinv_id != ''">
and dtl.iostorinv_id = #{query.iostorinv_id}
</if>
<if test="query.bill_code != null and query.bill_code != ''">
and dtl.bill_code like #{query.bill_code}
</if>
<if test="query.bill_type != null and query.bill_type != ''">
and dtl.bill_type like #{query.bill_type}
</if>
<if test="query.bill_status != null and query.bill_status != ''">
and dtl.bill_status = #{query.bill_status}
</if>
<if test="query.io_type != null and query.io_type != ''">
and dtl.io_type = #{query.io_type}
</if>
<if test="query.start_time != null and query.start_time != ''">
and dtl.create_time >= #{query.start_time}
</if>
<if test="query.end_time != null and query.end_time != ''">
and #{query.end_time} >= dtl.create_time
</if>
</where>
order by dtl.create_time desc
</select>
<select id="getPdaAll" resultType="java.util.Map">
SELECT
dtl.*,
mater.material_code,
mater.material_spec,
ROUND(dtl.plan_qty / dtl.unit_weight,3) AS qty
FROM
st_ivt_iostorinv_hr_bcp dtl
LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id
LEFT JOIN sch_base_task task ON task.task_id = dtl.task_id
<where>
dtl.is_delete = false
AND dtl.bill_status != '99'
<if test="io_type != null and io_type != ''">
and dtl.io_type = #{io_type}
</if>
<if test="stor_id != null and stor_id != ''">
and dtl.stor_id = #{stor_id}
</if>
<if test="material_code != null and material_code != ''">
and (mater.material_code LIKE '%${material_code}%' or
mater.material_name LIKE '%${material_code}%')
</if>
<if test="storagevehicle_code != null and storagevehicle_code != ''">
and dtl.storagevehicle_code LIKE '%${storagevehicle_code}%'
</if>
<if test="bill_type != null and bill_type != ''">
and dtl.bill_type = #{bill_type}
</if>
</where>
order by dtl.create_time desc
</select>
</mapper>

View File

@@ -0,0 +1,38 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.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.iostorInv.dao.StIvtIostorinvBcp;
/*
* @author LXY
* @Date 2023/08/01 19:49
*/
@Data
public class HrBcpIostorInvQuery extends BaseQuery<StIvtIostorinvBcp> {
private String stor_id;
private String iostorinv_id;
private String bill_status;
private String bill_type;
private String bill_code;
private String io_type;
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());
}
}

View File

@@ -0,0 +1,477 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.jsonwebtoken.lang.Assert;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.PointEvent;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
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.IMdPbStoragevehicleinfoService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
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.StIvtBsrealstorattr;
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.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.IVTEnum;
import org.nl.wms.storage_manage.basedata.service.record.service.IStIvtStructivtflowService;
import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper.StIvtIostorinvHrBcpMapper;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtHrBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtflowHrService;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtHrBcp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* <p>
* 出入库记录表 服务实现类
* </p>
*
* @author generator
* @since 2023-05-10
*/
@Service
public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl<StIvtIostorinvHrBcpMapper, StIvtIostorinvHrBcp> implements IStIvtIostorinvHrBcpInService {
@Autowired
private IStIvtBsrealstorattrService storattrService; // 实物属性服务
@Autowired
private IStIvtStructivtHrBcpService structivtBcpService; // 仓库库存服务
@Autowired
private IStIvtStructattrService structattrService; // 仓位服务
@Autowired
private DivRuleCpService divRuleCpService; // 分配规则服务
@Autowired
private IStIvtSectattrService sectattrService; // 库区服务
@Autowired
private ISchBaseTaskService iSchBaseTaskService; // 任务表服务
@Autowired
private IMdMeMaterialbaseService materialbaseService; // 任务表服务
@Autowired
private IStIvtStructivtflowHrService iStIvtStructivtflowService; // 库存变动服务
@Autowired
protected IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; // 载具信息
@Autowired
protected IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务
@Override
public Object queryDtl(HrBcpIostorInvQuery query, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
TableDataInfo build = TableDataInfo.build(this.getIoDtl(query));
build.setTotalElements(page.getTotal());
return build;
}
@Override
public List<Map> getIoDtl(HrBcpIostorInvQuery query) {
return this.baseMapper.getIostorinv(query);
}
@Override
@Transactional
public void create(JSONObject form) {
Assert.notNull(form, "参数不能为空");
for (Object item : form.getJSONArray("tableData")) {
StIvtIostorinvHrBcp mst = new StIvtIostorinvHrBcp();
mst.setIostorinv_id(IdUtil.getStringId());
mst.setBill_code(CodeUtil.getNewCode("IO_CODE"));
mst.setBiz_date(form.getString("biz_date"));
mst.setBill_type(form.getString("bill_type"));
mst.setIo_type(IOSEnum.IO_TYPE.code("入库"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
mst.setRemark(form.getString("remark"));
mst.setWorkshop_id(form.getString("product_code"));
mst.setPoint_code(form.getString("point_code"));
仓库数据:
{
StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_id", form.getString("stor_id")));
mst.setStor_id(stor.getStor_id());
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
}
packageRow(mst, JSONObject.parseObject(JSON.toJSONString(item)));
mst.setCreate_id(SecurityUtils.getCurrentUserId());
mst.setCreate_name(SecurityUtils.getCurrentNickName());
mst.setCreate_time(DateUtil.now());
this.save(mst);
// 更新载具扩展属性
iMdPbStoragevehicleextService.update(
new UpdateWrapper<MdPbStoragevehicleext>().lambda()
.set(MdPbStoragevehicleext::getMaterial_id, mst.getMaterial_id())
.set(MdPbStoragevehicleext::getWeight, mst.getPlan_qty())
.eq(MdPbStoragevehicleext::getStoragevehicle_code, mst.getStoragevehicle_code())
);
// 判断是否自动下发
if (ObjectUtil.isNotEmpty(form.getString("auto_send"))) {
confirmTask(JSONObject.parseObject(JSON.toJSONString(mst)));
}
}
}
private void packageRow(StIvtIostorinvHrBcp mst, JSONObject row) {
mst.setMaterial_id(row.getString("material_id"));
mst.setPcsn(StringUtils.isNotEmpty(row.getString("pcsn")) ? row.getString("pcsn") : DateUtil.today());
mst.setPlan_qty(row.getBigDecimal("plan_qty"));
mst.setQuality_scode(row.getString("quality_scode"));
mst.setQty_unit_id(row.getString("base_unit_id"));
mst.setBase_bill_code(row.getString("base_bill_code"));
mst.setQty_unit_name(row.getString("base_unit_name"));
mst.setUnit_weight(row.getBigDecimal("unit_weight"));
// 载具信息
{
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>().lambda()
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, row.getString("storagevehicle_code"))
);
if (ObjectUtil.isEmpty(vehicleDao)) throw new BadRequestException("载具不存在!");
mst.setStoragevehicle_code(vehicleDao.getStoragevehicle_code());
mst.setStoragevehicle_id(vehicleDao.getStoragevehicle_id());
// 更新载具对应物料关系、数量
MdPbStoragevehicleext vehicleExtDao = iMdPbStoragevehicleextService.getOne(
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code, row.getString("storagevehicle_code"))
);
if (ObjectUtil.isNotEmpty(vehicleExtDao)) {
vehicleExtDao.setWeight(mst.getPlan_qty());
vehicleExtDao.setMaterial_id(mst.getMaterial_id());
iMdPbStoragevehicleextService.updateById(vehicleExtDao);
}
}
}
@Override
public void onlyConfirm(JSONObject form) {
Assert.notNull(new Object[]{form.getString("struct_id"),form.getString("stor_id"),form.getString("material_code")},"参数不全");
structivtBcpService.removeById(form.getString("struct_id"));
StIvtBsrealstorattr stor = storattrService.getById(form.getString("stor_id"));
MdMeMaterialbase mdMeMaterialbase = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>()
.eq("material_code",form.getString("material_code")));
if (mdMeMaterialbase==null){
throw new BadRequestException("物料编码不正确"+form.getString("material_code"));
}
//新增库存
StIvtStructivtHrBcp ivtDao = StIvtStructivtHrBcp.builder()
.struct_id(form.getString("struct_id"))
.struct_code(form.getString("struct_code"))
.struct_name(form.getString("struct_name"))
.material_id(mdMeMaterialbase.getMaterial_id())
.quality_scode(IVTEnum.QUALITY_SCODE.code("合格品"))
.pcsn(DateUtil.today())
.ivt_level(IVTEnum.IVT_LEVEL.code("一级"))
.is_active(true)
.qty_unit_id(mdMeMaterialbase.getBase_unit_id())
.instorage_time(DateUtil.now())
.stor_id(form.getString("stor_id"))
.canuse_qty(form.getBigDecimal("qty"))
.workshop_id(stor.getProduct_area())
.unit_weight(mdMeMaterialbase.getNet_weight())
.build();
structivtBcpService.save(ivtDao);
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", ivtDao.getCanuse_qty());
param.put("bill_code","");
param.put("inv_id","");
param.put("bill_type_scode","");
iStIvtStructivtflowService.insetIvtChange(param);
//维护载具
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, form.getString("struct_code"))
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getInv_code, "")
.set(StIvtStructattr::getStoragevehicle_code, form.getString("storagevehicle_code")));
}
@Override
@Transactional
public String confirm(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvHrBcp mst = this.getById(form.getString("iostorinv_id"));
//checkParam(mst);
if (StringUtils.isEmpty(mst.getStruct_code())) {
throw new BadRequestException("当前入库单还未分配仓位!");
}
mst.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
mst.setUpdate_time(DateUtil.now());
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
//新增库存
StIvtStructivtHrBcp ivtDao = StIvtStructivtHrBcp.builder()
.struct_id(mst.getStruct_id())
.struct_code(mst.getStruct_code())
.struct_name(mst.getStruct_name())
.material_id(mst.getMaterial_id())
.quality_scode(mst.getQuality_scode())
.pcsn(mst.getPcsn())
.ivt_level(mst.getIvt_level())
.is_active(mst.getIs_active())
.qty_unit_id(mst.getQty_unit_id())
.instorage_time(DateUtil.now())
.stor_id(mst.getStor_id())
.canuse_qty(mst.getPlan_qty())
.workshop_id(mst.getWorkshop_id())
.unit_weight(mst.getUnit_weight())
.build();
structivtBcpService.save(ivtDao);
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", ivtDao.getCanuse_qty());
param.put("bill_code",mst.getBill_code());
param.put("inv_id",mst.getIostorinv_id());
param.put("bill_type_scode",mst.getBill_type());
iStIvtStructivtflowService.insetIvtChange(param);
//维护载具
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, mst.getStruct_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getInv_code, "")
.set(StIvtStructattr::getStoragevehicle_code, mst.getStoragevehicle_code()));
// 更新任务为完成
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getTask_id, mst.getTask_id())
);
return null;
}
@Override
@Transactional
public String confirmTask(JSONObject form) {
RedissonUtils.lock(()->{
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvHrBcp mst = this.getById(form.getString("iostorinv_id"));
checkParam(mst);
//分配货位。下发任务,更新主单据状态。更新明细任务
StIvtSectattr sect = sectattrService.getOne(
new QueryWrapper<StIvtSectattr>().lambda()
.eq(StIvtSectattr::getSect_name, "海柔半成品库区")
);
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
if (ObjectUtil.isEmpty(stIvtStructattr)) {
throw new BadRequestException("无可分配货位");
}
仓库信息:
{
mst.setSect_id(stIvtStructattr.getSect_id());
mst.setSect_code(stIvtStructattr.getSect_code());
mst.setSect_name(stIvtStructattr.getSect_name());
mst.setStruct_id(stIvtStructattr.getStruct_id());
mst.setStruct_code(stIvtStructattr.getStruct_code());
mst.setStruct_name(stIvtStructattr.getStruct_name());
}
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_HR_IN)
.acs_task_type("7")
.task_group_id(IdUtil.getStringId())
.point_code1(mst.getPoint_code())
.point_code3(stIvtStructattr.getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.extParam(MapOf.of("material_id",mst.getMaterial_id(),
"material_qty",mst.getPlan_qty(),"table_fk_id",mst.getIostorinv_id()))
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
mst.setUpdate_time(DateUtil.now());
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
// 下发任务
sendTask(mst.getTask_id());
structattrService.lockStruct(stIvtStructattr.getStruct_code(), "入库锁",mst.getTask_id());
},"banchengpin_ruku",2);
return null;
}
private void checkParam(StIvtIostorinvHrBcp mst) {
if (mst == null || mst.getIs_delete() == true) {
throw new BadRequestException("单据不存在");
}
if (!IOSEnum.BILL_STATUS.code("生成").equals(mst.getBill_status())) {
throw new BadRequestException("单据" + mst.getBill_code() + "状态不是生成状态");
}
}
@Override
@Transactional
public String updateBill(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvHrBcp mst = form.toJavaObject(StIvtIostorinvHrBcp.class);
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
mst.setUpdate_time(DateUtil.now());
for (Object item : form.getJSONArray("tableData")) {
packageRow(mst, JSONObject.parseObject(JSON.toJSONString(item)));
}
this.updateById(mst);
return mst.getIostorinv_id();
}
@Override
@Transactional
public void taskOperate(JSONObject form) {
String task_id = form.getString("task_id");
String status = form.getString("status");
StIvtIostorinvHrBcp mst = this.getOne(new QueryWrapper<StIvtIostorinvHrBcp>().lambda().eq(StIvtIostorinvHrBcp::getTask_id, task_id));
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
if (mst!=null || !mst.getBill_status().equals(IOSEnum.BILL_STATUS.code("完成"))){
this.update(new UpdateWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
.set(StIvtIostorinvHrBcp::getWork_status, IOSEnum.WORK_STATUS.code("完成")));
JSONObject mst_jo = new JSONObject();
mst_jo.put("iostorinv_id", mst.getIostorinv_id());
this.confirm(mst_jo);
}
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())){
//执行中
this.update(new UpdateWrapper<StIvtIostorinvHrBcp>().lambda().eq(StIvtIostorinvHrBcp::getTask_id, task_id)
.set(StIvtIostorinvHrBcp::getWork_status, IOSEnum.WORK_STATUS.code("执行中")));
// 更新任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status,TaskStatusEnum.EXECUTING.getCode())
.eq(SchBaseTask::getTask_id,task_id )
);
}else if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())){
// 取消
delTask(task_id);
}
}
@Override
public List<Map> getPdaAll(JSONObject form) {
return this.baseMapper.getPdaAll(form);
}
private void delTask(String task_id) {
StIvtIostorinvHrBcp mstDao = this.getOne(
new QueryWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
);
// 解锁仓位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getStruct_id, mstDao.getStruct_id())
);
// 删除任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode())
.eq(SchBaseTask::getTask_id, mstDao.getTask_id())
);
// 更新主表
mstDao.setSect_id("");
mstDao.setSect_code("");
mstDao.setSect_name("");
mstDao.setStruct_id("");
mstDao.setStruct_code("");
mstDao.setStruct_name("");
mstDao.setTask_id("");
mstDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
this.updateById(mstDao);
}
public void sendTask(String task_id) {
SchBaseTask taskDao = iSchBaseTaskService.getById(task_id);
JSONArray param = new JSONArray();
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
Map<String, Object> result = bean.issueTaskToAcs3(param);
// 反馈失败报错
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {
throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message"));
}
// 2.更新任务状态
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());
iSchBaseTaskService.updateById(taskDao);
}
}

View File

@@ -0,0 +1,556 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.jsonwebtoken.lang.Assert;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.PointEvent;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
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.IStIvtSectattrService;
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.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.pcs_manage.PCSEnum;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.basedata.service.record.service.IStIvtStructivtflowService;
import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
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.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpOutService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper.StIvtIostorinvHrBcpMapper;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* <p>
* 出入库记录表 服务实现类
* </p>
*
* @author generator
* @since 2023-05-10
*/
@Service
public class StIvtIostorinvHrBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvHrBcpMapper, StIvtIostorinvHrBcp> implements IStIvtIostorinvHrBcpOutService {
@Autowired
private IStIvtBsrealstorattrService storattrService;
@Autowired
private IStIvtStructivtBcpService structivtBcpService;
@Autowired
private IStIvtStructattrService structattrService;
@Autowired
private DivRuleCpService divRuleCpService;
@Autowired
private IStIvtSectattrService sectattrService;
@Autowired
private ISchBaseTaskService iSchBaseTaskService; // 任务表服务
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Autowired
private IStIvtStructivtflowService iStIvtStructivtflowService; // 库存变动服务
@Autowired
protected IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务
@Override
public Object queryDtl(HrBcpIostorInvQuery query, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
TableDataInfo build = TableDataInfo.build(this.getIoDtl(query));
build.setTotalElements(page.getTotal());
return build;
}
@Override
public List<Map> getIoDtl(HrBcpIostorInvQuery query) {
return this.baseMapper.getIostorinv(query);
}
@Override
public void delete(Long[] ids) {
for (Long id : ids) {
StIvtIostorinvHrBcp dao = this.getOne(new QueryWrapper<StIvtIostorinvHrBcp>().eq("iostorinv_id", id));
dao.setIs_delete(true);
//仓位解锁
structattrService.update(new UpdateWrapper<StIvtStructattr>().set("inv_code", "").set("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")).eq("struct_id", dao.getStruct_id()));
this.updateById(dao);
}
}
@Override
@Transactional
public void create(JSONObject form) {
Assert.notNull(form, "参数不能为空");
for (Object item : form.getJSONArray("tableData")) {
StIvtIostorinvHrBcp mst = new StIvtIostorinvHrBcp();
mst.setIostorinv_id(IdUtil.getStringId());
mst.setBill_code(CodeUtil.getNewCode("IO_CODE"));
mst.setBiz_date(form.getString("biz_date"));
mst.setBill_type(form.getString("bill_type"));
mst.setIo_type(IOSEnum.IO_TYPE.code("出库"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
mst.setRemark(form.getString("remark"));
mst.setWorkshop_id(form.getString("product_code"));
mst.setPoint_code(form.getString("point_code"));
仓库数据:
{
StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_id", form.getString("stor_id")));
mst.setStor_id(stor.getStor_id());
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
}
packageRow(mst, JSONObject.parseObject(JSON.toJSONString(item)));
mst.setCreate_id(SecurityUtils.getCurrentUserId());
mst.setCreate_name(SecurityUtils.getCurrentNickName());
mst.setCreate_time(DateUtil.now());
this.save(mst);
//锁定起点
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, mst.getStruct_code())
.set(StIvtStructattr::getInv_code,mst.getBill_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁")));
// 判断是否自动下发
if (ObjectUtil.isNotEmpty(form.getString("auto_send"))) {
confirmTask(JSONObject.parseObject(JSON.toJSONString(mst)));
}
}
}
private void packageRow(StIvtIostorinvHrBcp mst, JSONObject row) {
mst.setMaterial_id(row.getString("material_id"));
mst.setPcsn(StringUtils.isNotEmpty(row.getString("pcsn")) ? row.getString("pcsn") : DateUtil.today());
mst.setPlan_qty(row.getBigDecimal("plan_qty"));
mst.setQuality_scode(row.getString("quality_scode"));
mst.setQty_unit_id(row.getString("qty_unit_id"));
mst.setBase_bill_code(row.getString("base_bill_code"));
mst.setQty_unit_name(row.getString("qty_unit_name"));
mst.setUnit_weight(row.getBigDecimal("unit_weight"));
mst.setStoragevehicle_code(row.getString("storagevehicle_code"));
mst.setStoragevehicle_id(row.getString("storagevehicle_id"));
mst.setSect_id(row.getString("sect_id"));
mst.setSect_code(row.getString("sect_code"));
mst.setSect_name(row.getString("sect_name"));
mst.setStruct_id(row.getString("struct_id"));
mst.setStruct_code(row.getString("struct_code"));
mst.setStruct_name(row.getString("struct_name"));
}
@Override
@Transactional
public String confirm(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvHrBcp mst = this.getById(form.getString("iostorinv_id"));
//checkParam(mst);
if (StringUtils.isEmpty(mst.getStruct_code())) {
throw new BadRequestException("当前入库单还未分配仓位!");
}
mst.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
mst.setUpdate_time(DateUtil.now());
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
StIvtStructivtBcp ivtDao = structivtBcpService.getById(mst.getStruct_id());
//删除库存
structivtBcpService.remove(new QueryWrapper<StIvtStructivtBcp>().eq("struct_id", mst.getStruct_id()));
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", 0);
param.put("bill_code",mst.getBill_code());
param.put("inv_id",mst.getIostorinv_id());
param.put("bill_type_scode",mst.getBill_type());
iStIvtStructivtflowService.insetIvtChange(param);
//维护载具
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, mst.getStruct_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getInv_code,"")
.set(StIvtStructattr::getStoragevehicle_code, ""));
// 更新任务为完成
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getTask_id, mst.getTask_id())
);
// 更新载具扩展属性 - 释放载具对应物料关系 清空数量
iMdPbStoragevehicleextService.update(
new MdPbStoragevehicleext()
.setMaterial_id("")
.setStorage_qty(BigDecimal.valueOf(0)),
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code,mst.getStoragevehicle_code())
);
return null;
}
@Override
@Transactional
public void onlyConfirm(JSONObject form) {
StIvtStructivtBcp ivtDao = structivtBcpService.getById(form.getString("struct_id"));
if (ivtDao!=null){
//删除库存
structivtBcpService.remove(new QueryWrapper<StIvtStructivtBcp>().eq("struct_id", form.getString("struct_id")));
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", 0);
param.put("bill_code","");
param.put("inv_id","");
param.put("bill_type_scode","");
iStIvtStructivtflowService.insetIvtChange(param);
//维护载具
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, ivtDao.getStruct_code())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getInv_code,"")
.set(StIvtStructattr::getStoragevehicle_code, StringUtils.isNotEmpty(form.getString("storagevehicle_code"))?form.getString("storagevehicle_code"):""));
}
if (StringUtils.isNotEmpty(form.getString("storagevehicle_code"))){
// 更新载具扩展属性 - 释放载具对应物料关系 清空数量
iMdPbStoragevehicleextService.update(
new MdPbStoragevehicleext()
.setMaterial_id("")
.setStorage_qty(BigDecimal.valueOf(0)),
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code,form.getString("storagevehicle_code"))
);
}
}
@Override
@Transactional
public StIvtStructivtBcp autoConfirmout(JSONObject form) {
StIvtStructivtBcp bcpStruct = RedissonUtils.lockAndReturn(() -> {
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", form.getString("material_id")));
JSONObject param = new JSONObject();
param.put("stor_id", form.getString("stor_id"));
param.put("sect_id", form.getString("sect_id"));
param.put("material_id", form.getString("material_id"));
param.put("rule_type", RuleUtil.PRODUCTION_OUT_2);
// 2.锁定仓位
StIvtStructivtBcp stIvtStructivtBcp;
if (form.get("stIvtStructivt")==null){
stIvtStructivtBcp = divRuleCpService.divRuleOutBcp(param);
}else {
stIvtStructivtBcp=(StIvtStructivtBcp)form.get("stIvtStructivt");
}
if ((stIvtStructivtBcp == null)){
throw new BadRequestException("无可用货位");
}
StIvtIostorinvHrBcp mst = new StIvtIostorinvHrBcp();
mst.setIostorinv_id(IdUtil.getStringId());
mst.setBill_code(CodeUtil.getNewCode("IO_CODE"));
mst.setBiz_date(form.getString("biz_date"));
mst.setBill_type(form.getString("bill_type"));
mst.setIo_type(IOSEnum.IO_TYPE.code("出库"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
mst.setRemark(form.getString("remark"));
mst.setWorkshop_id(form.getString("product_code"));
mst.setPoint_code(form.getString("point_code"));
mst.setMaterial_id(material.getMaterial_id());
mst.setPcsn(StringUtils.isNotEmpty(form.getString("pcsn")) ? form.getString("pcsn") : DateUtil.today());
mst.setPlan_qty(stIvtStructivtBcp.getCanuse_qty());
mst.setQuality_scode(stIvtStructivtBcp.getQuality_scode());
mst.setQty_unit_id(stIvtStructivtBcp.getQty_unit_id());
mst.setBase_bill_code("");
mst.setQty_unit_name(" ");
mst.setUnit_weight(material.getNet_weight());
mst.setStoragevehicle_code(" ");
mst.setStoragevehicle_id(" ");
仓库数据:
{
StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_id", form.getString("stor_id")));
mst.setStor_id(stor.getStor_id());
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
StIvtSectattr sect = sectattrService.getById(form.getString("sect_id"));
mst.setSect_code(sect.getSect_code());
mst.setSect_id(sect.getSect_id());
mst.setSect_name(sect.getSect_name());
mst.setStruct_id(stIvtStructivtBcp.getStruct_id());
mst.setStruct_code(stIvtStructivtBcp.getStruct_code());
mst.setStruct_name(stIvtStructivtBcp.getStruct_name());
}
mst.setCreate_id("1");
mst.setCreate_name("acs");
mst.setCreate_time(DateUtil.now());
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_OUT)
.point_code1(stIvtStructivtBcp.getStruct_code())
.point_code3(mst.getPoint_code())
.acs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode())
.task_group_id(IdUtil.getStringId())
.extParam(MapOf.of("material_qty",stIvtStructivtBcp.getCanuse_qty(),
"material_id",stIvtStructivtBcp.getMaterial_id(),"qtyArr",form.get("qtyArr")))
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
this.save(mst);
this.lockStruct(stIvtStructivtBcp.getStruct_code(), "出库锁", mst.getTask_id());
sendTask(mst.getTask_id());
return stIvtStructivtBcp;
}, form.getString("material_id"), 1);
return bcpStruct;
}
@Override
public StIvtStructattr autoConfirmin(JSONObject form) {
final StIvtStructattr[] structattr = new StIvtStructattr[1];
RedissonUtils.lock(()->{
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", form.getString("material_id")));
JSONObject param = new JSONObject();
param.put("stor_id", form.getString("stor_id"));
param.put("sect_id", form.getString("sect_id"));
param.put("material_id", form.getString("material_id"));
param.put("rule_type", RuleUtil.PRODUCTION_OUT_2);
// 2.锁定仓位
structattr[0] = divRuleCpService.divRuleIn(param);
if (structattr[0] != null){
StIvtIostorinvHrBcp mst = new StIvtIostorinvHrBcp();
mst.setIostorinv_id(IdUtil.getStringId());
mst.setBill_code(CodeUtil.getNewCode("IO_CODE"));
mst.setBiz_date(form.getString("biz_date"));
mst.setBill_type(form.getString("bill_type"));
mst.setIo_type(IOSEnum.IO_TYPE.code("出库"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
mst.setRemark(form.getString("remark"));
mst.setWorkshop_id(form.getString("product_code"));
mst.setPoint_code(form.getString("point_code"));
mst.setMaterial_id(material.getMaterial_id());
mst.setPcsn(StringUtils.isNotEmpty(form.getString("pcsn")) ? form.getString("pcsn") : DateUtil.today());
mst.setBase_bill_code("");
mst.setQty_unit_name(" ");
mst.setUnit_weight(material.getNet_weight());
mst.setStoragevehicle_code(" ");
mst.setStoragevehicle_id(" ");
仓库数据:
{
StIvtBsrealstorattr stor = storattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_id", form.getString("stor_id")));
mst.setStor_id(stor.getStor_id());
mst.setStor_code(stor.getStor_code());
mst.setStor_name(stor.getStor_name());
StIvtSectattr sect = sectattrService.getById(form.getString("sect_id"));
mst.setSect_code(sect.getSect_code());
mst.setSect_id(sect.getSect_id());
mst.setSect_name(sect.getSect_name());
mst.setStruct_id(structattr[0].getStruct_id());
mst.setStruct_code(structattr[0].getStruct_code());
mst.setStruct_name(structattr[0].getStruct_name());
}
mst.setCreate_id("1");
mst.setCreate_name("acs");
mst.setCreate_time(DateUtil.now());
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_OUT)
.point_code1(mst.getPoint_code())
.point_code3(structattr[0].getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
this.save(mst);
this.lockStruct(structattr[0].getStruct_code(), "出库锁",mst.getTask_id());
}
} ,"banchengpin_ruku",2);
return structattr[0];
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void lockStruct(String struct, String type, String inv_code) {
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, struct)
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code(type))
.set(StIvtStructattr::getInv_code,inv_code));
}
@Override
@Transactional
public String confirmTask(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvHrBcp mst = this.getById(form.getString("iostorinv_id"));
checkParam(mst);
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_OUT)
.acs_task_type("7")
.task_group_id(IdUtil.getStringId())
.point_code3(mst.getPoint_code())
.point_code1(mst.getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
.product_area(mst.getWorkshop_id())
.callback((Consumer<String>) mst::setTask_id)
.build();
BussEventMulticaster.Publish(event);
mst.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
mst.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
mst.setUpdate_time(DateUtil.now());
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
// 下发任务
sendTask(mst.getTask_id());
return mst.getTask_id();
}
public void sendTask(String task_id) {
SchBaseTask taskDao = iSchBaseTaskService.getById(task_id);
JSONArray param = new JSONArray();
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
Map<String, Object> result = bean.issueTaskToAcs3(param);
// 反馈失败报错
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {
throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message"));
}
// 2.更新任务状态
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());
iSchBaseTaskService.updateById(taskDao);
}
private void checkParam(StIvtIostorinvHrBcp mst) {
if (mst == null || mst.getIs_delete() == true) {
throw new BadRequestException("单据不存在");
}
if (!IOSEnum.BILL_STATUS.code("生成").equals(mst.getBill_status())) {
throw new BadRequestException("单据" + mst.getBill_code() + "状态不是生成状态");
}
}
@Override
@Transactional
public String updateBill(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvHrBcp mst = form.toJavaObject(StIvtIostorinvHrBcp.class);
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
mst.setUpdate_time(DateUtil.now());
for (Object item : form.getJSONArray("tableData")) {
packageRow(mst, JSONObject.parseObject(JSON.toJSONString(item)));
}
this.updateById(mst);
return mst.getIostorinv_id();
}
@Override
@Transactional
public void taskOperate(JSONObject form) {
String task_id = form.getString("task_id");
String status = form.getString("status");
StIvtIostorinvHrBcp mst = this.getOne(new QueryWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id));
if (mst!=null && !mst.getWork_status().equals(PCSEnum.BILL_STATUS.code("完成")) && status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 完成
this.update(new UpdateWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
.set(StIvtIostorinvHrBcp::getWork_status, IOSEnum.WORK_STATUS.code("完成")));
JSONObject mst_jo = new JSONObject();
mst_jo.put("iostorinv_id", mst.getIostorinv_id());
this.confirm(mst_jo);
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
// 执行中
this.update(new UpdateWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
.set(StIvtIostorinvHrBcp::getWork_status, IOSEnum.WORK_STATUS.code("执行中")));
// 更新任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status,TaskStatusEnum.EXECUTING.getCode())
.eq(SchBaseTask::getTask_id,task_id )
);
} else if(status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
// 取消
delTask(task_id);
}
}
private void delTask(String task_id) {
StIvtIostorinvHrBcp mstDao = this.getOne(
new QueryWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
);
// 删除任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode())
.eq(SchBaseTask::getTask_id, mstDao.getTask_id())
);
// 更新主表
mstDao.setTask_id("");
mstDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
this.updateById(mstDao);
}
}

View File

@@ -0,0 +1,32 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt;
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.structIvt.dao.StIvtStructivtBcp;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dto.StructIvtHrBcpQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
* 仓位库存表 服务类
* </p>
*
* @author generator
* @since 2023-05-10
*/
public interface IStIvtStructivtHrBcpService extends IService<StIvtStructivtHrBcp> {
Object packageQuery(StructIvtHrBcpQuery query, PageQuery page);
List<Map> queryAll(StructIvtHrBcpQuery query);
StIvtStructivtBcp queryIvtOutOne(JSONObject json);
Object getBcpIvt(StructIvtHrBcpQuery query, PageQuery page);
List<Map> getBcpIvtInfo(JSONObject jo);
}

View File

@@ -0,0 +1,30 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt;
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.basedata.service.record.dto.StIvtStructivtflowDto;
import org.nl.wms.storage_manage.basedata.service.record.dto.StIvtStructivtflowVo;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dto.IvtFlowQuery;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtflowHr;
import java.util.List;
/**
* <p>
* 仓位库存变动记录表 服务类
* </p>
*
* @author generator
* @since 2023-05-10
*/
public interface IStIvtStructivtflowHrService extends IService<StIvtStructivtflowHr> {
void recordStructivtFlow(StIvtStructivtflowDto flowDto);
void insetIvtChange(JSONObject json);
Object queryAll(IvtFlowQuery query, PageQuery page);
List<StIvtStructivtflowVo> queryAll(IvtFlowQuery query);
}

View File

@@ -0,0 +1,105 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* <p>
* 仓位库存表
* </p>
*
* @author generator
* @since 2023-05-10
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("st_ivt_structivt_hr_bcp")
@Builder
public class StIvtStructivtHrBcp implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 仓位标识
*/
@TableId
private String struct_id;
/**
* 仓位编码
*/
private String struct_code;
/**
* 仓位名称
*/
private String struct_name;
/**
* 物料标识
*/
private String material_id;
/**
* 品质类型
*/
private String quality_scode;
/**
* 库存等级
*/
private String ivt_level;
/**
* 是否可用
*/
private Boolean is_active;
/**
* 批次
*/
private String pcsn;
/**
* 库存数
*/
private BigDecimal canuse_qty;
/**
* 计量单位标识
*/
private String qty_unit_id;
/**
* 入库时间
*/
private String instorage_time;
/**
* 仓库标识
*/
private String stor_id;
/**
* 车间标识
*/
private String workshop_id;
/**
* 是否已挑料
*/
private Boolean is_pick;
/**
* 单重
*/
private BigDecimal unit_weight;
}

View File

@@ -0,0 +1,139 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* <p>
* 仓位库存变动记录表
* </p>
*
* @author generator
* @since 2023-05-10
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("st_ivt_structivtflow_hr_bcp")
public class StIvtStructivtflowHr implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 记录标识
*/
private String change_id;
/**
* 仓位标识
*/
private String struct_id;
/**
* 仓位编码
*/
private String struct_code;
/**
* 仓位名称
*/
private String struct_name;
/**
* 物料标识
*/
private String material_id;
/**
* 批次
*/
private String pcsn;
/**
* 品质类型
*/
private String quality_scode;
/**
* 是否可用
*/
private Boolean is_active;
/**
* 库存等级
*/
private String ivt_level;
/**
* 仓库标识
*/
private String stor_id;
/**
* 单据类型
*/
private String bill_type_scode;
/**
* 单据标识
*/
private String inv_id;
/**
* 单据编号
*/
private String bill_code;
/**
* 单据表名
*/
private String bill_table;
/**
* 变动类型:单据类型
*/
private String change_type_scode;
/**
* 变动时间
*/
private String change_time;
/**
* 变动人
*/
private String change_person_id;
/**
* 变动人姓名
*/
private String change_person_name;
/**
* 变动数
*/
private BigDecimal change_qty;
/**
* 结存数
*/
private BigDecimal result_qty;
/**
* 数量计量单位标识
*/
private String qty_unit_id;
/**
* 车间标识
*/
private String product_area;
/**
* 车间标识
*/
private Boolean is_add;
}

View File

@@ -0,0 +1,39 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.mapper;
import com.alibaba.fastjson.JSONObject;
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.structIvt.dao.StIvtStructivtBcp;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dto.StructIvtHrBcpQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
* 仓位库存表 Mapper 接口
* </p>
*
* @author generator
* @since 2023-05-10
*/
public interface StIvtStructivtHrBcpMapper extends BaseMapper<StIvtStructivtHrBcp> {
int batchUpdateByParam(@Param("event") List<Map> event, @Param("struct_code")String struct_code);
List<Map> getBcpIvt(@Param("query") StructIvtHrBcpQuery query, @Param("pageQuery") PageQuery pageQuery);
List<Map> getBcpIvtInfo(@Param("map") JSONObject map);
List<Map> getStructIvtInfo(@Param("map") Map map);
List<Map> packageQuery(@Param("query") StructIvtHrBcpQuery query);
List<Map> getPdaBcpIvt(JSONObject jo);
List<Map> getPdaBcpMaterialIvt(JSONObject jo);
StIvtStructivtBcp queryIvtOutOne(JSONObject json);
}

View File

@@ -0,0 +1,22 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dto.IvtFlowQuery;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtflowHr;
import java.util.List;
import java.util.Map;
/**
* <p>
* 仓位库存变动记录表 Mapper 接口
* </p>
*
* @author generator
* @since 2023-05-10
*/
public interface StIvtStructivtflowHrBcpMapper extends BaseMapper<StIvtStructivtflowHr> {
List<Map> queryAll(@Param("query") IvtFlowQuery query);
}

View File

@@ -0,0 +1,244 @@
<?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.wms.storage_manage.semimanagehr.service.structIvt.dao.mapper.StIvtStructivtHrBcpMapper">
<update id="batchUpdateByParam">
update st_ivt_structivt_hr_bcp set
<foreach collection="event" item="item" separator=",">
${item.field} = ${item.field}
<choose>
<when test="item.add == true">
+
</when>
<otherwise>
-
</otherwise>
</choose>
#{item.value,jdbcType=DECIMAL}
</foreach>
where struct_code = #{struct_code}
</update>
<select id="getBcpIvt" resultType="java.util.Map">
SELECT
ivt.*,
mu.unit_name AS qty_unit_name,
mb.material_code,
mb.material_name,
mb.material_spec,
sa.sect_id,
sa.sect_code,
sa.sect_name,
sa.struct_id,
sa.struct_code,
sa.struct_name,
sa.storagevehicle_code
FROM
st_ivt_structivt_hr_bcp ivt
LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id
LEFT JOIN st_ivt_structattr sa ON sa.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit mu ON mu.measure_unit_id = ivt.qty_unit_id
<where>
ivt.canuse_qty > 0
AND
sa.lock_type = '0'
<if test="query.material_search != null and query.material_search != ''">
and (mb.material_code = #{query.material_search} OR
mb.material_name = #{query.material_search} OR
mb.material_spec = #{query.material_search})
</if>
<if test="query.sect_id != null and query.sect_id != ''">
and sa.sect_id = #{query.sect_id}
</if>
<if test="query.struct_search != null and query.struct_search != ''">
and (sa.struct_code = #{query.struct_search} OR sa.struct_name = #{query.struct_search})
</if>
</where>
</select>
<select id="getBcpIvtInfo" resultType="java.util.Map">
SELECT
ivt.*,
mu.unit_name AS qty_unit_name,
mb.material_code,
mb.material_name,
sa.sect_id,
sa.sect_code,
sa.sect_name,
sa.struct_id,
sa.struct_code,
sa.struct_name,
sa.storagevehicle_code
FROM
st_ivt_structivt_hr_bcp ivt
LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id
LEFT JOIN st_ivt_structattr sa ON sa.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit mu ON mu.measure_unit_id = ivt.qty_unit_id
<where>
ivt.canuse_qty > 0
AND
sa.lock_type = '0'
<if test="map.material_id != null and map.material_id != ''">
and #{map.material_id} = ivt.material_id
</if>
<if test="map.stor_id != null and map.stor_id != ''">
and ivt.stor_id = #{map.stor_id}
</if>
</where>
</select>
<select id="getStructIvtInfo" resultType="java.util.Map">
SELECT
ivt.*,
mu.unit_name AS qty_unit_name,
mb.material_code,
mb.material_name,
sa.sect_id,
sa.sect_code,
sa.sect_name,
sa.struct_id,
sa.struct_code,
sa.struct_name,
sa.storagevehicle_code
FROM
st_ivt_structivt_hr_bcp ivt
LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id
LEFT JOIN st_ivt_structattr sa ON sa.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit mu ON mu.measure_unit_id = ivt.qty_unit_id
<where>
<if test="map.struct_code != null and map.struct_code != ''">
and #{map.struct_code} = sa.struct_code
</if>
</where>
</select>
<select id="packageQuery" resultType="java.util.Map">
SELECT
ivt.*,
mater.material_code,
mater.material_name,
mater.material_spec,
unit.unit_name,
attr.struct_name,
attr.sect_code,
attr.sect_name,
attr.stor_name,
attr.storagevehicle_code
FROM
st_ivt_structivt_hr_bcp ivt
LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_id
LEFT JOIN st_ivt_structattr attr ON attr.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id
<where>
1=1
<if test="query.material_code!= null and query.material_code != ''">
and mater.material_code LIKE #{query.material_code} or
(mater.material_name LIKE #{query.material_code}) or
(mater.material_spec LIKE #{query.material_code})
</if>
<if test="query.struct_code!= null and query.struct_code != ''">
and attr.struct_code LIKE #{query.struct_code} or
(attr.struct_name LIKE #{query.struct_code})
</if>
<if test="query.start_time!= null and query.start_time != ''">
and ivt.instorage_time &gt;= #{query.start_time}
</if>
<if test="query.end_time!= null and query.end_time != ''">
and ivt.instorage_time &lt;= #{query.end_time}
</if>
</where>
order by ivt.instorage_time DESC,attr.struct_code ASC
</select>
<select id="getPdaBcpIvt" resultType="java.util.Map">
SELECT
ivt.*,
ivt.canuse_qty AS total_qty,
mater.material_code,
mater.material_name,
mater.material_spec,
unit.unit_name,
ROUND(ivt.canuse_qty / mater.net_weight,3) AS qty,
attr.struct_name,
attr.sect_code,
attr.sect_name,
attr.stor_name,
attr.storagevehicle_code
FROM
st_ivt_structivt_hr_bcp ivt
LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_id
LEFT JOIN st_ivt_structattr attr ON attr.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id
<where>
attr.lock_type = '0'
<if test="material_code!= null and material_code != ''">
and mater.material_code LIKE '%${material_code}%' or
(mater.material_name LIKE '%${material_code}%') or
(mater.material_spec LIKE '%${material_code}%')
</if>
<if test="struct_code!= null and struct_code != ''">
and attr.struct_code LIKE '%${struct_code}%' or
(attr.struct_name LIKE '%${struct_code}%')
</if>
</where>
order by ivt.instorage_time DESC,attr.struct_code ASC
</select>
<select id="getPdaBcpMaterialIvt" resultType="java.util.Map">
SELECT
ivt.*,
mu.unit_name AS qty_unit_name,
mb.material_code,
mb.material_name,
mb.material_spec,
sa.sect_id,
sa.sect_code,
sa.sect_name,
sa.struct_id,
sa.struct_code,
sa.struct_name,
sa.storagevehicle_code,
ROUND(ivt.canuse_qty / unit_weight,3) AS qty
FROM
st_ivt_structivt_hr_bcp ivt
LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id
LEFT JOIN st_ivt_structattr sa ON sa.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit mu ON mu.measure_unit_id = ivt.qty_unit_id
<where>
ivt.canuse_qty > 0
AND
sa.lock_type = '0'
<if test="material_code != null and material_code != ''">
and (mb.material_code LIKE '%${material_code}%' or
mb.material_name LIKE '%${material_code}%')
</if>
<if test="struct_code != null and struct_code != ''">
and (sa.struct_code LIKE '%${struct_code}%' or
sa.struct_name LIKE '%${struct_code}%')
</if>
</where>
</select>
<select id="queryIvtOutOne" resultType="org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp">
SELECT
ivt.*
FROM
st_ivt_structivt_hr_bcp ivt
LEFT JOIN st_ivt_structattr attr ON ivt.struct_id = attr.struct_id
WHERE ivt.canuse_qty > 0 and attr.is_used = '1' and lock_type = '0'
<if test="stor_id != null and stor_id != ''">
and attr.stor_id = #{stor_id}
</if>
<if test="sect_id != null and sect_id != ''">
and attr.sect_id = #{sect_id}
</if>
<if test="material_id != null and material_id != ''">
and ivt.material_id = #{material_id}
</if>
order by ivt.canuse_qty ASC,ivt.struct_code ASC
LIMIT 1
</select>
</mapper>

View File

@@ -0,0 +1,48 @@
<?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.wms.storage_manage.semimanagehr.service.structIvt.dao.mapper.StIvtStructivtflowHrBcpMapper">
<select id="queryAll" resultType="java.util.Map">
SELECT
ivt.*,
mater.material_code,
mater.material_name,
mater.material_spec,
attr.stor_name,
attr.stor_name,
attr.sect_name,
unit.unit_name
FROM
st_ivt_structivtflow_hr_bcp ivt
LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id
LEFT JOIN st_ivt_structattr attr ON attr.struct_id = ivt.struct_id
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id
<where>
1 = 1
<if test="query.struct_code != null and query.struct_code != ''">
and (ivt.struct_code LIKE '%${query.struct_code}%' or
ivt.struct_name LIKE '%${query.struct_code}%' )
</if>
<if test="query.material_code != null and query.material_code != ''">
and (mater.material_code LIKE '%${query.material_code}%' or
mater.material_name LIKE '%${query.material_code}%' or
mater.material_spec LIKE '%${query.material_code}%'
)
</if>
<if test="query.bill_code != null and query.bill_code != ''">
and ivt.bill_code LIKE '%${query.bill_code}%'
</if>
<if test="query.change_type_scode != null and query.change_type_scode != ''">
and ivt.change_type_scode = #{query.change_type_scode}
</if>
<if test="query.bill_type_scode != null and query.bill_type_scode != ''">
and ivt.bill_type_scode = #{query.bill_type_scode}
</if>
<if test="query.stor_id != null and query.stor_id != ''">
and ivt.stor_id = #{query.stor_id}
</if>
</where>
order by ivt.change_time desc,ivt.struct_code ASC
</select>
</mapper>

View File

@@ -0,0 +1,37 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt.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.structIvt.dao.StIvtStructivtBcp;
/*
* @author ZZQ
* @Date 2023/5/4 19:49
*/
@Data
public class StructIvtHrBcpQuery extends BaseQuery<StIvtStructivtBcp> {
private String sect_id;
private String struct_search;
private String material_search;
private String material_code;
private String struct_code;
private Boolean is_delete = false;
@Override
public void paramMapping() {
super.doP.put("material_search", QParam.builder().k(new String[]{"material_search"}).type(QueryTEnum.LK).build());
super.doP.put("struct_search", QParam.builder().k(new String[]{"struct_search"}).type(QueryTEnum.LK).build());
}
}

View File

@@ -0,0 +1,62 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtHrBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtHrBcp;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.mapper.StIvtStructivtHrBcpMapper;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dto.StructIvtHrBcpQuery;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
* 仓位库存表 服务实现类
* </p>
*
* @author generator
* @since 2023-05-10
*/
@Service
public class StIvtStructivtHrBcpServiceImpl extends ServiceImpl<StIvtStructivtHrBcpMapper, StIvtStructivtHrBcp> implements IStIvtStructivtHrBcpService {
@Override
public Object packageQuery(StructIvtHrBcpQuery query, PageQuery pageQuery) {
com.github.pagehelper.Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
TableDataInfo build = TableDataInfo.build(this.baseMapper.packageQuery(query));
build.setTotalElements(page.getTotal());
return build;
}
@Override
public StIvtStructivtBcp queryIvtOutOne(JSONObject json) {
return this.baseMapper.queryIvtOutOne(json);
}
@Override
public List<Map> queryAll(StructIvtHrBcpQuery query) {
return this.baseMapper.packageQuery(query);
}
@Override
public Object getBcpIvt(StructIvtHrBcpQuery query, PageQuery pageQuery) {
com.github.pagehelper.Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
List<Map> mst_detail = this.baseMapper.getBcpIvt(query, pageQuery);
TableDataInfo<Map> build = TableDataInfo.build(mst_detail);
build.setTotalElements(page.getTotal());
return build;
}
@Override
public List<Map> getBcpIvtInfo(JSONObject jo) {
return this.baseMapper.getBcpIvtInfo(jo);
}
}

View File

@@ -0,0 +1,135 @@
package org.nl.wms.storage_manage.semimanagehr.service.structIvt.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
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.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
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.CHANGE_BILL_TYPE_ENUM;
import org.nl.wms.storage_manage.basedata.service.record.dto.StIvtStructivtflowDto;
import org.nl.wms.storage_manage.basedata.service.record.dto.StIvtStructivtflowVo;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dto.IvtFlowQuery;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtflowHrService;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtflowHr;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.mapper.StIvtStructivtflowHrBcpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
* <p>
* 仓位库存变动记录表 服务实现类
* </p>
*
* @author generator
* @since 2023-05-10
*/
@Service
public class StIvtStructivtflowHrServiceImpl extends ServiceImpl<StIvtStructivtflowHrBcpMapper, StIvtStructivtflowHr> implements IStIvtStructivtflowHrService {
@Autowired
private IStIvtStructattrService structattrService;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Autowired
protected IStIvtStructattrService iStIvtStructattrService; // 仓位属性服务
@Override
@Transactional
public void recordStructivtFlow(StIvtStructivtflowDto flowDto) {
StIvtStructivtflowHr flow = new StIvtStructivtflowHr();
StIvtStructattr struct_attr = structattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", flowDto.getStruct_code()));
flow.setChange_id(IdUtil.getStringId());
物料信息: {
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", flowDto.getMaterial_id()));
flow.setPcsn(flowDto.getPcsn());
}
仓库信息:{
flow.setStruct_name(struct_attr.getStruct_name());
flow.setStruct_code(struct_attr.getStruct_code());
flow.setStruct_id(struct_attr.getStruct_id());
flow.setStor_id(struct_attr.getStor_id());
}
flow.setBill_code(flowDto.getBill_code());
flow.setChange_type_scode(flowDto.getChange_type_scode().getCode());
flow.setBill_table(flowDto.getBill_table());
flow.setChange_qty(flowDto.getChange_qty());
flow.setResult_qty(flowDto.getResult_qty());
this.save(flow);
struct_attr.setStoragevehicle_code(flowDto.getStoragevehicle_code());
struct_attr.setInv_code(flowDto.getBill_code());
struct_attr.setInv_type(flowDto.getChange_type_scode().getCode());
//判断如果在3个状态之内更新操作
int tag = 1 << CHANGE_BILL_TYPE_ENUM.IMOVEINV_OUT_CONFIRM.getBitType()
| 1 << CHANGE_BILL_TYPE_ENUM.IOSTORINV_IN_CONFIRM.getBitType()
| 1 << CHANGE_BILL_TYPE_ENUM.MOVEINV_IN_CONFIRM.getBitType()
| 1 << CHANGE_BILL_TYPE_ENUM.CHECK_OUT.getBitType()
| 1 << CHANGE_BILL_TYPE_ENUM.IOSTORINV_OUT_CONFIRM.getBitType();
if ((tag &~ 1 << flowDto.getChange_type_scode().getBitType()) != tag){
struct_attr.setInv_code("");
struct_attr.setInv_type("");
}
structattrService.updateById(struct_attr);
}
@Override
@Transactional
public void insetIvtChange(JSONObject json) {
StIvtStructattr ivtDao = iStIvtStructattrService.getById(json.getString("struct_id"));
StIvtStructivtflowHr dao = new StIvtStructivtflowHr();
dao.setChange_id(IdUtil.getStringId());
dao.setStruct_id(json.getString("struct_id"));
dao.setStruct_code(json.getString("struct_code"));
dao.setStruct_name(json.getString("struct_name"));
dao.setMaterial_id(json.getString("material_id"));
dao.setQuality_scode(json.getString("quality_scode"));
dao.setIvt_level(json.getString("ivt_level"));
dao.setIs_active(json.getBoolean("is_active"));
dao.setPcsn(json.getString("pcsn"));
dao.setStor_id(ivtDao.getStor_id());
dao.setChange_type_scode(json.getString("change_type"));
dao.setChange_time(DateUtil.now());
dao.setChange_person_id(SecurityUtils.getCurrentUserId());
dao.setChange_person_name(SecurityUtils.getCurrentNickName());
dao.setChange_qty(json.getBigDecimal("change_qty"));
dao.setResult_qty(json.getBigDecimal("result_qty"));
dao.setQty_unit_id(json.getString("qty_unit_id"));
dao.setProduct_area(json.getString("workshop_id"));
dao.setBill_code(json.getString("bill_code"));
dao.setBill_type_scode(json.getString("bill_type_scode"));
dao.setInv_id(json.getString("inv_id"));
this.save(dao);
}
@Override
public Object queryAll(IvtFlowQuery query, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
TableDataInfo build = TableDataInfo.build(this.baseMapper.queryAll(query));
build.setTotalElements(page.getTotal());
return build;
}
@Override
public List<StIvtStructivtflowVo> queryAll(IvtFlowQuery query) {
List<Map> maps = this.baseMapper.queryAll(query);
List<StIvtStructivtflowVo> list = JSONArray.parseArray(JSON.toJSONString(maps), StIvtStructivtflowVo.class);
return list;
}
}