Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -12,14 +12,19 @@ public class SysParamConstant {
|
||||
*/
|
||||
public final static String IS_CONNECT_ACS = "is_connect_acs";
|
||||
|
||||
/**
|
||||
* 是否连接无人车
|
||||
*/
|
||||
public final static String IS_NOT_CAR = "is_not_car";
|
||||
|
||||
/**
|
||||
* ACS系统IP
|
||||
*/
|
||||
public final static String ACS_URL = "acs_url";
|
||||
|
||||
/**
|
||||
* ERP系统IP
|
||||
* 无人车系统IP
|
||||
*/
|
||||
public final static String ERP_URL = "erp_url";
|
||||
public final static String CAR_URL = "car_url";
|
||||
|
||||
}
|
||||
|
||||
@@ -38,4 +38,14 @@ public interface MdMeMaterialbaseMapper extends BaseMapper<MdMeMaterialbase> {
|
||||
* @return List<JSONObject>
|
||||
*/
|
||||
List<JSONObject> queryPdaMaterInfo(@Param("param") JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 手持
|
||||
* 库存查询 - 查询物料维护信息
|
||||
* @param whereJson {
|
||||
* search: 物料编码、物料名称
|
||||
* }
|
||||
* @return List<JSONObject>
|
||||
*/
|
||||
List<JSONObject> pdaQueryMaterialInfo(@Param("param") JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -48,4 +48,27 @@
|
||||
ORDER BY mater.update_time Desc
|
||||
</select>
|
||||
|
||||
<select id="pdaQueryMaterialInfo" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
mater.*,
|
||||
class.class_name,
|
||||
class.class_code,
|
||||
unit.unit_code,
|
||||
unit.unit_name
|
||||
FROM
|
||||
md_me_materialbase mater
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = mater.material_type_id
|
||||
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mater.base_unit_id
|
||||
<where>
|
||||
mater.is_used = '1'
|
||||
AND mater.is_delete = '0'
|
||||
<if test="param.search != null and param.search != ''">
|
||||
AND
|
||||
(mater.material_code LIKE #{param.search} or
|
||||
mater.material_name LIKE #{param.search})
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY mater.update_time Desc
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -111,4 +111,31 @@ public interface MdPbStoragevehicleextMapper extends BaseMapper<MdPbStoragevehic
|
||||
* @return JSONObject
|
||||
*/
|
||||
JSONObject queryBagIvt(@Param("param") JSONObject param);
|
||||
|
||||
/**
|
||||
* 手持
|
||||
* 库存查询(根据库区查询)
|
||||
* @param whereJson {
|
||||
* sect_code: 查询类型(库区)
|
||||
* point_code: 点位
|
||||
* material_code: 物料
|
||||
* pcsn: 批号
|
||||
* }
|
||||
* @return List<JSONObject>
|
||||
*/
|
||||
List<JSONObject> pdaQueryIvtSect(@Param("param") JSONObject whereJson);
|
||||
|
||||
|
||||
/**
|
||||
* 手持
|
||||
* 库存查询(外包材库存)
|
||||
* @param whereJson {
|
||||
* sect_code: 查询类型(区域)
|
||||
* point_code: 点位
|
||||
* material_code: 物料
|
||||
* pcsn: 批号
|
||||
* }
|
||||
* @return List<JSONObject>
|
||||
*/
|
||||
List<JSONObject> pdaQueryIvtRegion(@Param("param") JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
<where>
|
||||
ex.material_id = #{material_id}
|
||||
AND
|
||||
st.lock_type = 0
|
||||
st.lock_type IN ('0','2')
|
||||
<if test="pcsn!= null and pcsn!= ''">
|
||||
AND
|
||||
ex.pcsn = #{pcsn}
|
||||
@@ -205,7 +205,7 @@
|
||||
AND
|
||||
ex.canuse_qty > 0
|
||||
AND
|
||||
st.lock_type = 0
|
||||
st.lock_type IN ('0','2')
|
||||
<if test="pcsn!= null and pcsn!= ''">
|
||||
AND
|
||||
ex.pcsn = #{pcsn}
|
||||
@@ -463,4 +463,84 @@
|
||||
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="pdaQueryIvtSect" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
ext.*,
|
||||
material.material_code,
|
||||
material.material_name,
|
||||
material.material_spec,
|
||||
material.material_model,
|
||||
class.class_code,
|
||||
class.class_name,
|
||||
attr.struct_code
|
||||
FROM
|
||||
md_pb_storagevehicleext ext
|
||||
INNER JOIN md_me_materialbase material ON material.material_id = ext.material_id
|
||||
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = material.material_type_id
|
||||
<where>
|
||||
attr.is_used = "1"
|
||||
AND ext.canuse_qty > 0
|
||||
|
||||
<if test="param.sect_code != null and param.sect_code != ''">
|
||||
AND
|
||||
attr.sect_code = #{param.sect_code}
|
||||
</if>
|
||||
|
||||
<if test="param.point_code != null and param.point_code != ''">
|
||||
AND
|
||||
attr.struct_code = #{param.point_code}
|
||||
</if>
|
||||
|
||||
<if test="param.material_code != null and param.material_code != ''">
|
||||
AND
|
||||
material.material_code = #{param.material_code}
|
||||
</if>
|
||||
|
||||
<if test="param.pcsn != null and param.pcsn != ''">
|
||||
AND
|
||||
ext.pcsn = #{param.pcsn}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="pdaQueryIvtRegion" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
pack.qty AS canuse_qty,
|
||||
pack.pcsn,
|
||||
pack.point_code AS struct_code,
|
||||
pack.create_time AS insert_time,
|
||||
material.material_code,
|
||||
material.material_name,
|
||||
material.material_spec,
|
||||
material.material_model,
|
||||
class.class_code,
|
||||
class.class_name,
|
||||
'KG' AS qty_unit_name
|
||||
FROM
|
||||
md_pdm_packaging pack
|
||||
INNER JOIN md_me_materialbase material ON material.material_id = pack.material_id
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = material.material_type_id
|
||||
<where>
|
||||
1 = 1
|
||||
|
||||
<if test="param.point_code != null and param.point_code != ''">
|
||||
AND
|
||||
pack.point_code = #{param.point_code}
|
||||
</if>
|
||||
|
||||
<if test="param.material_code != null and param.material_code != ''">
|
||||
AND
|
||||
material.material_code = #{param.material_code}
|
||||
</if>
|
||||
|
||||
<if test="param.pcsn != null and param.pcsn != ''">
|
||||
AND
|
||||
pack.pcsn = #{param.pcsn}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package org.nl.wms.ext.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.wms.ext.service.NotCarToWmsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车调用WMS 控制层
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/wms/car")
|
||||
@Slf4j
|
||||
public class NotCarToWmsController {
|
||||
|
||||
@Autowired
|
||||
private NotCarToWmsService notCarToWmsService;
|
||||
|
||||
@PostMapping("/materialInfo")
|
||||
@Log(value = "无人车给WMS发送物料点位信息")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> materialInfo(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarToWmsService.materialInfo(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/sendTask")
|
||||
@Log(value = "无人车给下发WMS搬运任务")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> sendTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarToWmsService.sendTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.nl.wms.ext.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.ext.util.BaseResponse;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车调用WMS 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
public interface NotCarToWmsService {
|
||||
|
||||
/**
|
||||
* 无人车给WMS发送物料点位信息
|
||||
* @param whereJson {
|
||||
*
|
||||
* }
|
||||
* @return BaseResponse
|
||||
*/
|
||||
BaseResponse materialInfo(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车给下发WMS搬运任务
|
||||
* @param whereJson {
|
||||
*
|
||||
* }
|
||||
* @return BaseResponse
|
||||
*/
|
||||
BaseResponse sendTask(JSONObject whereJson);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.nl.wms.ext.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.ext.util.BaseResponse;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* WMS调用无人车 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
public interface WmsToNotCarService {
|
||||
|
||||
/**
|
||||
* 通知无人车下步指令
|
||||
* @param whereJson {
|
||||
* to_command: 1-等待,2-回库
|
||||
* }
|
||||
* @return BaseResponse
|
||||
*/
|
||||
BaseResponse sendCommand(JSONObject whereJson);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.nl.wms.ext.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.ext.service.NotCarToWmsService;
|
||||
import org.nl.wms.ext.util.BaseResponse;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车调用WMS 实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class NotCarToWmsServiceImpl implements NotCarToWmsService {
|
||||
|
||||
@Override
|
||||
public BaseResponse materialInfo(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse sendTask(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package org.nl.wms.ext.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.enums.SysParamConstant;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.ext.service.WmsToNotCarService;
|
||||
import org.nl.wms.ext.service.util.AcsResponse;
|
||||
import org.nl.wms.ext.util.BaseResponse;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* WMS调用无人车 实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class WmsToNotCarServiceImpl implements WmsToNotCarService {
|
||||
|
||||
@Override
|
||||
public BaseResponse sendCommand(JSONObject param) {
|
||||
log.info("下发无人车接口sendCommand的输入参数为:-------------------" + param.toString());
|
||||
// 返回参数
|
||||
BaseResponse resultCar;
|
||||
|
||||
// 系统参数类
|
||||
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
|
||||
//判断是否连接无人车系统
|
||||
Param isConnectCar = sysParamService.findByCode(SysParamConstant.IS_NOT_CAR);
|
||||
if (ObjectUtil.isEmpty(isConnectCar)) {
|
||||
return BaseResponse.requestError("系统参数表中:" + SysParamConstant.IS_NOT_CAR + "不存在");
|
||||
}
|
||||
if (isConnectCar.getValue().equals(IOSConstant.ONE)) {
|
||||
return BaseResponse.responseOk("下发成功,未连接无人车系统!");
|
||||
}
|
||||
|
||||
//无人车系统地址ip
|
||||
Param acsUrlParam = sysParamService.findByCode(SysParamConstant.CAR_URL);
|
||||
if (ObjectUtil.isEmpty(acsUrlParam)) {
|
||||
return BaseResponse.requestError("系统参数表中:" + SysParamConstant.CAR_URL + "不存在");
|
||||
}
|
||||
|
||||
String url = acsUrlParam.getValue() + "sendCommand";
|
||||
try {
|
||||
String resultMsg = HttpRequest.post(url)
|
||||
.body(String.valueOf(param))
|
||||
.execute().body();
|
||||
// 格式转换
|
||||
JSONObject result = JSONObject.parseObject(resultMsg);
|
||||
resultCar = JSONObject.toJavaObject(result, AcsResponse.class);
|
||||
log.info("下发无人车接口sendCommand的输出参数为:-------------------" + resultMsg);
|
||||
} catch (Exception e) {
|
||||
//网络不通
|
||||
String msg = e.getMessage();
|
||||
log.error("连接失败:{}", msg);
|
||||
return AcsResponse.requestError("网络不通,操作失败!");
|
||||
}
|
||||
return resultCar;
|
||||
}
|
||||
}
|
||||
@@ -73,6 +73,14 @@ public class BaseResponse implements Serializable {
|
||||
return response;
|
||||
}
|
||||
|
||||
public static BaseResponse requestError(String message) {
|
||||
BaseResponse response = new BaseResponse();
|
||||
response.setStatus(HttpStatus.HTTP_BAD_REQUEST);
|
||||
response.setMessage(message);
|
||||
response.setResponseDate(DateUtil.now());
|
||||
return response;
|
||||
}
|
||||
|
||||
public static BaseResponse responseOk(JSONObject data) {
|
||||
BaseResponse response = new BaseResponse();
|
||||
response.setStatus(HttpStatus.HTTP_OK);
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package org.nl.wms.pda.general_management.controller;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.wms.pda.general_management.service.NotCarService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车对接
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/notCar")
|
||||
@Slf4j
|
||||
public class NotCarController {
|
||||
|
||||
@Autowired
|
||||
private NotCarService notCarService;
|
||||
|
||||
@PostMapping("/queryXhRegion")
|
||||
@Log("无人车卸货 - 查询卸货区下拉框")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryXhRegion() {
|
||||
return new ResponseEntity<>(notCarService.queryXhRegion(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryEndRegion")
|
||||
@Log("无人车卸货 - 查询目的区域下拉框")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryEndRegion() {
|
||||
return new ResponseEntity<>(notCarService.queryEndRegion(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryRegionPoint")
|
||||
@Log("无人车卸货 - 查询区域点位信息")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryRegionPoint(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.queryRegionPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/unload")
|
||||
@Log("无人车卸货 - 卸货")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> unload(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.unload(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/waiting")
|
||||
@Log("无人车卸货 - 等待")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> waiting(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.waiting(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/back")
|
||||
@Log("无人车卸货 - 回库")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> back(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.back(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -33,10 +33,31 @@ public class PdaPointAndPointController {
|
||||
private PdaPointAndPointBoxService pdaPointAndPointBoxService;
|
||||
|
||||
@PostMapping("/createTask")
|
||||
@Log("生成任务")
|
||||
@Log("点对点转运 - 生成任务")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> createTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaPointAndPointBoxService.createTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryPointDtl")
|
||||
@Log("点位更新 - 根据载具/点位查询明细")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryPointDtl(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaPointAndPointBoxService.queryPointDtl(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/bind")
|
||||
@Log("点位更新 - 绑定")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> bind(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaPointAndPointBoxService.bind(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/clearMaterial")
|
||||
@Log("点位更新 - 清物料")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> clearMaterial(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaPointAndPointBoxService.clearMaterial(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package org.nl.wms.pda.general_management.controller;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.wms.pda.general_management.service.PdaQueryIvtService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 手持物料查询
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-07
|
||||
*/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/queryIvt")
|
||||
@Slf4j
|
||||
public class PdaQueryIvtController {
|
||||
|
||||
@Autowired
|
||||
private PdaQueryIvtService pdaQueryIvtService;
|
||||
|
||||
@PostMapping("/queryMaterial")
|
||||
@Log("查询物料维护信息")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryMaterial(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaQueryIvtService.queryMaterial(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryIvt")
|
||||
@Log("库存查询")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryIvt(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaQueryIvtService.queryIvt(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -77,4 +77,25 @@ public class PdaWarehouseController {
|
||||
public ResponseEntity<Object> directlyOutConfirm(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(pdaWarehouseService.directlyOutConfirm(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/insideCodeInsert")
|
||||
@Log("库内合盘 - 扫码插入")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> insideCodeInsert(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(pdaWarehouseService.insideCodeInsert(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryPointVehicle")
|
||||
@Log("库内合盘 - 查询点位或载具")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryPointVehicle(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(pdaWarehouseService.queryPointVehicle(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/confirmInside")
|
||||
@Log("库内合盘 - 确认合盘")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> confirmInside(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(pdaWarehouseService.confirmInside(param), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package org.nl.wms.pda.general_management.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车对接 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
public interface NotCarService {
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询卸货区下拉框
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryXhRegion();
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询目的区域下拉框
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryEndRegion();
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询区域点位信息
|
||||
*
|
||||
* @param whereJson {
|
||||
* region_code: 区域编码
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryRegionPoint(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 卸货
|
||||
*
|
||||
* @param whereJson {
|
||||
* region_code: 目的区域
|
||||
* rows: 列表明细
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse unload(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 等待
|
||||
*
|
||||
* @param whereJson {
|
||||
* <p>
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse waiting(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 回库
|
||||
*
|
||||
* @param whereJson {
|
||||
* <p>
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse back(JSONObject whereJson);
|
||||
}
|
||||
@@ -67,4 +67,16 @@ public interface PdaBuildParamService {
|
||||
* @param io_type 出入类型
|
||||
*/
|
||||
void createIOS(JSONObject param, String io_type, String bill_type);
|
||||
|
||||
/**
|
||||
* 直接创建移库单 (误无任务)
|
||||
* @param param {
|
||||
* rows: [移出仓位库存]
|
||||
* storagevehicle_code: 移入载具
|
||||
* struct_code: 移入点位
|
||||
* total_qty: 总数量
|
||||
* }
|
||||
* @param bill_type 单据类型
|
||||
*/
|
||||
void createMove(JSONObject param, String bill_type);
|
||||
}
|
||||
|
||||
@@ -14,15 +14,57 @@ import org.nl.wms.pda.util.PdaResponse;
|
||||
public interface PdaPointAndPointBoxService {
|
||||
|
||||
/**
|
||||
* 生成任务
|
||||
* 点对点转运 - 生成任务
|
||||
*
|
||||
* @param whereJson {
|
||||
* storagevehicle_code: 载具编码
|
||||
* point_code1: 起点
|
||||
* point_code2: 终点
|
||||
* task_type: 载具类型
|
||||
* task_type: 任务类型
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse createTask(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 点位更新 - 根据载具/点位查询明细
|
||||
* @param whereJson {
|
||||
* point_code: 点位编码
|
||||
* vehicle_code: 载具编码
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryPointDtl(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 点位更新 - 绑定
|
||||
* @param whereJson {
|
||||
* point_code: 点位编码
|
||||
* vehicle_code: 载具编码
|
||||
* rows: 明细
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse bind(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 点位更新 - 清载具
|
||||
* @param whereJson {
|
||||
* point_code: 点位编码
|
||||
* vehicle_code: 载具编码
|
||||
* rows: 明细
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse clearVehicle(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 点位更新 - 清物料
|
||||
* @param whereJson {
|
||||
* point_code: 点位编码
|
||||
* vehicle_code: 载具编码
|
||||
* rows: 明细
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse clearMaterial(JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.nl.wms.pda.general_management.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 手持物料查询 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-07
|
||||
*/
|
||||
public interface PdaQueryIvtService {
|
||||
|
||||
/**
|
||||
* 查询物料维护信息
|
||||
* @param whereJson {
|
||||
* search: 物料编码、物料名称
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryMaterial(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 库存查询
|
||||
* @param whereJson {
|
||||
* sect_code: 查询类型(库区)
|
||||
* point_code: 点位
|
||||
* material_code: 物料
|
||||
* pcsn: 批号
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryIvt(JSONObject whereJson);
|
||||
}
|
||||
@@ -61,4 +61,35 @@ public interface PdaWarehouseService {
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse directlyOutConfirm(JSONObject param);
|
||||
|
||||
/**
|
||||
* 库内合盘 - 扫码插入
|
||||
* @param param {
|
||||
* bag_code: 袋码
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse insideCodeInsert(JSONObject param);
|
||||
|
||||
/**
|
||||
* 库内合盘 - 查询点位或载具
|
||||
* @param param {
|
||||
* storagevehicle_code: 移入载具
|
||||
* struct_code: 移入点位
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryPointVehicle(JSONObject param);
|
||||
|
||||
/**
|
||||
* 库内合盘 - 确认合盘
|
||||
* @param param {
|
||||
* total_qty: 总数量
|
||||
* storagevehicle_code: 移入载具
|
||||
* struct_code: 移入点位
|
||||
* rows: 明细(袋库存明细)
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse confirmInside(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.pda.general_management.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.io.unit.DataUnit;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@@ -15,7 +16,9 @@ import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.config.MapOf;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Sectattr;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
|
||||
import org.nl.wms.pda.general_management.service.PdaBuildParamService;
|
||||
import org.nl.wms.pda.general_management.service.PdaCommonService;
|
||||
@@ -23,13 +26,8 @@ import org.nl.wms.pda.general_management.service.dto.AssemblyPalletParam;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_management.service.IOutBillService;
|
||||
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
|
||||
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInv;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
|
||||
import org.nl.wms.warehouse_management.service.*;
|
||||
import org.nl.wms.warehouse_management.service.dao.*;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
|
||||
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
|
||||
@@ -37,6 +35,7 @@ import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -61,6 +60,24 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
|
||||
@Resource
|
||||
private IOutBillService outBillService;
|
||||
|
||||
/**
|
||||
* 移库主表服务
|
||||
*/
|
||||
@Resource
|
||||
private IStIvtMoveinvService iStIvtMoveinvService;
|
||||
|
||||
/**
|
||||
* 移库明细服务
|
||||
*/
|
||||
@Resource
|
||||
private IStIvtMoveinvdtlService iStIvtMoveinvdtlService;
|
||||
|
||||
/**
|
||||
* 仓位服务
|
||||
*/
|
||||
@Resource
|
||||
private IStructattrService structattrService;
|
||||
|
||||
@Override
|
||||
public void doGroupPallet(JSONObject param, String vehicleCode) {
|
||||
JSONArray rows = param.getJSONArray("rows");
|
||||
@@ -329,4 +346,57 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createMove(JSONObject param, String bill_type) {
|
||||
List<JSONObject> rows = param.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
// 查询移入仓位
|
||||
Structattr inAttrDao = structattrService.getByCode(param.getString("struct_code"));
|
||||
|
||||
// 组织主表
|
||||
StIvtMoveinv moveMst = new StIvtMoveinv();
|
||||
moveMst.setMoveinv_id(IdUtil.getStringId());
|
||||
moveMst.setBill_code(CodeUtil.getNewCode("MOVE_STORE_CODE"));
|
||||
moveMst.setBill_type(bill_type);
|
||||
moveMst.setBiz_date(DateUtil.today());
|
||||
moveMst.setStor_id(inAttrDao.getStor_id());
|
||||
moveMst.setTotal_qty(param.getBigDecimal("total_qty"));
|
||||
moveMst.setDetail_count(BigDecimal.valueOf(rows.size()));
|
||||
moveMst.setBill_status(IOSEnum.MOVE_MST_STATUS.code("完成"));
|
||||
moveMst.setCreate_mode(IOSEnum.CREATE_MODE.code("终端产生"));
|
||||
moveMst.setInput_optid(SecurityUtils.getCurrentUserId());
|
||||
moveMst.setInput_optname(SecurityUtils.getCurrentNickName());
|
||||
moveMst.setInput_time(DateUtil.now());
|
||||
moveMst.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
moveMst.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
moveMst.setUpdate_time(DateUtil.now());
|
||||
moveMst.setConfirm_optid(SecurityUtils.getCurrentUserId());
|
||||
moveMst.setConfirm_optname(SecurityUtils.getCurrentNickName());
|
||||
moveMst.setConfirm_time(DateUtil.now());
|
||||
iStIvtMoveinvService.save(moveMst);
|
||||
// 组织明细
|
||||
List<StIvtMoveinvdtl> moveDtlList = new ArrayList<>();
|
||||
for (JSONObject json : rows) {
|
||||
Structattr outAttr = structattrService.getByCode(json.getString("struct_code"));
|
||||
StIvtMoveinvdtl moveDtl = new StIvtMoveinvdtl();
|
||||
|
||||
moveDtl.setMoveinvdtl_id(IdUtil.getStringId());
|
||||
moveDtl.setMoveinv_id(moveMst.getMoveinv_id());
|
||||
moveDtl.setSeq_no(BigDecimal.ONE);
|
||||
moveDtl.setTurnout_sect_code(outAttr.getSect_code());
|
||||
moveDtl.setTurnout_struct_code(outAttr.getStruct_code());
|
||||
moveDtl.setMaterial_code(json.getString("material_code"));
|
||||
moveDtl.setPcsn(json.getString("pcsn"));
|
||||
moveDtl.setQty_unit_id(json.getString("qty_unit_id"));
|
||||
moveDtl.setQty_unit_name(json.getString("qty_unit_name"));
|
||||
moveDtl.setQty(json.getBigDecimal("canuse_qty"));
|
||||
moveDtl.setTurnin_sect_code(inAttrDao.getSect_code());
|
||||
moveDtl.setTurnin_struct_code(inAttrDao.getStruct_code());
|
||||
moveDtl.setWork_status(IOSEnum.MOVE_DTL_STATUS.code("完成"));
|
||||
moveDtl.setStoragevehicle_code(outAttr.getStoragevehicle_code());
|
||||
moveDtl.setStoragevehicle_code2(inAttrDao.getStoragevehicle_code());
|
||||
moveDtlList.add(moveDtl);
|
||||
}
|
||||
iStIvtMoveinvdtlService.saveBatch(moveDtlList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
package org.nl.wms.pda.general_management.service.impl;
|
||||
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.JSONObjectOf;
|
||||
import org.nl.wms.ext.service.WmsToNotCarService;
|
||||
import org.nl.wms.ext.util.BaseResponse;
|
||||
import org.nl.wms.pda.general_management.service.NotCarService;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseRegionService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseRegion;
|
||||
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.PdaNotCarUnloadTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车对接 实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
@Service
|
||||
public class NotCarServiceImpl implements NotCarService {
|
||||
|
||||
/**
|
||||
* 区域服务
|
||||
*/
|
||||
@Resource
|
||||
private ISchBaseRegionService iSchBaseRegionService;
|
||||
|
||||
/**
|
||||
* 点位mapper
|
||||
*/
|
||||
@Resource
|
||||
private SchBasePointMapper schBasePointMapper;
|
||||
|
||||
/**
|
||||
* 无人车卸货任务类
|
||||
*/
|
||||
@Resource
|
||||
private PdaNotCarUnloadTask pdaNotCarUnloadTask;
|
||||
|
||||
/**
|
||||
* wms调用无人车系统服务
|
||||
*/
|
||||
@Resource
|
||||
private WmsToNotCarService wmsToNotCarService;
|
||||
|
||||
@Override
|
||||
public PdaResponse queryXhRegion() {
|
||||
List<SchBaseRegion> list = iSchBaseRegionService.list(
|
||||
new QueryWrapper<SchBaseRegion>().lambda()
|
||||
.in(SchBaseRegion::getRegion_code, IOSEnum.REGION_CODE.code("无人车对接区(拆包)"),
|
||||
IOSEnum.REGION_CODE.code("无人车对接区(成品)")
|
||||
)
|
||||
);
|
||||
|
||||
return PdaResponse.requestParamOk(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryEndRegion() {
|
||||
List<SchBaseRegion> list = iSchBaseRegionService.list(
|
||||
new QueryWrapper<SchBaseRegion>().lambda()
|
||||
.in(SchBaseRegion::getRegion_code, IOSEnum.REGION_CODE.code("无人车卸货缓存区"))
|
||||
);
|
||||
|
||||
return PdaResponse.requestParamOk(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryRegionPoint(JSONObject whereJson) {
|
||||
return PdaResponse.requestParamOk(schBasePointMapper.queryRegionPoint(whereJson));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse unload(JSONObject whereJson) {
|
||||
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
// 查询可用点位
|
||||
List<SchBasePoint> pointList = divPoint(rows.size(), whereJson.getString("region_code"));
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject json = rows.get(i);
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", json.getString("point_code"));
|
||||
jsonTask.put("point_code2", pointList.get(i).getPoint_code());
|
||||
jsonTask.put("material_id", json.getString("class_code"));
|
||||
pdaNotCarUnloadTask.create(jsonTask);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse waiting(JSONObject whereJson) {
|
||||
BaseResponse response = wmsToNotCarService.sendCommand(JSONObjectOf.of("to_command", IOSConstant.ONE));
|
||||
if (response.getStatus() != HttpStatus.HTTP_OK) {
|
||||
throw new BadRequestException(response.getMessage());
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse back(JSONObject whereJson) {
|
||||
BaseResponse response = wmsToNotCarService.sendCommand(JSONObjectOf.of("to_command", IOSConstant.TWO));
|
||||
if (response.getStatus() != HttpStatus.HTTP_OK) {
|
||||
throw new BadRequestException(response.getMessage());
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据数量找到对应可用点位
|
||||
*
|
||||
* @param size 数量
|
||||
* @param region_code 区域编码
|
||||
* @return List<SchBasePoint>
|
||||
*/
|
||||
private List<SchBasePoint> divPoint(int size, String region_code) {
|
||||
List<SchBasePoint> pointList = schBasePointMapper.selectList(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.eq(SchBasePoint::getRegion_code, region_code)
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.and(row -> row.isNull(SchBasePoint::getIng_task_code)
|
||||
.or().eq(SchBasePoint::getIng_task_code,"")
|
||||
)
|
||||
.orderByAsc(SchBasePoint::getPoint_code)
|
||||
);
|
||||
|
||||
if (pointList.size() < size) {
|
||||
throw new BadRequestException("当前区域空位不够,当前区域剩余空位【" + pointList.size() + "】");
|
||||
}
|
||||
return pointList;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,22 @@
|
||||
package org.nl.wms.pda.general_management.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pda.general_management.service.PdaPointAndPointBoxService;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.sch_manage.service.PointToPointService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -24,9 +35,80 @@ public class PdaPointAndPointServiceImpl implements PdaPointAndPointBoxService {
|
||||
@Autowired
|
||||
private PointToPointService pointToPointService;
|
||||
|
||||
/**
|
||||
* 点位mapper服务
|
||||
*/
|
||||
@Autowired
|
||||
private SchBasePointMapper schBasePointMapper;
|
||||
|
||||
/**
|
||||
* 组盘服务
|
||||
*/
|
||||
@Autowired
|
||||
private IMdPbGroupplateService iMdPbGroupplateService;
|
||||
|
||||
@Override
|
||||
public PdaResponse createTask(JSONObject whereJson) {
|
||||
pointToPointService.create(whereJson);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryPointDtl(JSONObject whereJson) {
|
||||
return PdaResponse.requestParamOk(schBasePointMapper.pdaQueryPointDtl(whereJson));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse bind(JSONObject whereJson) {
|
||||
// 查询当前点位信息
|
||||
SchBasePoint pointDao = schBasePointMapper.selectById(whereJson.getString("point_code"));
|
||||
if (ObjectUtil.isNotEmpty(pointDao.getVehicle_code())) {
|
||||
throw new BadRequestException("当前点位存在载具【"+pointDao.getVehicle_code()+"】");
|
||||
}
|
||||
pointDao.setVehicle_code(whereJson.getString("vehicle_code"));
|
||||
pointDao.setPoint_status(IOSEnum.POINT_STATUS.code("有箱有料"));
|
||||
schBasePointMapper.updateById(pointDao);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse clearVehicle(JSONObject whereJson) {
|
||||
// 查询当前点位信息
|
||||
SchBasePoint pointDao = schBasePointMapper.selectById(whereJson.getString("point_code"));
|
||||
pointDao.setVehicle_code("");
|
||||
pointDao.setPoint_status(IOSEnum.POINT_STATUS.code("空位"));
|
||||
schBasePointMapper.updateById(pointDao);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse clearMaterial(JSONObject whereJson) {
|
||||
// 查询当前点位信息
|
||||
SchBasePoint pointDao = schBasePointMapper.selectById(whereJson.getString("point_code"));
|
||||
if (ObjectUtil.isEmpty(pointDao.getVehicle_code())) {
|
||||
throw new BadRequestException("当前点位不存在载具");
|
||||
}
|
||||
|
||||
// 查询组盘信息
|
||||
List<GroupPlate> lateList = iMdPbGroupplateService.list(
|
||||
new QueryWrapper<GroupPlate>().lambda()
|
||||
.eq(GroupPlate::getVehicle_code, pointDao.getVehicle_code())
|
||||
);
|
||||
// 校验组盘信息不能为入库状态
|
||||
boolean is_in = lateList.stream()
|
||||
.anyMatch(row -> row.getStatus().equals(IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
if (is_in) {
|
||||
throw new BadRequestException("当前载具存在入库状态组盘信息【"+pointDao.getVehicle_code()+"】");
|
||||
}
|
||||
|
||||
// 删除组盘信息
|
||||
iMdPbGroupplateService.remove(
|
||||
new QueryWrapper<GroupPlate>().lambda()
|
||||
.eq(GroupPlate::getVehicle_code, pointDao.getVehicle_code())
|
||||
);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package org.nl.wms.pda.general_management.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper;
|
||||
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
|
||||
import org.nl.wms.pda.general_management.service.PdaQueryIvtService;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 手持物料查询 实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-01-07
|
||||
*/
|
||||
@Service
|
||||
public class PdaQueryIvtServiceImpl implements PdaQueryIvtService {
|
||||
|
||||
/**
|
||||
* 物料mapper
|
||||
*/
|
||||
@Autowired
|
||||
private MdMeMaterialbaseMapper mdMeMaterialbaseMapper;
|
||||
|
||||
/**
|
||||
* 库存mapper
|
||||
*/
|
||||
@Autowired
|
||||
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
|
||||
|
||||
@Override
|
||||
public PdaResponse queryMaterial(JSONObject whereJson) {
|
||||
return PdaResponse.requestParamOk(mdMeMaterialbaseMapper.pdaQueryMaterialInfo(whereJson));
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryIvt(JSONObject whereJson) {
|
||||
List<JSONObject> resultList;
|
||||
// 判断是否外包材
|
||||
if (whereJson.getString("sect_code").equals(IOSConstant.WBC01)) {
|
||||
resultList = mdPbStoragevehicleextMapper.pdaQueryIvtRegion(whereJson);
|
||||
} else {
|
||||
resultList = mdPbStoragevehicleextMapper.pdaQueryIvtSect(whereJson);
|
||||
}
|
||||
return PdaResponse.requestParamOk(resultList);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -48,6 +49,13 @@ public class PdaUpdatePointServiceImpl implements PdaPublicInterfaceService {
|
||||
new QueryWrapper<SchBaseRegion>().lambda()
|
||||
.eq(ObjectUtil.isNotEmpty(region_code), SchBaseRegion::getRegion_code, region_code)
|
||||
);
|
||||
return PdaResponse.requestParamOk(regionList);
|
||||
List<JSONObject> collect = regionList.stream()
|
||||
.map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), JSONObject.class))
|
||||
.collect(Collectors.toList());
|
||||
collect.forEach(item -> {
|
||||
item.put("text", item.getString("region_name"));
|
||||
item.put("value", item.getString("region_code"));
|
||||
});
|
||||
return PdaResponse.requestParamOk(collect);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.MapOf;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
|
||||
import org.nl.wms.basedata_manage.service.ISectattrService;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
|
||||
@@ -36,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -78,6 +80,12 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
@Resource
|
||||
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
|
||||
|
||||
/**
|
||||
* 载具扩展信息服务
|
||||
*/
|
||||
@Resource
|
||||
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
|
||||
|
||||
@Override
|
||||
public PdaResponse getPalletAssembly(JSONObject param) {
|
||||
String search = param.getString("search");
|
||||
@@ -109,7 +117,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
Structattr startStruct = structattrService.getByCode(search);
|
||||
if (ObjectUtil.isEmpty(startStruct)) {
|
||||
vehicleCode = search;
|
||||
List<Structattr> points = structattrService.getByVehicleCode(search, IOSEnum.LOCK_TYPE.code("未锁定"), true);
|
||||
List<Structattr> points = structattrService.getByVehicleCode(search, IOSEnum.LOCK_TYPE.code("未锁定"), true);
|
||||
if (points.size() != 1) {
|
||||
throw new BadRequestException(points.size() > 1
|
||||
? "该托盘号绑定在多个点位" + points.stream().map(Structattr::getStruct_code).collect(Collectors.toList()) + ",请检查!"
|
||||
@@ -171,12 +179,20 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
public PdaResponse queryReceiveSect() {
|
||||
List<Sectattr> sectList = sectattrService.list(
|
||||
new QueryWrapper<Sectattr>().lambda()
|
||||
.eq(Sectattr::getStor_id, IOSEnum.STOR_ID.code("物料室仓库"))
|
||||
.in(Sectattr::getStor_id, IOSEnum.STOR_ID.code("物料室仓库"),IOSEnum.STOR_ID.code("内包材仓库"))
|
||||
.eq(Sectattr::getIs_delete, IOSConstant.ZERO)
|
||||
.eq(Sectattr::getIs_used, IOSConstant.ONE)
|
||||
);
|
||||
|
||||
return PdaResponse.requestParamOk(sectList);
|
||||
List<JSONObject> collect = sectList.stream()
|
||||
.map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), JSONObject.class))
|
||||
.collect(Collectors.toList());
|
||||
collect.forEach(item -> {
|
||||
item.put("text", item.getString("sect_name"));
|
||||
item.put("value", item.getString("sect_code"));
|
||||
});
|
||||
|
||||
return PdaResponse.requestParamOk(collect);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -195,7 +211,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
// 判断入库点位是否存在
|
||||
SchBasePoint pointDao = pointService.getById(param.getString("point_code"));
|
||||
if (ObjectUtil.isEmpty(pointDao)) {
|
||||
throw new BadRequestException("当前入库点位不存在【"+param.getString("point_code")+"】");
|
||||
throw new BadRequestException("当前入库点位不存在【" + param.getString("point_code") + "】");
|
||||
}
|
||||
|
||||
// 组织入库单创建
|
||||
@@ -238,7 +254,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
try {
|
||||
if (tryLock) {
|
||||
// 创建出库单据
|
||||
defaultPdaBuildParam.createIOS(param,IOSEnum.IO_TYPE.code("出库"),IOSEnum.OUT_BILL_TYPE.code("直接出库"));
|
||||
defaultPdaBuildParam.createIOS(param, IOSEnum.IO_TYPE.code("出库"), IOSEnum.OUT_BILL_TYPE.code("直接出库"));
|
||||
List<JSONObject> rows = param.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
|
||||
for (JSONObject json : rows) {
|
||||
@@ -251,10 +267,10 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
// 删除此托盘、物料、批次的组盘信息
|
||||
groupplateService.remove(
|
||||
new QueryWrapper<GroupPlate>().lambda()
|
||||
.eq(GroupPlate::getVehicle_code, json.getString("vehicle_code"))
|
||||
.eq(GroupPlate::getMaterial_id, json.getString("material_id"))
|
||||
.eq(GroupPlate::getPcsn, json.getString("pcsn"))
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
.eq(GroupPlate::getVehicle_code, json.getString("vehicle_code"))
|
||||
.eq(GroupPlate::getMaterial_id, json.getString("material_id"))
|
||||
.eq(GroupPlate::getPcsn, json.getString("pcsn"))
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
);
|
||||
// 判断此载具下是否还有其他库存
|
||||
List<MdPbStoragevehicleext> ivtList = mdPbStoragevehicleextMapper.selectList(
|
||||
@@ -272,7 +288,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
ivtDao.setCanuse_qty(BigDecimal.valueOf(new_qty));
|
||||
mdPbStoragevehicleextMapper.updateById(ivtDao);
|
||||
// 减去组盘重量
|
||||
GroupPlate groupDao = groupplateService.getById("group_id");
|
||||
GroupPlate groupDao = groupplateService.getById(json.getString("group_id"));
|
||||
double group_qty = NumberUtil.sub(groupDao.getQty(), json.getBigDecimal("canuse_qty")).doubleValue();
|
||||
if (group_qty == 0) {
|
||||
// 删除组盘信息
|
||||
@@ -294,4 +310,97 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse insideCodeInsert(JSONObject param) {
|
||||
return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.queryBagIvt(param));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryPointVehicle(JSONObject param) {
|
||||
String storagevehicle_code = param.getString("storagevehicle_code");
|
||||
String struct_code = param.getString("struct_code");
|
||||
|
||||
Structattr attrDao = structattrService.getOne(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(ObjectUtil.isNotEmpty(storagevehicle_code), Structattr::getStoragevehicle_code, storagevehicle_code)
|
||||
.eq(ObjectUtil.isNotEmpty(struct_code), Structattr::getStruct_code, struct_code)
|
||||
.eq(Structattr::getIs_delete, IOSConstant.ZERO)
|
||||
.eq(Structattr::getIs_used, IOSConstant.ONE)
|
||||
.ne(Structattr::getIs_emptyvehicle, IOSConstant.ONE)
|
||||
);
|
||||
|
||||
if (ObjectUtil.isEmpty(attrDao)) {
|
||||
throw new BadRequestException("当前点位/载具不存在!");
|
||||
}
|
||||
return PdaResponse.requestParamOk(attrDao);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
@Transactional
|
||||
public PdaResponse confirmInside(JSONObject param) {
|
||||
RLock lock = redissonClient.getLock("lock:confirmInside");
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
// 创建移库单据(无任务)
|
||||
defaultPdaBuildParam.createMove(param, IOSEnum.MOVE_BILL_TYPE.code("库内移库"));
|
||||
|
||||
List<JSONObject> rows = param.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
for (JSONObject json : rows) {
|
||||
MdPbStoragevehicleext ivtDao = mdPbStoragevehicleextMapper.selectById(json.getString("storagevehicleext_id"));
|
||||
// 减去数量
|
||||
double new_qty = NumberUtil.sub(ivtDao.getCanuse_qty(), json.getBigDecimal("canuse_qty")).doubleValue();
|
||||
if (new_qty == 0) {
|
||||
// 删除原载具库存信息
|
||||
mdPbStoragevehicleextMapper.deleteById(ivtDao);
|
||||
|
||||
// 判断此载具下是否还有其他库存
|
||||
List<MdPbStoragevehicleext> ivtList = mdPbStoragevehicleextMapper.selectList(
|
||||
new QueryWrapper<MdPbStoragevehicleext>().lambda()
|
||||
.eq(MdPbStoragevehicleext::getStoragevehicle_code, json.getString("vehicle_code"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(ivtList)) {
|
||||
// 变更仓位载具为空载具
|
||||
Structattr attrDao = structattrService.getById(json.getString("struct_id"));
|
||||
attrDao.setIs_emptyvehicle(IOSConstant.ONE);
|
||||
structattrService.updateById(attrDao);
|
||||
}
|
||||
} else {
|
||||
// 更新原载具库存数量
|
||||
ivtDao.setCanuse_qty(BigDecimal.valueOf(new_qty));
|
||||
mdPbStoragevehicleextMapper.updateById(ivtDao);
|
||||
}
|
||||
|
||||
// 新增新载具库存信息
|
||||
List<JSONObject> updateIvtList = new ArrayList<>();
|
||||
JSONObject jsonIvt = new JSONObject();
|
||||
jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_ADD_CANUSE);
|
||||
jsonIvt.put("storagevehicle_code", param.getString("storagevehicle_code"));
|
||||
jsonIvt.put("bag_code", json.getString("bag_code"));
|
||||
jsonIvt.put("material_id", ivtDao.getMaterial_id());
|
||||
jsonIvt.put("pcsn", ivtDao.getPcsn());
|
||||
jsonIvt.put("qty_unit_id", ivtDao.getQty_unit_id());
|
||||
jsonIvt.put("qty_unit_name", ivtDao.getQty_unit_name());
|
||||
jsonIvt.put("change_qty", json.getString("canuse_qty"));
|
||||
updateIvtList.add(jsonIvt);
|
||||
iMdPbStoragevehicleextService.updateIvt(updateIvtList);
|
||||
|
||||
// 更新组盘信息
|
||||
GroupPlate groupDao = groupplateService.getById(json.getString("group_id"));
|
||||
groupDao.setVehicle_code(param.getString("storagevehicle_code"));
|
||||
groupplateService.updateById(groupDao);
|
||||
}
|
||||
} else {
|
||||
throw new BadRequestException("当前业务繁忙,稍后再试...");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,7 +76,10 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
|
||||
if (ObjectUtil.isEmpty(pointDao)) {
|
||||
throw new BadRequestException("当前点位不存在!【" + whereJson.getString("point_code") + "】");
|
||||
}
|
||||
return pdaPublicInterfaceService.queryRegionDropdown(JSONObjectOf.of("region", pointDao.getRegion_code()));
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("region_code",pointDao.getRegion_code());
|
||||
return pdaPublicInterfaceService.queryRegionDropdown(jsonObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -170,7 +173,14 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
|
||||
.eq(SchBasePoint::getRegion_code, IOSEnum.REGION_CODE.code("外包材区域"))
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
);
|
||||
return PdaResponse.requestParamOk(pointDaoList);
|
||||
List<JSONObject> collect = pointDaoList.stream()
|
||||
.map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), JSONObject.class))
|
||||
.collect(Collectors.toList());
|
||||
collect.forEach(item -> {
|
||||
item.put("text", item.getString("point_name"));
|
||||
item.put("value", item.getString("point_code"));
|
||||
});
|
||||
return PdaResponse.requestParamOk(collect);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,7 +26,7 @@ public interface PointToPointService {
|
||||
IPage<JSONObject> queryAll(Map whereJson, PageQuery page);
|
||||
|
||||
/**
|
||||
* 新增载具入库
|
||||
* 新增点对点任务
|
||||
*
|
||||
* @param whereJson {
|
||||
* storagevehicle_code: 载具编码
|
||||
|
||||
@@ -58,4 +58,24 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
List<JSONObject> getPointDtl(@Param("param") JSONObject whereJson);
|
||||
|
||||
List<SchBasePoint> getCanUsePointByRegion(String regionCode);
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询区域点位信息
|
||||
* @param whereJson {
|
||||
* region_code: 区域编码
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
List<JSONObject> queryRegionPoint(@Param("param") JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 手持功能
|
||||
* 点位更新 - 根据载具/点位查询明细
|
||||
* @param whereJson {
|
||||
* point_code: 点位编码
|
||||
* vehicle_code: 载具编码
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
List<JSONObject> pdaQueryPointDtl(@Param("param") JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -123,4 +123,52 @@
|
||||
AND ( t.point_code1 = p.point_code
|
||||
OR t.point_code2 = p.point_code ))
|
||||
</select>
|
||||
|
||||
<select id="queryRegionPoint" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
point.*,
|
||||
class.class_code,
|
||||
class.class_name
|
||||
FROM
|
||||
sch_base_point point
|
||||
LEFT JOIN md_pb_classstandard class ON point.can_material_type = class.class_code
|
||||
<where>
|
||||
IFNULL(point.can_material_type, '') != ''
|
||||
<if test="param.region_code != null and param.region_code != ''">
|
||||
AND
|
||||
point.region_code = #{param.region_code}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="pdaQueryPointDtl" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
point.*,
|
||||
mater.material_id,
|
||||
mater.material_code,
|
||||
mater.material_name,
|
||||
late.pcsn,
|
||||
late.qty,
|
||||
late.qty_unit_id,
|
||||
late.qty_unit_name
|
||||
FROM
|
||||
sch_base_point point
|
||||
LEFT JOIN md_pb_groupplate late ON point.vehicle_code = late.vehicle_code
|
||||
LEFT JOIN md_me_materialbase mater ON mater.material_id = late.material_id
|
||||
<where>
|
||||
point.is_used = '1'
|
||||
|
||||
<if test="param.point_code != null and param.point_code != ''">
|
||||
AND
|
||||
point.point_code = #{param.point_code}
|
||||
</if>
|
||||
|
||||
<if test="param.vehicle_code != null and param.vehicle_code != ''">
|
||||
AND
|
||||
point.vehicle_code = #{param.vehicle_code}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
INNER JOIN sch_base_taskconfig config ON task.config_code = config.config_code
|
||||
<where>
|
||||
task.is_delete = '0'
|
||||
AND task_status = '5'
|
||||
AND task_status IN ('6','5')
|
||||
<if test="param.search != null and param.search != ''">
|
||||
AND
|
||||
(task.vehicle_code = #{param.search} or
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
package org.nl.wms.sch_manage.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.PointToPointService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -38,6 +41,12 @@ public class PointToPointServiceImpl implements PointToPointService {
|
||||
@Resource
|
||||
private PdaPointTask pdaPointTask;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Resource
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
|
||||
@@ -52,6 +61,15 @@ public class PointToPointServiceImpl implements PointToPointService {
|
||||
if (whereJson.getString("point_code1").equals(whereJson.getString("point_code2"))) {
|
||||
throw new BadRequestException("起点和终点不能相同!");
|
||||
}
|
||||
SchBasePoint point_code1 = iSchBasePointService.getById(whereJson.getString("point_code1"));
|
||||
if (ObjectUtil.isEmpty(point_code1)) {
|
||||
throw new BadRequestException("起点不存在!【"+whereJson.getString("point_code1")+"】");
|
||||
}
|
||||
SchBasePoint point_code2 = iSchBasePointService.getById(whereJson.getString("point_code2"));
|
||||
if (ObjectUtil.isEmpty(point_code2)) {
|
||||
throw new BadRequestException("终点不存在!【"+whereJson.getString("point_code2")+"】");
|
||||
}
|
||||
|
||||
// 创建点对点任务
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", whereJson.getString("point_code1"));
|
||||
|
||||
@@ -28,7 +28,7 @@ import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 内包材送入任务类
|
||||
* 外包材送入任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
@@ -122,9 +122,7 @@ public class PackagingMiddleTask extends AbstractTask {
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
taskService.updateById(taskObj);
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -150,8 +148,8 @@ public class PackagingMiddleTask extends AbstractTask {
|
||||
// 跟更新库存点位
|
||||
iMdPdmPackagingService.update(
|
||||
new UpdateWrapper<MdPdmPackaging>().lambda()
|
||||
.set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3())
|
||||
.eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
package org.nl.wms.sch_manage.service.util.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.ACSTaskTypeEnum;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
import org.nl.wms.sch_manage.service.util.TaskType;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车卸货任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
@Component(value = "PdaNotCarUnloadTask")
|
||||
@TaskType("PdaNotCarUnloadTask")
|
||||
public class PdaNotCarUnloadTask extends AbstractTask {
|
||||
|
||||
/**
|
||||
* 任务服务类
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Resource
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(PdaNotCarUnloadTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setMaterial_id(json.getString("material_id"));
|
||||
task.setMaterial_qty(json.getBigDecimal("material_qty"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setRemark(json.getString("remark"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
taskService.save(task);
|
||||
|
||||
// 下发任务
|
||||
this.sendTaskOne(task.getTask_id());
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcsTaskDto sendAcsParam(String taskId) {
|
||||
SchBaseTask taskDao = taskService.getById(taskId);
|
||||
|
||||
// 组织下发给acs的数据
|
||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||
acsTaskDto.setExt_task_id(taskDao.getTask_id());
|
||||
acsTaskDto.setTask_code(taskDao.getTask_code());
|
||||
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
|
||||
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||
acsTaskDto.setPriority(taskDao.getPriority());
|
||||
acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
|
||||
|
||||
acsTaskDto.setVehicle_type(IOSConstant.ONE);
|
||||
acsTaskDto.setIs_wait(IOSConstant.ZERO);
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
|
||||
|
||||
acsTaskDto.setPriority(IOSConstant.ONE);
|
||||
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
|
||||
|
||||
return acsTaskDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
// 更新明细状态
|
||||
this.executingTask(taskObj);
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
|
||||
throw new BadRequestException("只能取消生成中的任务!");
|
||||
}
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskConfirm(String task_code) {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void finishTask(SchBaseTask taskObj) {
|
||||
// 更新起点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getVehicle_code, "")
|
||||
.set(SchBasePoint::getCan_material_type, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||
.set(SchBasePoint::getCan_material_type, taskObj.getMaterial_id())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已完成");
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已取消");
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,6 @@ import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.sch_manage.enums.TaskEnum;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
@@ -52,12 +49,6 @@ public class PdaPointTask extends AbstractTask {
|
||||
@Resource
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
/**
|
||||
* 仓位服务
|
||||
*/
|
||||
@Resource
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
@@ -70,12 +61,6 @@ public class PdaPointTask extends AbstractTask {
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setMaterial_id(json.getString("material_id"));
|
||||
task.setMaterial_qty(json.getBigDecimal("material_qty"));
|
||||
if (ObjectUtil.isEmpty(json.getString("task_type"))) {
|
||||
task.setTask_type(IOSConstant.ONE);
|
||||
} else {
|
||||
task.setTask_type(json.getString("task_type"));
|
||||
}
|
||||
task.setExt_group_data(json.getString("ext_group_data"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setContact_task(json.getString("contact_task"));
|
||||
@@ -177,28 +162,13 @@ public class PdaPointTask extends AbstractTask {
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||
.set(Structattr::getStoragevehicle_code, "")
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||
.set(SchBasePoint::getIng_task_code, taskObj.getTask_id())
|
||||
.set(taskObj.getTask_type().equals(TaskEnum.TASK_TYPE.code("载具")),
|
||||
SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空载具"))
|
||||
.set(!taskObj.getTask_type().equals(TaskEnum.TASK_TYPE.code("载具")),
|
||||
SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
);
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已完成");
|
||||
@@ -208,27 +178,12 @@ public class PdaPointTask extends AbstractTask {
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
// 更新起点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
);
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
);
|
||||
iStructattrService.update(
|
||||
new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已取消");
|
||||
|
||||
@@ -47,6 +47,11 @@ public class IOSConstant {
|
||||
*/
|
||||
public final static String AGVZJZ001 = "AGVZJZ001";
|
||||
|
||||
/**
|
||||
* 手持-库存查询-类型类型下拉框- 内包材值
|
||||
*/
|
||||
public final static String WBC01 = "WBC01";
|
||||
|
||||
/**
|
||||
* 更新库存状态:加可用(插入数据)
|
||||
*/
|
||||
|
||||
@@ -87,7 +87,7 @@ public enum IOSEnum {
|
||||
PLACEMENT_TYPE(MapOf.of("深货位", "1", "浅货位", "2")),
|
||||
|
||||
// 仓库ID
|
||||
STOR_ID(MapOf.of("物料室仓库", "1582991156504039424")),
|
||||
STOR_ID(MapOf.of("物料室仓库", "1582991156504039424","内包材仓库","1582991156504039425")),
|
||||
|
||||
// 库区编码
|
||||
SECT_CODE(MapOf.of("合格区", "HG01", "待检区", "DJ01", "不合格区", "BHG01", "大料箱区", "DLX01")),
|
||||
@@ -128,7 +128,8 @@ public enum IOSEnum {
|
||||
|
||||
// 区域编码
|
||||
REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01"
|
||||
, "外包材区域", "WBCZC01", "空托盘堆叠区域", "EMPDD01"
|
||||
, "外包材区域", "WBCZC01", "空托盘堆叠区域", "EMPDD01", "无人车对接区(拆包)", "WRCDJ01"
|
||||
, "无人车对接区(成品)", "WRCDJ02", "无人车卸货缓存区", "WRCXHHC01"
|
||||
)),
|
||||
|
||||
;
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
md_pb_groupplate late
|
||||
INNER JOIN md_me_materialbase mater ON mater.material_id = late.material_id
|
||||
INNER JOIN md_cs_supplierbase supp ON supp.supp_code = late.supp_code
|
||||
INNER JOIN md_pb_classstandard class ON class.class_id = mater.material_type_id
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = mater.material_type_id
|
||||
<where>
|
||||
late.status = '1'
|
||||
|
||||
|
||||
@@ -110,9 +110,9 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
|
||||
GroupPlate groupPlate = tableData.get(0);
|
||||
boolean is_like = tableData.stream()
|
||||
.allMatch(row -> row.getMaterial_id().equals(groupPlate.getMaterial_id()));
|
||||
}
|
||||
if (!is_yl) {
|
||||
throw new BadRequestException("原料组盘物料必须相同!");
|
||||
if (!is_like) {
|
||||
throw new BadRequestException("原料组盘物料必须相同!");
|
||||
}
|
||||
}
|
||||
|
||||
List<GroupPlate> createList = tableData.stream()
|
||||
|
||||
@@ -1095,6 +1095,10 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
@Override
|
||||
@Transactional
|
||||
public void createTask(IOStorInvDis ioStorInvDis, String point_code, IOStorInv ioStorInv) {
|
||||
IOStorInvDis newDis = ioStorInvDisMapper.selectById(ioStorInvDis.getIostorinvdis_id());
|
||||
if (newDis.getWork_status().equals(IOSEnum.INBILL_DIS_STATUS.code("生成"))) {
|
||||
return;
|
||||
}
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
@@ -1112,14 +1116,22 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
AbstractTask task = taskFactory.getTask(IOSEnum.OUT_CONFIG_CODE.code(ioStorInv.getBill_type()));
|
||||
String task_id = task.create(task_form);
|
||||
|
||||
//分配明细表更新任务相关数据
|
||||
IOStorInvDis dis = new IOStorInvDis();
|
||||
dis.setIostorinvdis_id(ioStorInvDis.getIostorinvdis_id());
|
||||
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||
dis.setTask_id(task_id);
|
||||
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
dis.setPoint_code(point_code);
|
||||
ioStorInvDisMapper.updateById(dis);
|
||||
// 查询单据下是否有相同载具
|
||||
List<IOStorInvDis> disList = ioStorInvDisMapper.selectList(
|
||||
new QueryWrapper<IOStorInvDis>().lambda()
|
||||
.eq(IOStorInvDis::getIostorinv_id, ioStorInv.getIostorinv_id())
|
||||
.eq(IOStorInvDis::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
.eq(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
|
||||
);
|
||||
|
||||
for (IOStorInvDis dis : disList) {
|
||||
//分配明细表更新任务相关数据
|
||||
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||
dis.setTask_id(task_id);
|
||||
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
dis.setPoint_code(point_code);
|
||||
ioStorInvDisMapper.updateById(dis);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1263,102 +1275,104 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
|
||||
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
List<IOStorInvDis> disList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getTask_id, task.getTask_id())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(ioStorInvDis)) {
|
||||
if (ObjectUtil.isEmpty(disList)) {
|
||||
throw new BadRequestException("未找到任务对应的分配明细");
|
||||
}
|
||||
//查询主表信息
|
||||
IOStorInv ioStorInv = ioStorInvMapper.selectById(ioStorInvDis.getIostorinv_id());
|
||||
IOStorInv ioStorInv = ioStorInvMapper.selectById(disList.get(0).getIostorinv_id());
|
||||
|
||||
//查询明细信息
|
||||
IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(ioStorInvDis.getIostorinvdtl_id());
|
||||
if (ObjectUtil.isEmpty(ioStorInvDtl)) {
|
||||
throw new BadRequestException("未找到明细");
|
||||
}
|
||||
|
||||
ioStorInvDisMapper.update(ioStorInvDis, new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
|
||||
.set(IOStorInvDis::getReal_qty, task.getMaterial_qty())
|
||||
.eq(IOStorInvDis::getIostorinvdis_id, ioStorInvDis.getIostorinvdis_id())
|
||||
);
|
||||
|
||||
//解锁库位
|
||||
JSONObject finish_map = new JSONObject();
|
||||
finish_map.put("struct_code", ioStorInvDis.getStruct_code());
|
||||
finish_map.put("storagevehicle_code", null);
|
||||
finish_map.put("inv_type", null);
|
||||
finish_map.put("inv_id", null);
|
||||
finish_map.put("inv_code", null);
|
||||
iStructattrService.updateStatusByCode("1", finish_map);
|
||||
|
||||
//修改库存 恢复库存 手持进行减扣
|
||||
List<JSONObject> updateIvtList = new ArrayList<>();
|
||||
JSONObject jsonIvt = new JSONObject();
|
||||
jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_SUB_FROZEN);
|
||||
jsonIvt.put("storagevehicle_code", ioStorInvDis.getStoragevehicle_code());
|
||||
jsonIvt.put("material_id", ioStorInvDis.getMaterial_id());
|
||||
jsonIvt.put("pcsn", ioStorInvDis.getPcsn());
|
||||
jsonIvt.put("qty_unit_id", ioStorInvDis.getQty_unit_id());
|
||||
jsonIvt.put("qty_unit_name", ioStorInvDis.getQty_unit_name());
|
||||
jsonIvt.put("change_qty", ioStorInvDis.getPlan_qty());
|
||||
updateIvtList.add(jsonIvt);
|
||||
iMdPbStoragevehicleextService.updateIvt(updateIvtList);
|
||||
|
||||
List<GroupPlate> lateList = groupPlateMapper.selectList(
|
||||
new QueryWrapper<GroupPlate>().lambda()
|
||||
.eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn())
|
||||
.eq(GroupPlate::getVehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
.eq(GroupPlate::getMaterial_id, ioStorInvDis.getMaterial_id())
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(lateList)) {
|
||||
throw new BadRequestException("此载具没有组盘【"+ioStorInvDis.getStoragevehicle_code()+"】");
|
||||
}
|
||||
|
||||
// 如果有袋码则不更新组盘信息,由手持进行更新
|
||||
boolean is_emp = lateList.stream()
|
||||
.anyMatch(row -> ObjectUtil.isEmpty(row.getBag_code()));
|
||||
if (is_emp) {
|
||||
GroupPlate groupPlate = lateList.get(0);
|
||||
double sub_qty = NumberUtil.sub(groupPlate.getQty(), ioStorInvDis.getPlan_qty()).doubleValue();
|
||||
if (sub_qty != 0) {
|
||||
groupPlate.setQty(BigDecimal.valueOf(sub_qty));
|
||||
for (IOStorInvDis ioStorInvDis : disList) {
|
||||
//查询明细信息
|
||||
IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(ioStorInvDis.getIostorinvdtl_id());
|
||||
if (ObjectUtil.isEmpty(ioStorInvDtl)) {
|
||||
throw new BadRequestException("未找到明细");
|
||||
}
|
||||
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("出库"));
|
||||
groupPlateMapper.updateById(groupPlate);
|
||||
}
|
||||
|
||||
// 查询该明细下是否还有未完成的分配明细
|
||||
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id())
|
||||
.ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
|
||||
);
|
||||
|
||||
// 如果分配明细全部完成则更新明细表状态
|
||||
if (countDis == 0) {
|
||||
// 更新明细表状态
|
||||
ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
|
||||
ioStorInvDtl.setReal_qty(ioStorInvDtl.getAssign_qty());
|
||||
ioStorInvDtlMapper.updateById(ioStorInvDtl);
|
||||
|
||||
// 查看明细是否全部完成
|
||||
int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class)
|
||||
.eq(IOStorInvDtl::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
.ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
ioStorInvDisMapper.update(ioStorInvDis, new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
|
||||
.set(IOStorInvDis::getReal_qty, task.getMaterial_qty())
|
||||
.eq(IOStorInvDis::getIostorinvdis_id, ioStorInvDis.getIostorinvdis_id())
|
||||
);
|
||||
|
||||
// 如果明细全部完成则更新主表状态
|
||||
if (countDtl == 0) {
|
||||
//更新主表状态
|
||||
ioStorInvMapper.update(new IOStorInv(), new LambdaUpdateWrapper<>(IOStorInv.class)
|
||||
.set(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
.set(IOStorInv::getConfirm_optid, currentUserId)
|
||||
.set(IOStorInv::getConfirm_optname, nickName)
|
||||
.set(IOStorInv::getConfirm_time, now)
|
||||
.eq(IOStorInv::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
//解锁库位
|
||||
JSONObject finish_map = new JSONObject();
|
||||
finish_map.put("struct_code", ioStorInvDis.getStruct_code());
|
||||
finish_map.put("storagevehicle_code", null);
|
||||
finish_map.put("inv_type", null);
|
||||
finish_map.put("inv_id", null);
|
||||
finish_map.put("inv_code", null);
|
||||
iStructattrService.updateStatusByCode("1", finish_map);
|
||||
|
||||
//修改库存 恢复库存 手持进行减扣
|
||||
List<JSONObject> updateIvtList = new ArrayList<>();
|
||||
JSONObject jsonIvt = new JSONObject();
|
||||
jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_SUB_FROZEN);
|
||||
jsonIvt.put("storagevehicle_code", ioStorInvDis.getStoragevehicle_code());
|
||||
jsonIvt.put("material_id", ioStorInvDis.getMaterial_id());
|
||||
jsonIvt.put("pcsn", ioStorInvDis.getPcsn());
|
||||
jsonIvt.put("qty_unit_id", ioStorInvDis.getQty_unit_id());
|
||||
jsonIvt.put("qty_unit_name", ioStorInvDis.getQty_unit_name());
|
||||
jsonIvt.put("change_qty", ioStorInvDis.getPlan_qty());
|
||||
updateIvtList.add(jsonIvt);
|
||||
iMdPbStoragevehicleextService.updateIvt(updateIvtList);
|
||||
|
||||
List<GroupPlate> lateList = groupPlateMapper.selectList(
|
||||
new QueryWrapper<GroupPlate>().lambda()
|
||||
.eq(GroupPlate::getPcsn, ioStorInvDis.getPcsn())
|
||||
.eq(GroupPlate::getVehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
.eq(GroupPlate::getMaterial_id, ioStorInvDis.getMaterial_id())
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(lateList)) {
|
||||
throw new BadRequestException("此载具没有组盘【"+ioStorInvDis.getStoragevehicle_code()+"】");
|
||||
}
|
||||
|
||||
// 如果有袋码则不更新组盘信息,由手持进行更新
|
||||
boolean is_emp = lateList.stream()
|
||||
.anyMatch(row -> ObjectUtil.isEmpty(row.getBag_code()));
|
||||
if (is_emp) {
|
||||
GroupPlate groupPlate = lateList.get(0);
|
||||
double sub_qty = NumberUtil.sub(groupPlate.getQty(), ioStorInvDis.getPlan_qty()).doubleValue();
|
||||
if (sub_qty != 0) {
|
||||
groupPlate.setQty(BigDecimal.valueOf(sub_qty));
|
||||
}
|
||||
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("出库"));
|
||||
groupPlateMapper.updateById(groupPlate);
|
||||
}
|
||||
|
||||
// 查询该明细下是否还有未完成的分配明细
|
||||
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id())
|
||||
.ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
|
||||
);
|
||||
|
||||
// 如果分配明细全部完成则更新明细表状态
|
||||
if (countDis == 0) {
|
||||
// 更新明细表状态
|
||||
ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
|
||||
ioStorInvDtl.setReal_qty(ioStorInvDtl.getAssign_qty());
|
||||
ioStorInvDtlMapper.updateById(ioStorInvDtl);
|
||||
|
||||
// 查看明细是否全部完成
|
||||
int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class)
|
||||
.eq(IOStorInvDtl::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
.ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
);
|
||||
|
||||
// 如果明细全部完成则更新主表状态
|
||||
if (countDtl == 0) {
|
||||
//更新主表状态
|
||||
ioStorInvMapper.update(new IOStorInv(), new LambdaUpdateWrapper<>(IOStorInv.class)
|
||||
.set(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
.set(IOStorInv::getConfirm_optid, currentUserId)
|
||||
.set(IOStorInv::getConfirm_optname, nickName)
|
||||
.set(IOStorInv::getConfirm_time, now)
|
||||
.eq(IOStorInv::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user