rev:半成品盘点一体机

This commit is contained in:
2023-07-05 11:20:54 +08:00
parent 1870c02e50
commit bdbd97a7bc
14 changed files with 155 additions and 27 deletions

View File

@@ -52,10 +52,10 @@
der.is_delete = '0'
AND der.status = '10'
<if test="begin_time != null and begin_time != ''">
and der.create_time &lt;= #{begin_time}
and der.create_time &gt;= #{begin_time}
</if>
<if test="end_time != null and end_time != ''">
and der.create_time &gt;= #{end_time}
and der.create_time &lt;= #{end_time}
</if>
<if test="sale_code != null and sale_code != ''">
and der.sale_code LIKE '%${sale_code}%'

View File

@@ -19,6 +19,8 @@ public enum SHUTEnum {
BUSI_CLASSS_CODE(MapOf.of("拆盘", "01", "拼盘", "02")),
//单据类型
BILL_TYPE(MapOf.of("普通拆盘", "51", "普通拼盘", "52")),
//单据类型
REGION_CODE(MapOf.of("半成品拼盘区域", "A1_BCP_PP")),
//单据状态
BILL_STATUS(MapOf.of("生成", "10", "提交", "20", "执行中", "30", "确认", "60", "完成", "99")),
//单据状态

View File

@@ -50,8 +50,8 @@ public class PdaStCpInController {
}
@PostMapping("/getMaterial")
@Log("查询入库点下拉框")
@ApiOperation("查询入库点下拉框")
@Log("查询单据物料")
@ApiOperation("查询单据物料")
public ResponseEntity<Object> getMaterial(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaStCpInService.getMaterial(whereJson), HttpStatus.OK);
}

View File

@@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.storage_manage.CHECKEnum;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.pda.PDAEnum;
import org.nl.wms.storage_manage.pda.service.PdaStBcpCheckService;
@@ -80,7 +82,9 @@ public class PdaStBcpCheckServiceImpl implements PdaStBcpCheckService {
@Override
@Transactional
public JSONObject create(JSONObject whereJson) {
public JSONObject create(JSONObject whereJson1) {
JSONObject whereJson = whereJson1.getJSONObject("from");
// 组织主表数据
JSONObject param = new JSONObject();
@@ -103,7 +107,7 @@ public class PdaStBcpCheckServiceImpl implements PdaStBcpCheckService {
row.put("struct_name", json.getString("struct_name"));
row.put("storagevehicle_code", json.getString("storagevehicle_code"));
row.put("material_id", json.getString("material_id"));
row.put("base_qty", json.getString("base_qty"));
row.put("base_qty", json.getString("canuse_qty"));
row.put("qty_unit_id", json.getString("qty_unit_id"));
row.put("qty_unit_name", json.getString("qty_unit_name"));
@@ -146,7 +150,14 @@ public class PdaStBcpCheckServiceImpl implements PdaStBcpCheckService {
@Override
@Transactional
public JSONObject sendTask(JSONObject whereJson) {
iStIvtCheckmstBcpService.issueTask(whereJson);
JSONObject row = whereJson.getJSONObject("row");
if (!row.getString("status").equals(CHECKEnum.DTL_STATUS.code("生成"))) {
throw new BadRequestException("当前明细已盘点不可下发!");
}
row.put("point_code", whereJson.getString("point_code"));
iStIvtCheckmstBcpService.issueTask(row);
JSONObject result = new JSONObject();
result.put("data", "");
@@ -157,7 +168,7 @@ public class PdaStBcpCheckServiceImpl implements PdaStBcpCheckService {
@Override
@Transactional
public JSONObject confirm(JSONObject whereJson) {
JSONArray rows = whereJson.getJSONArray("rows");
JSONArray rows = whereJson.getJSONArray("row");
List<StIvtCheckdtlBcp> dtlList = JSON.parseArray(JSON.toJSONString(rows), StIvtCheckdtlBcp.class);
@@ -175,7 +186,7 @@ public class PdaStBcpCheckServiceImpl implements PdaStBcpCheckService {
param.put("row",row);
param.put("rows", JSONArray.parseArray(JSON.toJSONString(list)));
iStIvtCheckmstBcpService.confirm(param);
iStIvtCheckmstBcpService.pdaConfirm(param);
}
JSONObject result = new JSONObject();
@@ -186,7 +197,13 @@ public class PdaStBcpCheckServiceImpl implements PdaStBcpCheckService {
@Override
@Transactional
public JSONObject confirmOffer(JSONObject whereJson) {
public JSONObject confirmOffer(JSONObject whereJson1) {
JSONObject whereJson = whereJson1.getJSONObject("row");
if (whereJson.getString("status").equals(CHECKEnum.DTL_STATUS.code("生成"))) {
throw new BadRequestException("请先盘点");
}
JSONObject param = new JSONObject();
JSONObject form = new JSONObject();
@@ -204,7 +221,13 @@ public class PdaStBcpCheckServiceImpl implements PdaStBcpCheckService {
@Override
@Transactional
public JSONObject confirmFinance(JSONObject whereJson) {
public JSONObject confirmFinance(JSONObject whereJson1) {
JSONObject whereJson = whereJson1.getJSONObject("row");
if (whereJson.getString("status").equals(CHECKEnum.DTL_STATUS.code("生成"))) {
throw new BadRequestException("请先盘点");
}
JSONObject param = new JSONObject();
JSONObject form = new JSONObject();

View File

@@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.SHUTEnum;
import org.nl.wms.storage_manage.pda.service.PdaStBcpShutService;
import org.nl.wms.storage_manage.semimanage.service.shutFrame.IStIvtShutframeinvBcpService;
import org.nl.wms.system_manage.service.dict.ISysDictService;
@@ -55,7 +57,7 @@ public class PdaStBcpShutServiceImpl implements PdaStBcpShutService {
@Override
public JSONObject getBillType() {
List<Dict> dictList = iSysDictService.getDictByName("SHUTFRAME_BILL_STATUS");
List<Dict> dictList = iSysDictService.getDictByName("ST_INV_TYPE_SF");
JSONObject result = new JSONObject();
result.put("data", JSONArray.parseArray(JSON.toJSONString(dictList)));
@@ -76,7 +78,14 @@ public class PdaStBcpShutServiceImpl implements PdaStBcpShutService {
@Override
@Transactional
public JSONObject confirm(JSONObject whereJson) {
iStIvtShutframeinvBcpService.confirmOne(whereJson);
JSONObject row = whereJson.getJSONObject("row");
if (!row.getString("work_status").equals(SHUTEnum.WORK_STATUS.code("移出确认"))) {
throw new BadRequestException("执行状态不为【移出确认】!");
}
iStIvtShutframeinvBcpService.confirmOne(row);
JSONObject result = new JSONObject();
result.put("data", "");

View File

@@ -114,7 +114,9 @@ public class PdaStCpInServiceImpl implements PdaStCpInService {
@Override
@Transactional
public JSONObject confirmIn(JSONObject whereJson) {
public JSONObject confirmIn(JSONObject whereJson1) {
JSONObject whereJson = whereJson1.getJSONObject("from");
/*
* 入库单创建
*/
@@ -141,7 +143,7 @@ public class PdaStCpInServiceImpl implements PdaStCpInService {
JSONObject paramDiv = createDivData(whereJson);
// 2.调用PC成品入库服务分配货位
iStIvtIostorinvCpService.divStruct(whereJson);
iStIvtIostorinvCpService.divStruct(paramDiv);
/*
* 设置起点

View File

@@ -37,10 +37,10 @@
and mst.stor_id = #{stor_id}
</if>
<if test="begin_time != null and begin_time != ''">
and mst.create_time &lt;= #{begin_time}
and mst.create_time &gt;= #{begin_time}
</if>
<if test="end_time != null and end_time != ''">
and mst.create_time &gt;= #{end_time}
and mst.create_time &lt;= #{end_time}
</if>
<if test="bill_type != null and bill_type != ''">
and mst.bill_type = #{bill_type}

View File

@@ -45,6 +45,8 @@ public interface IStIvtCheckmstBcpService extends IService<StIvtCheckmstBcp> {
void confirm(JSONObject jo);
void pdaConfirm(JSONObject jo);
void process0(JSONObject jo);
void process1(JSONObject jo);

View File

@@ -7,7 +7,7 @@
dtl.*,
mb.material_code,
mb.material_spec,
dtl.base_qty / mb.net_weight AS qty,
ROUND((dtl.base_qty * 1000 ) / mb.net_weight,3) AS qty,
mst.check_type,
mst.create_time,
mst.create_name
@@ -26,10 +26,10 @@
and mst.stor_id = #{stor_id}
</if>
<if test="begin_time != null and begin_time != ''">
and mst.create_time &lt;= #{begin_time}
and mst.create_time &gt;= #{begin_time}
</if>
<if test="end_time != null and end_time != ''">
and mst.create_time &gt;= #{end_time}
and mst.create_time &lt;= #{end_time}
</if>
<if test="material_code != null and material_code != ''">
and (mb.material_code LIKE '%${material_code}%' or
@@ -40,7 +40,7 @@
attr.struct_name LIKE '%${struct_code}%')
</if>
<if test="storagevehicle_code != null and storagevehicle_code != ''">
and attr.struct_code LIKE '%${storagevehicle_code}%'
and attr.storagevehicle_code LIKE '%${storagevehicle_code}%'
</if>
</where>
</select>

View File

@@ -274,6 +274,94 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
this.updateById(jo_mst);
}
@Override
@Transactional
public void pdaConfirm(JSONObject whereJson) {
JSONObject form = whereJson.getJSONObject("row");
JSONArray rows = whereJson.getJSONArray("rows");
StIvtCheckmstBcp jo_mst = this.getOne(new QueryWrapper<StIvtCheckmstBcp>().eq("check_id", form.getString("check_id")).in("status", new String[]{"10", "30"}));
if (jo_mst == null) {
throw new BadRequestException("盘点单状态异常!");
}
//定义需要需要更新的的点位集合
HashSet<String> set = new HashSet<>();
for (int i = 0; i < rows.size(); i++) {
JSONObject jo = rows.getJSONObject(i);
String status = jo.getString("status");
StIvtCheckdtlBcp dtl = jo.toJavaObject(StIvtCheckdtlBcp.class);
double base_qty = jo.getDoubleValue("base_qty");
//已盘点过的明细不再处理
if ("05,06,07,99".contains(status)) {
checkdtlBcpService.updateById(dtl);
continue;
} else {
checkdtlBcpService.remove(
new QueryWrapper<StIvtCheckdtlBcp>().lambda()
.eq(StIvtCheckdtlBcp::getCheckdtl_id, jo.getString("checkdtl_id"))
);
}
dtl.setStatus(CHECKEnum.DTL_STATUS.code("已盘点"));
dtl.setCheck_optid(SecurityUtils.getCurrentUserId());
dtl.setCheck_optname(SecurityUtils.getCurrentNickName());
dtl.setCheck_time(DateUtil.now());
double fac_qty = jo.getDoubleValue("fac_qty");
//判断盈亏
if (fac_qty > base_qty) {
dtl.setCheck_result("2");
} else if (fac_qty < base_qty) {
dtl.setCheck_result("1");
} else {
dtl.setCheck_result("0");
dtl.setStatus(CHECKEnum.DTL_STATUS.code("确认完成"));
}
if (StrUtil.isEmpty(jo.getString("checkdtl_id"))) {
jo.put("checkdtl_id", IdUtil.getStringId());
}
checkdtlBcpService.save(dtl);
set.add(dtl.getStruct_id());
// 判断是否已下发,是则生成回去的任务
if (dtl.getIs_down().equals("1") && dtl.getStatus().equals(CHECKEnum.DTL_STATUS.code("确认完成"))) {
createBackTask(dtl,jo_mst.getWorkshop_id());
dtl.setStatus(CHECKEnum.DTL_STATUS.code("已盘点"));
dtl.setIs_down("2");
checkdtlBcpService.updateById(dtl);
}
}
jo_mst.setIs_nok(false);
List<StIvtCheckdtlBcp> dtl_list = checkdtlBcpService.list(new QueryWrapper<StIvtCheckdtlBcp>().eq("check_id", form.getString("check_id")).ne("check_result", "0"));
if (dtl_list.size() != 0) {
jo_mst.setIs_nok(true);
}
jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("盘点中"));
List<StIvtCheckdtlBcp> finish_list = checkdtlBcpService.list(new QueryWrapper<StIvtCheckdtlBcp>().eq("check_id", form.getString("check_id")).in("status", new String[]{"99", "07"}));
//说明全部确认
if (finish_list.size() == jo_mst.getDtl_num().intValue()) {
// 判断是否有任务
List<StIvtCheckdtlBcp> collect = finish_list.stream()
.filter(item -> Integer.parseInt(item.getIs_down()) > 0)
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(collect)) {
checkdtlBcpService.update(new UpdateWrapper<StIvtCheckdtlBcp>().set("status", "99").eq("check_id", form.getString("check_id")));
jo_mst.setStatus(CHECKEnum.BILL_STATUS.code("完成"));
jo_mst.setConfirm_optid(SecurityUtils.getCurrentUserId());
jo_mst.setConfirm_optname(SecurityUtils.getCurrentNickName());
jo_mst.setConfirm_time(DateUtil.now());
//锁定起点点位、仓位
set.forEach(struct_id -> structattrService.update(new UpdateWrapper<StIvtStructattr>().set("lock_type", "0").set("inv_code", "").eq("struct_id", struct_id)));
}
}
this.updateById(jo_mst);
}
/*
创建回去的任务
*/

View File

@@ -44,6 +44,7 @@
dtl.fact_qty,
dtl.turnin_struct_code,
dtl.storagevehicle_code_in,
dtl.work_status,
dtl.qty,
mb.material_code,
mb.material_spec
@@ -58,10 +59,10 @@
and mst.stor_id = #{stor_id}
</if>
<if test="begin_time != null and begin_time != ''">
and mst.create_time &lt;= #{begin_time}
and mst.create_time &gt;= #{begin_time}
</if>
<if test="end_time != null and end_time != ''">
and mst.create_time &gt;= #{end_time}
and mst.create_time &lt;= #{end_time}
</if>
<if test="bill_type != null and bill_type != ''">
and mst.bill_type = #{bill_type}
@@ -71,7 +72,7 @@
mb.material_name LIKE '%${material_code}%')
</if>
<if test="storagevehicle_id_in != null and storagevehicle_id_in != ''">
and (dtl.storagevehicle_id_in LIKE '%${storagevehicle_id_in}%' or
and (dtl.storagevehicle_code_in LIKE '%${storagevehicle_id_in}%' or
dtl.storagevehicle_code LIKE '%${storagevehicle_id_in}%')
</if>
</where>

View File

@@ -303,7 +303,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
//查询可用的半成品移出点位
Map map = new HashMap<>();
map.put("region_code", "A1_BCP_PD");
map.put("region_code", SHUTEnum.REGION_CODE.code("半成品拼盘区域"));
List<Map> point_list = pointMapper.canUsePoint(map);
if (point_list.size() < 2) {

View File

@@ -217,7 +217,8 @@
sa.struct_id,
sa.struct_code,
sa.struct_name,
sa.storagevehicle_code
sa.storagevehicle_code,
ROUND((ivt.canuse_qty * 1000) / unit_weight,3) AS qty
FROM
st_ivt_structivt_bcp ivt
LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id

View File

@@ -191,7 +191,7 @@ const defaultForm = {
bill_status: '10',
total_qty: '0',
detail_count: '0',
bill_type: '51',
bill_type: '52',
remark: '',
biz_date: '',
create_mode: '',