add:手持功能

This commit is contained in:
2025-09-03 17:46:01 +08:00
parent 3e409b93b2
commit 9a581a95bb
21 changed files with 994 additions and 8 deletions

View File

@@ -0,0 +1,46 @@
package org.nl.wms.pda.smallbox_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.smallbox_management.service.PdaSmallBoxInService;
import org.nl.wms.pda.smallbox_management.service.PdaVehicleOutService;
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 2025-09-03
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pdaSmallBox")
@Slf4j
public class PdaSmallBoxInController {
@Autowired
private PdaSmallBoxInService pdaSmallBoxInService;
/**
* 确认入库
*/
@PostMapping("/confirmIn")
@Log("确认入库")
@SaIgnore
public ResponseEntity<Object> confirmIn(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaSmallBoxInService.confirmIn(whereJson), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,56 @@
package org.nl.wms.pda.smallbox_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.smallbox_management.service.PdaSmallBoxPublicService;
import org.nl.wms.pda.util.PdaResponse;
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 2025-09-03
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pdaSmallBoxPublic")
@Slf4j
public class PdaSmallBoxPublicController {
@Autowired
private PdaSmallBoxPublicService pdaSmallBoxPublicService;
@PostMapping("/queryGroupInfo")
@Log("查询组盘记录")
@SaIgnore
public ResponseEntity<Object> queryGroupInfo(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(PdaResponse.requestParamOk(pdaSmallBoxPublicService.queryGroupInfo(whereJson)), HttpStatus.OK);
}
@PostMapping("/querySectCode")
@Log("查询库区")
@SaIgnore
public ResponseEntity<Object> querySectCode() {
return new ResponseEntity<>(PdaResponse.requestParamOk(pdaSmallBoxPublicService.querySectCode()), HttpStatus.OK);
}
@PostMapping("/queryInBillType")
@Log("查询入库业务类型")
@SaIgnore
public ResponseEntity<Object> queryInBillType() {
return new ResponseEntity<>(PdaResponse.requestParamOk(pdaSmallBoxPublicService.queryInBillType()), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,45 @@
package org.nl.wms.pda.smallbox_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.smallbox_management.service.PdaVehicleInService;
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 2025-09-02
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pdaVehicleIn")
@Slf4j
public class PdaVehicleInController {
@Autowired
private PdaVehicleInService pdaVehicleInService;
/**
* 呼叫入库
*/
@PostMapping("/vehicleIn")
@Log("呼叫入库")
@SaIgnore
public ResponseEntity<Object> vehicleIn(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaVehicleInService.vehicleIn(whereJson), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,45 @@
package org.nl.wms.pda.smallbox_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.smallbox_management.service.PdaVehicleOutService;
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 2025-09-03
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pdaVehicleOut")
@Slf4j
public class PdaVehicleOutController {
@Autowired
private PdaVehicleOutService pdaVehicleOutService;
/**
* 呼叫出库
*/
@PostMapping("/vehicleOut")
@Log("新增空载具入库任务")
@SaIgnore
public ResponseEntity<Object> vehicleOut(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaVehicleOutService.vehicleOut(whereJson), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,43 @@
package org.nl.wms.pda.smallbox_management.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.util.PdaResponse;
/**
* <p>
* 平板料箱入库入库 服务类
* </p>
*
* @author Liuxy
* @since 2025-09-03
*/
public interface PdaSmallBoxInService {
/**
* @param whereJson {
* bill_type: 入库类型
* point_code: 入库点位
* rows: [
* storagevehicle_code: 载具编码
* group_id: 载具编码
* material_id: 物料ID
* material_code: 物料编码
* material_name: 物料名称
* pcsn: 批号
* qty: 重量
* produce_time: 生产日期
* supp_code: 供应商编码
* supp_name: 供应商名称
* material_spec: 规格
* material_model: 型号
* quality_time_day: 有效期
* execution_stand: 执行标准
* quality_type: 品质类型
* bake_num: 烘干次数
* qty_unit_id: 计量单位标识
* qty_unit_name: 计量单位名称
* ]
* }
* @return PdaResponse
*/
PdaResponse confirmIn(JSONObject whereJson);
}

View File

@@ -0,0 +1,38 @@
package org.nl.wms.pda.smallbox_management.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.util.PdaResponse;
import java.util.List;
/**
* <p>
* 平板小料箱公共接口 服务类
* </p>
*
* @author Liuxy
* @since 2025-09-03
*/
public interface PdaSmallBoxPublicService {
/**
* 查询组盘信息
* @param whereJSON {
* storagevehicle_code: 载具编码
* }
* @return List<JSONObject>
*/
List<JSONObject> queryGroupInfo(JSONObject whereJSON);
/**
* 查询库区
* @return PdaResponse
*/
PdaResponse querySectCode();
/**
* 查询入库业务类型
* @return PdaResponse
*/
PdaResponse queryInBillType();
}

View File

@@ -0,0 +1,26 @@
package org.nl.wms.pda.smallbox_management.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.util.PdaResponse;
/**
* <p>
* 平板空载具入库 服务类
* </p>
*
* @author Liuxy
* @since 2025-09-02
*/
public interface PdaVehicleInService {
/**
*
* @param whereJson {
* point_code: 入库点位
* storagevehicle_code: 载具编码
* sect_code: 库区编码
* }
* @return PdaResponse
*/
PdaResponse vehicleIn(JSONObject whereJson);
}

View File

@@ -0,0 +1,26 @@
package org.nl.wms.pda.smallbox_management.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.util.PdaResponse;
/**
* <p>
* 平板空载具出库 服务类
* </p>
*
* @author Liuxy
* @since 2025-09-03
*/
public interface PdaVehicleOutService {
/**
* @param whereJson {
* point_code: 出库点位
* sect_code: 库区编码
* out_qty: 出库数量
* vehicle_type: 载具类型
* }
* @return PdaResponse
*/
PdaResponse vehicleOut(JSONObject whereJson);
}

View File

@@ -0,0 +1,209 @@
package org.nl.wms.pda.smallbox_management.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.mapper.SectattrMapper;
import org.nl.wms.pda.smallbox_management.service.PdaSmallBoxInService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.service.util.tasks.KwzdInTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* <p>
* 平板料箱入库 实现类
* </p>
*
* @author Liuxy
* @since 2025-09-03
*/
@Service
public class PdaSmallBoxInServiceImpl implements PdaSmallBoxInService {
/**
* 入库服务
*/
@Autowired
private IRawAssistIStorService iRawAssistIStorService;
/**
* 入库明细服务
*/
@Autowired
private IOStorInvDtlMapper ioStorInvDtlMapper;
/**
* 库外站点入库任务类
*/
@Autowired
private KwzdInTask kwzdInTask;
/**
* 库区mapper
*/
@Autowired
private SectattrMapper sectattrMapper;
@Override
public PdaResponse confirmIn(JSONObject whereJson) {
// 判断点位是否是称重位:是:直接生成入库任务;否:生成点对点搬运任务
if (whereJson.getString("point_code").equals(IOSConstant.CZW_POINT)) {
this.createSmallBoxIn(whereJson);
} else {
// 创建库外站点任务
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
JSONObject group = rows.get(0);
JSONObject paramTask = new JSONObject();
paramTask.put("point_code1", whereJson.getString("point_code"));
paramTask.put("point_code2", IOSConstant.CZW_POINT);
paramTask.put("vehicle_code", group.getString("storagevehicle_code"));
paramTask.put("material_id", group.getString("material_id"));
paramTask.put("material_qty", group.getString("qty"));
kwzdInTask.create(paramTask);
}
return PdaResponse.requestOk();
}
/**
* 下发入库任务
*
* @param whereJson {
* <p>
* }
*/
private void createSmallBoxIn(JSONObject whereJson) {
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
JSONObject group = rows.get(0);
// 组织主表数据
Map<String, Object> jsonMst = new HashMap<>();
// 仓库默认焊材库
jsonMst.put("stor_id", IOSConstant.STOR_ID);
jsonMst.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
jsonMst.put("total_qty", group.getString("qty"));
jsonMst.put("detail_count", 1);
jsonMst.put("bill_type", whereJson.getString("bill_type"));
jsonMst.put("biz_date", DateUtil.now());
// 组织明细数据
ArrayList<HashMap> tableData = new ArrayList<>();
HashMap<String, String> dtl = new HashMap<>();
dtl.put("storagevehicle_code", group.getString("storagevehicle_code"));
dtl.put("pcsn", group.getString("pcsn"));
dtl.put("qty_unit_id", group.getString("qty_unit_id"));
dtl.put("qty_unit_name", group.getString("qty_unit_name"));
dtl.put("qty", group.getString("qty"));
dtl.put("material_code", group.getString("material_code"));
dtl.put("material_name", group.getString("material_name"));
dtl.put("material_id", group.getString("material_id"));
dtl.put("plan_qty", group.getString("qty"));
// 调用新增
tableData.add(dtl);
jsonMst.put("tableData", tableData);
String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst);
// 调用分配
// 组织主数据
Map<String, Object> jsonDivMst = new HashMap<>();
jsonDivMst.put("checked", true);
jsonDivMst.put("sect_id", getSect_code(group.getString("quality_type")));
jsonDivMst.put("stor_id", IOSConstant.STOR_ID);
// 组织明细数据
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
new QueryWrapper<IOStorInvDtl>().lambda()
.eq(IOStorInvDtl::getIostorinv_id, iostorinv_id)
);
// 查找分配明细
Map<String, Object> map = new HashMap<>();
map.put("iostorinvdtl_id", dtlDao.getIostorinvdtl_id());
List<IOStorInvDisDto> disDtl = iRawAssistIStorService.getDisDtl(map);
// 类型转换
ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
disDtl.forEach(item -> {
tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
});
jsonDivMst.put("tableMater", tableMater);
// 调用分配
iRawAssistIStorService.divStruct(jsonDivMst);
// 返回数据
JSONObject result = new JSONObject();
result.put("storagevehicle_code", disDtl.get(0).getStoragevehicle_code());
result.put("point_code", IOSConstant.CZW_POINT);
result.put("sect_id", disDtl.get(0).getSect_id());
result.put("iostorinv_id", disDtl.get(0).getIostorinv_id());
// 下发入库任务
sendTask(result);
}
/**
* 下发入库任务
*
* @param whereJson {
* storagevehicle_code载具编码
* point_code点位编码
* sect_id库区
* iostorinv_id: id
* }
*/
private void sendTask(JSONObject whereJson) {
// 组织主数据
Map<String, Object> jsonMst = new HashMap<>();
jsonMst.put("point_code", whereJson.getString("point_code"));
// 组织明细数据
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
new QueryWrapper<IOStorInvDtl>().lambda()
.eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
);
// 查找分配明细
Map<String, Object> map = new HashMap<>();
map.put("iostorinvdtl_id", dtlDao.getIostorinvdtl_id());
List<IOStorInvDisDto> disDtl = iRawAssistIStorService.getDisDtl(map);
// 类型转换
ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
disDtl.forEach(item -> {
tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
});
jsonMst.put("tableMater", tableMater);
iRawAssistIStorService.divPoint(jsonMst);
}
/**
* 根据品质类型获取库区
* @param quality_type 品质类型
* @return sect_id
*/
private String getSect_code(String quality_type) {
String sect_code = "";
switch (quality_type) {
case "1" :
sect_code = IOSEnum.SECT_CODE.code("待检区");
break;
case "2" :
sect_code = IOSEnum.SECT_CODE.code("合格区");
break;
case "3" :
sect_code = IOSEnum.SECT_CODE.code("不合格区");
break;
}
Sectattr sectattr = sectattrMapper.selectOne(
new QueryWrapper<Sectattr>().lambda()
.eq(Sectattr::getSect_code, sect_code)
);
return sectattr.getSect_id();
}
}

View File

@@ -0,0 +1,45 @@
package org.nl.wms.pda.smallbox_management.service.impl;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.smallbox_management.service.PdaSmallBoxPublicService;
import org.nl.wms.pda.util.PDAEnum;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 平板小料箱公共接口 实现类
* </p>
*
* @author Liuxy
* @since 2025-09-03
*/
@Service
public class PdaSmallBoxPublicServiceImpl implements PdaSmallBoxPublicService {
/**
* 组盘mapper服务
*/
@Autowired
private MdPbGroupplateMapper mdPbGroupplateMapper;
@Override
public List<JSONObject> queryGroupInfo(JSONObject whereJSON) {
return mdPbGroupplateMapper.pdaQueryGroupInfo(whereJSON);
}
@Override
public PdaResponse querySectCode() {
return PdaResponse.requestParamOk(PDAEnum.SECT_CODE.getDict());
}
@Override
public PdaResponse queryInBillType() {
return PdaResponse.requestParamOk(PDAEnum.IN_BILL_TYPE.getDict());
}
}

View File

@@ -0,0 +1,35 @@
package org.nl.wms.pda.smallbox_management.service.impl;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.smallbox_management.service.PdaVehicleInService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.warehouse_management.service.VehicleInService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* <p>
* 平板空载具入库 实现类
* </p>
*
* @author Liuxy
* @since 2025-09-02
*/
@Service
public class PdaVehicleInServiceImpl implements PdaVehicleInService {
/**
* 空载具入库服务类
*/
@Resource
private VehicleInService vehicleInService;
@Override
@Transactional
public PdaResponse vehicleIn(JSONObject whereJson) {
vehicleInService.create(whereJson);
return PdaResponse.requestOk();
}
}

View File

@@ -0,0 +1,31 @@
package org.nl.wms.pda.smallbox_management.service.impl;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.smallbox_management.service.PdaVehicleOutService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.warehouse_management.service.VehicleOutService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 平板空载具出库 实现类
* </p>
*
* @author Liuxy
* @since 2025-09-03
*/
@Service
public class PdaVehicleOutServiceImpl implements PdaVehicleOutService {
@Autowired
private VehicleOutService vehicleOutService;
@Override
@Transactional
public PdaResponse vehicleOut(JSONObject whereJson) {
vehicleOutService.create(whereJson);
return PdaResponse.requestOk();
}
}

View File

@@ -0,0 +1,64 @@
package org.nl.wms.pda.util;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.MapOf;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 手持枚举类
*
* @author Liuxy
* @Date 2025/05/23
*/
@AllArgsConstructor
@Getter
public enum PDAEnum {
// 入库业务类型
IN_BILL_TYPE(MapOf.of("收货入库","0001", "退料入库","0002", "其他入库", "0009"
)),
// 库区编码
SECT_CODE(MapOf.of("合格区", "HG01", "待检区", "DJ01", "不合格区", "BHG01")),
;
private Map<String, String> code;
public String code(String desc) {
String code = this.getCode().get(desc);
if (StringUtils.isNotEmpty(code)) {
return code;
}
throw new BadRequestException(this.name() + "对应类型" + desc + "未定义");
}
public String check(String code) {
for (Map.Entry<String, String> entry : this.getCode().entrySet())
if (entry.getValue().equals("code")) {
return entry.getValue();
}
throw new BadRequestException(this.name() + "对应类型" + code + "未定义");
}
public List<JSONObject> getDict() {
Map<String, String> code = this.getCode();
List<JSONObject> list = new ArrayList<>();
for (String key : code.keySet()) {
JSONObject json = new JSONObject();
json.put("label", key);
json.put("value", code.get(key));
list.add(json);
}
return list;
}
}

View File

@@ -129,10 +129,7 @@ public class BackInTask extends AbstractTask {
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
rawAssistIStorService.taskFinish(taskObj);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
this.finishTask(taskObj);
}
@Override

View File

@@ -0,0 +1,223 @@
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.LambdaUpdateWrapper;
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.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.pda.smallbox_management.service.PdaSmallBoxInService;
import org.nl.wms.pda.smallbox_management.service.PdaSmallBoxPublicService;
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;
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.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.nl.wms.warehouse_management.service.IRawAssistIStorService;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 库外站点入库任务类
* </p>
*
* @author Liuxy
* @since 2025-09-03
*/
@Component(value = "KwzdInTask")
@TaskType("KwzdInTask")
public class KwzdInTask extends AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
/**
* 平板小料箱公共接口服务
*/
@Resource
private PdaSmallBoxPublicService pdaSmallBoxPublicService;
/**
* 点位服务
*/
@Autowired
private ISchBasePointService iSchBasePointService;
/**
* 小料箱入库服务
*/
@Autowired
private PdaSmallBoxInService pdaSmallBoxInService;
@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(KwzdInTask.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.setGroup_id(json.getString("group_id"));
task.setRequest_param(json.toString());
task.setTask_type(TaskEnum.TASK_TYPE.code("料箱"));
task.setPriority(json.getString("Priority"));
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.setTask_type("1");
return acsTaskDto;
}
@Override
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)) {
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
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj);
}
@Override
public void cancel(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
throw new BadRequestException("任务状态必须为生成才能取消任务");
}
this.cancelTask(taskObj);
}
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj) {
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
// 更新起点
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.set(SchBasePoint::getVehicle_code, "")
.set(SchBasePoint::getIng_task_code, "")
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
);
// 更新终点
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
.set(SchBasePoint::getIng_task_code, taskObj.getTask_id())
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
);
this.taskConfirm(taskObj.getTask_code());
}
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj) {
// 取消任务
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
.set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code(""))
.set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode())
.set(SchBaseTask::getRemark, "已取消")
.eq(SchBaseTask::getTask_id, taskObj.getTask_id())
);
// 更新任务状态
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark("已取消");
taskService.updateById(taskObj);
}
@Override
public void taskConfirm(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
// 查询组盘信息
JSONObject json = new JSONObject();
json.put("storagevehicle_code", taskObj.getVehicle_code());
List<JSONObject> rows = pdaSmallBoxPublicService.queryGroupInfo(json);
if (ObjectUtil.isEmpty(rows)) {
throw new BadRequestException("此载具没有生成状态的组盘信息【"+taskObj.getVehicle_code()+"");
}
// 组织入库数据
JSONObject jsonInParam = new JSONObject();
jsonInParam.put("bill_type",IOSEnum.IN_BILL_TYPE.code("收货入库"));
jsonInParam.put("point_code", IOSConstant.CZW_POINT);
jsonInParam.put("rows", rows);
// 调用平板服务
pdaSmallBoxInService.confirmIn(jsonInParam);
}
}

View File

@@ -106,6 +106,11 @@ public class IOSConstant {
*/
public final static String CZW_POINT = "CZW01";
/**
* 仓库ID
*/
public final static String STOR_ID = "1582991156504039424";
/**
* 物料id焊丝盘状
*/

View File

@@ -1,11 +1,14 @@
package org.nl.wms.warehouse_management.enums;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.MapOf;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
@@ -133,4 +136,18 @@ public enum IOSEnum {
}
throw new BadRequestException(this.name() + "对应类型" + code + "未定义");
}
public List<JSONObject> getDict() {
Map<String, String> code = this.getCode();
List<JSONObject> list = new ArrayList<>();
for (String key : code.keySet()) {
JSONObject json = new JSONObject();
json.put("label", key);
json.put("value", code.get(key));
list.add(json);
}
return list;
}
}

View File

@@ -36,4 +36,13 @@ public interface MdPbGroupplateMapper extends BaseMapper<GroupPlate> {
* @return IPage<StIvtMoveinv>
*/
IPage<JSONObject> queryAllByPage(Page<JSONObject> page, @Param("param") Map whereJson);
/**
* 手持小料箱公共查询
* @param whereJson {
* storagevehicle_code: 载具编码
* }
* @return List<JSONObject>
*/
List<JSONObject> pdaQueryGroupInfo(@Param("param") JSONObject whereJson);
}

View File

@@ -54,4 +54,29 @@
</where>
ORDER BY late.create_time Desc
</select>
<select id="pdaQueryGroupInfo" resultType="com.alibaba.fastjson.JSONObject">
SELECT
late.*,
mater.material_code,
mater.material_name,
mater.material_spec,
mater.material_model,
mater.quality_time AS quality_time_day,
supp.supp_name
FROM
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
<where>
late.status = '1'
<if test="param.storagevehicle_code != null and param.storagevehicle_code != ''">
AND
late.storagevehicle_code = #{param.storagevehicle_code}
</if>
</where>
ORDER BY late.create_time Desc
</select>
</mapper>

View File

@@ -131,7 +131,7 @@ public class VehicleInServiceImpl implements VehicleInService {
}
// 根据库区查询对应库位
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class)
List<Structattr> structattr = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class)
.eq(Structattr::getSect_code, whereJson.getString("sect_code"))
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
@@ -143,6 +143,6 @@ public class VehicleInServiceImpl implements VehicleInService {
if (ObjectUtil.isEmpty(structattr)) {
throw new BadRequestException("未找到满足的仓位");
}
return structattr;
return structattr.get(0);
}
}

View File

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
@@ -88,7 +89,7 @@ public class VehicleOutServiceImpl implements VehicleOutService {
private Structattr autoDivStruct(JSONObject whereJson) {
// 根据库区查询对应载具
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class)
List<Structattr> structattr = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class)
.eq(Structattr::getSect_code, whereJson.getString("sect_code"))
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
@@ -101,6 +102,6 @@ public class VehicleOutServiceImpl implements VehicleOutService {
if (ObjectUtil.isEmpty(structattr)) {
throw new BadRequestException("未找到满足的仓位");
}
return structattr;
return structattr.get(0);
}
}