Browse Source

opt:优化物料出库,出库确认。

master
龚宝雄 1 month ago
parent
commit
2f89793173
  1. 8
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java
  2. 24
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosOutController.java
  3. 10
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java
  4. 41
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java
  5. 25
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java
  6. 234
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java
  7. 15
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java
  8. 5
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskService.java
  9. 4
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskconfigService.java
  10. 6
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.java
  11. 25
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml
  12. 96
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java
  13. 17
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseTaskServiceImpl.java
  14. 5
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/IOStorInv.java
  15. 1
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java
  16. 16
      nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java

8
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java

@ -68,6 +68,14 @@ public class PdaIosInController {
}
@PostMapping("/getRegion")
@Log("获取区域")
public ResponseEntity<Object> getRegion() {
return new ResponseEntity<>(pdaIosInService.getRegion(), HttpStatus.OK);
}
/**
* 组盘获取物料列表
*/

24
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosOutController.java

@ -58,12 +58,10 @@ public class PdaIosOutController {
*/
@PostMapping("bindOrUnbind")
@Log("货架与站点绑定或解绑")
public ResponseEntity<Object> bindOrUnbind(@RequestBody JSONObject param) {
if (param == null || StringUtils.isEmpty(param.getString("siteCode")) || StringUtils.isEmpty(param.getString("shelfCode")) || StringUtils.isEmpty(param.getString("mode"))) {
throw new BadRequestException("请求参数不能为空");
}
// pdaIosOutService.bindOrUnbind(param.getString("siteCode"), param.getString("shelfCode"), param.getString("mode"));
return new ResponseEntity<>(HttpStatus.OK);
public ResponseEntity<Object> bindOrUnbind(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "siteCode", "shelfCode", "mode");
return new ResponseEntity<>(pdaIosOutService.bindOrUnbind(whereJson), HttpStatus.OK);
}
@ -107,10 +105,9 @@ public class PdaIosOutController {
*/
@PostMapping("transferConfirm")
@Log("转运确认")
public ResponseEntity<Object> transferConfirm(@RequestBody JSONObject param) {
// tranforTask.createTask(param);
// return new ResponseEntity<>(pdaIosOutService.confirm(whereJson), HttpStatus.OK);
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
public ResponseEntity<Object> transferConfirm(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "storagevehicle_code");
return new ResponseEntity<>(pdaIosOutService.transferConfirm(whereJson), HttpStatus.OK);
}
@ -119,10 +116,9 @@ public class PdaIosOutController {
*/
@PostMapping("vehicleOutConfirm")
@Log("空载具出库确认")
public ResponseEntity<Object> vehicleOutConfirm(@RequestBody JSONObject param) {
// tranforTask.createTask(param);
// return new ResponseEntity<>(pdaIosOutService.confirm(whereJson), HttpStatus.OK);
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
public ResponseEntity<Object> vehicleOutConfirm(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "sect_id", "siteCode");
return new ResponseEntity<>(pdaIosOutService.vehicleOutConfirm(whereJson), HttpStatus.OK);
}

10
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java

@ -82,6 +82,16 @@ public interface PdaIosInService {
PdaResponse getSect();
/**
* 查询区域
*
* @return PdaResponse
*/
PdaResponse getRegion();
/**
* 入库确认
*

41
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosOutService.java

@ -57,6 +57,20 @@ public interface PdaIosOutService {
*/
PdaResponse materialConfirm(JSONObject whereJson);
/**
* 货架与站点绑定或解绑
*
* @param whereJson {
* siteCode 点位
* shelfCode 货架编号
* mode 0解绑1绑定
* }
* @return PdaResponse
*/
PdaResponse bindOrUnbind(JSONObject whereJson);
/**
* 载具出库确认
*
@ -67,4 +81,31 @@ public interface PdaIosOutService {
* @return PdaResponse
*/
PdaResponse outStorageConfirm(JSONObject whereJson);
/**
* 转运确认
*
* @param whereJson {
* storagevehicle_code 载具码
* point_code 点位编码
* }
* @return PdaResponse
*/
PdaResponse transferConfirm(JSONObject whereJson);
/**
* 空载具出库确认
*
* @param whereJson {
* sect_id 库区
* siteCode 目标站点
* }
* @return PdaResponse
*/
PdaResponse vehicleOutConfirm(JSONObject whereJson);
}

25
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java

@ -23,7 +23,9 @@ import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService;
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.util.tasks.BackInTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
@ -35,7 +37,6 @@ import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -123,6 +124,13 @@ public class PdaIosInServiceImpl implements PdaIosInService {
private IOStorInvDtlMapper ioStorInvDtlMapper;
/**
* 区域服务
*/
@Autowired
private ISchBaseRegionService iSchBaseRegionService;
@Override
@Transactional
public PdaResponse groupPlate(JSONObject whereJson) {
@ -241,7 +249,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
@Override
public PdaResponse getSect() {
PageQuery page = new PageQuery();
page.setSize(20);
page.setSize(100);
page.setPage(0);
IPage<SectattrDto> sectList = iSectattrService.queryAll(new HashMap(), page);
List<SectattrDto> result = sectList.getRecords();
@ -250,6 +258,15 @@ public class PdaIosInServiceImpl implements PdaIosInService {
return PdaResponse.requestParamOk(result);
}
@Override
public PdaResponse getRegion() {
PageQuery page = new PageQuery();
page.setSize(100);
page.setPage(0);
IPage<SchBaseRegion> regionList = iSchBaseRegionService.queryAll(new HashMap(), page);
return PdaResponse.requestParamOk(regionList.getRecords());
}
/**
* 余料回库确认
@ -282,7 +299,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
params.put("qty", whereJson.getString("qty"));
params.put("pcsn", whereJson.getString("pcsn"));
Structattr attrDao = iRawAssistIStorService.divBackStruct(params);
//获取起点
//确定起点
SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code")));
if (ObjectUtil.isEmpty(schBasePoint)) {
throw new BadRequestException("未找到载具所在的点位信息,请检查");
@ -362,7 +379,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
jsonMst.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
jsonMst.put("total_qty", total_qty);
jsonMst.put("detail_count", 1);
jsonMst.put("bill_type", IOSEnum.BILL_TYPE.code("生产库"));
jsonMst.put("bill_type", StatusEnum.IOBILL_TYPE_IN.code("生产库"));
jsonMst.put("biz_date", DateUtil.now());
// 组织明细数据
ArrayList<HashMap> tableData = new ArrayList<>();

234
nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosOutServiceImpl.java

@ -1,32 +1,52 @@
package org.nl.wms.pda.ios_manage.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.pda.ios_manage.service.PdaIosOutService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask;
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
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.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.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
@ -48,7 +68,17 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Autowired
private MdPbGroupplateMapper mdPbGroupplateMapper;
/**
* 出入库单主表
*/
@Resource
private IOStorInvMapper ioStorInvMapper;
/**
* 基础物料服务
*/
@Autowired
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
/**
* 载具扩展属性服务
*/
@ -91,6 +121,13 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Autowired
private StOutTask stOutTask;
/**
* 手持任务
*/
@Autowired
private PdaPointTask pdaPointTask;
/**
* 入库服务服务
*/
@ -128,6 +165,56 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Override
@Transactional
public PdaResponse materialConfirm(JSONObject whereJson) {
//创建出库单/明细/分配
GroupPlate plateDao = mdPbGroupplateMapper.selectOne(
new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("group_id")));
Structattr sectDao = iStructattrService.getOne(new LambdaQueryWrapper<Structattr>()
.eq(Structattr::getStruct_code, whereJson.getString("struct_code")));
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(plateDao.getMaterial_id());
whereJson.put("material_id", materDao.getMaterial_id());
whereJson.put("material_code", materDao.getMaterial_code());
whereJson.put("store_id", sectDao.getStor_id());
whereJson.put("store_code", sectDao.getStor_code());
whereJson.put("store_name", sectDao.getStor_name());
whereJson.put("sec", sectDao.getSect_id());
whereJson.put("qty", plateDao.getQty());
whereJson.put("pcsn", plateDao.getPcsn());
whereJson.put("unit_id", plateDao.getQty_unit_id());
whereJson.put("unit_name", plateDao.getQty_unit_name());
//创建出库单据
String disId = createOutBills(whereJson);
//锁定货位
JSONObject lock_map = new JSONObject();
lock_map.put("struct_code", whereJson.getString("struct_code"));
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁"));
iStructattrService.updateStatusByCode("0", lock_map);
//创建任务
JSONObject taskForm = new JSONObject();
taskForm.put("task_type", "STOutTask");
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
taskForm.put("PickingLocation", whereJson.getString("struct_code"));
taskForm.put("PlacedLocation", whereJson.getString("siteCode"));
taskForm.put("vehicle_code", whereJson.getString("storagevehicle_code"));
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
String taskId = stOutTask.create(taskForm);
//更新任务id
ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<IOStorInvDis>()
.set(IOStorInvDis::getTask_id, taskId)
.eq(IOStorInvDis::getIostorinvdis_id, disId)
);
//更新组盘记录表
mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getGroup_id, whereJson.getString("group_id"))
);
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse vehicleOutConfirm(JSONObject whereJson) {
//锁定货位
JSONObject lock_map = new JSONObject();
lock_map.put("struct_code", whereJson.getString("struct_code"));
@ -151,6 +238,110 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
return PdaResponse.requestOk();
}
private String createOutBills(JSONObject whereJson) {
String now = DateUtil.now();
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
//主单
JSONObject io_mst = new JSONObject();
String iostorinv_id = IdUtil.getStringId();
String bill_code = CodeUtil.getNewCode("IN_STORE_CODE");
io_mst.put("iostorinv_id", iostorinv_id);
io_mst.put("bill_code", bill_code);
io_mst.put("io_type", IOSEnum.IO_TYPE.code("出库"));
io_mst.put("bill_type", StatusEnum.IOBILL_TYPE_OUT.code("生产出库"));
io_mst.put("biz_date", now.substring(0, 10));
io_mst.put("stor_id", whereJson.get("store_id"));
io_mst.put("stor_code", whereJson.get("store_code"));
io_mst.put("stor_name", whereJson.get("store_name"));
io_mst.put("detail_count", 1);
io_mst.put("bill_status", IOSEnum.BILL_STATUS.code("分配完"));
io_mst.put("create_mode", IOSEnum.CREATE_MODE.code("PC产生"));
io_mst.put("input_optid", currentUserId + "");
io_mst.put("input_optname", nickName);
io_mst.put("input_time", now);
io_mst.put("update_optid", currentUserId + "");
io_mst.put("update_optname", nickName);
io_mst.put("update_time", now);
io_mst.put("is_delete", BaseDataEnum.IS_YES_NOT.code("否"));
io_mst.put("is_upload", BaseDataEnum.IS_YES_NOT.code("否"));
Long deptId = SecurityUtils.getDeptId();
io_mst.put("sysdeptid", deptId + "");
io_mst.put("syscompanyid", deptId + "");
io_mst.put("qty", whereJson.get("store_code"));
ioStorInvMapper.insert(io_mst.toJavaObject(IOStorInv.class));
//明细
JSONObject ioStorInvDtl = new JSONObject();
ioStorInvDtl.put("iostorinvdtl_id", IdUtil.getStringId());
ioStorInvDtl.put("iostorinv_id", iostorinv_id);
ioStorInvDtl.put("seq_no", "1");
ioStorInvDtl.put("material_id", whereJson.get("material_id"));
ioStorInvDtl.put("material_code", whereJson.get("material_code"));
ioStorInvDtl.put("Pcsn", whereJson.get("pcsn"));
ioStorInvDtl.put("bill_status", IOSEnum.BILL_STATUS.code("分配完"));
ioStorInvDtl.put("qty_unit_id", whereJson.get("unit_id"));
ioStorInvDtl.put("qty_unit_name", whereJson.get("unit_name"));
ioStorInvDtl.put("assign_qty", whereJson.get("qty"));
ioStorInvDtl.put("unassign_qty", "0");
ioStorInvDtl.put("plan_qty", whereJson.get("qty"));
ioStorInvDtlMapper.insert(ioStorInvDtl.toJavaObject(IOStorInvDtl.class));
//分配
JSONObject dis = new JSONObject();
String disId = IdUtil.getStringId();
dis.put("iostorinvdis_id", disId);
dis.put("iostorinv_id", iostorinv_id);
dis.put("iostorinvdtl_id", ioStorInvDtl.getString("iostorinvdtl_id"));
dis.put("seq_no", 1);
dis.put("material_id", whereJson.get("material_id"));
dis.put("material_code", whereJson.get("material_code"));
dis.put("pcsn", whereJson.get("pcsn"));
dis.put("storagevehicle_code", whereJson.get("storagevehicle_code"));
dis.put("work_status", IOSEnum.INBILL_DIS_STATUS.code("执行中"));
dis.put("is_issued", BaseDataEnum.IS_YES_NOT.code("否"));
dis.put("qty_unit_id", whereJson.get("unit_id"));
dis.put("qty_unit_name", whereJson.get("unit_name"));
dis.put("plan_qty", whereJson.get("qty"));
ioStorInvDisMapper.insert(dis.toJavaObject(IOStorInvDis.class));
return disId;
}
@Override
@Transactional(rollbackFor = Exception.class)
public PdaResponse bindOrUnbind(JSONObject whereJson) {
SchBasePoint sitePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, whereJson.getString("siteCode")).eq(SchBasePoint::getIs_used, true));
if (sitePoint == null) {
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
}
List<SchBasePoint> cxPointLists = iSchBasePointService.checkEndPointTask(
null,
null,
StatusEnum.SORT_TYPE.code("升序"), null, sitePoint.getPoint_code(), null, false);
if (ObjectUtils.isNotEmpty(cxPointLists)) {
throw new BadRequestException("该货架正在执行输送任务,状态为锁定,请等任务完成再做绑定或解绑!");
}
LambdaUpdateWrapper<SchBasePoint> wrapper = new LambdaUpdateWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, whereJson.getString("siteCode"));
if ("1" .equals(whereJson.getString("mode"))) {
if (StringUtils.isNotBlank(sitePoint.getVehicle_code())) {
throw new BadRequestException("当前站点已绑定货架:" + sitePoint.getVehicle_code() + ",请先解绑:" + sitePoint.getVehicle_code());
}
//校验是否在其他站点绑定
SchBasePoint shelfPoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("shelfCode")));
if (shelfPoint != null) {
throw new BadRequestException("当前货架已绑定在站点:" + sitePoint.getPoint_code() + ",请先解绑。");
}
wrapper.set(SchBasePoint::getVehicle_code, whereJson.getString("shelfCode"))
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"));
} else {
wrapper.set(SchBasePoint::getVehicle_code, null)
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"));
}
wrapper.set(SchBasePoint::getUpdate_time, DateUtil.now())
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName());
iSchBasePointService.update(wrapper);
return PdaResponse.requestOk();
}
@Override
@Transactional
@ -163,10 +354,12 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
GroupPlate groupPlate = mdPbGroupplateMapper.selectById(whereJson.getString("group_id"));
//更新组盘信息
LambdaUpdateWrapper<GroupPlate> updateWrapper = new LambdaUpdateWrapper<>();
//出库确认
if ("1" .equals(whereJson.getString("type"))) {
BigDecimal qty = groupPlate.getQty().subtract(groupPlate.getFrozen_qty()).abs();
updateWrapper.set(GroupPlate::getQty, qty).set(GroupPlate::getFrozen_qty, 0);
} else {
//强制确认
updateWrapper.set(GroupPlate::getQty, 0).set(GroupPlate::getFrozen_qty, 0);
}
updateWrapper.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")).eq(GroupPlate::getGroup_id, whereJson.getString("group_id"));
@ -174,4 +367,45 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
// iSchBasePointService.unLockPoint(pointDao.getPoint_code());
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse transferConfirm(JSONObject whereJson) {
if (StringUtils.isBlank(whereJson.getString("region_code")) && StringUtils.isBlank(whereJson.getString("siteCode"))) {
throw new BadRequestException("请选择目标站点或区域!");
}
String pointCode = whereJson.getString("siteCode");
if (StringUtils.isBlank(pointCode)) {
List<SchBasePoint> pointList = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getRegion_code, whereJson.getString("region_code"))
.eq(SchBasePoint::getIs_used, 1)
.isNull(SchBasePoint::getVehicle_code)
.orderByAsc(SchBasePoint::getIn_order_seq));
if (CollectionUtils.isEmpty(pointList)) {
throw new BadRequestException("该区域无可用空余点位!");
}
pointCode = pointList.get(0).getPoint_code();
}
//确定起点
SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code")));
if (ObjectUtil.isEmpty(schBasePoint)) {
throw new BadRequestException("未找到载具所在的点位信息,请检查");
}
// 生成回库任务
JSONObject task = new JSONObject();
task.put("config_code", IOSConstant.PDA_POINT_TASK);
task.put("point_code1", schBasePoint.getPoint_code());
task.put("point_code2", pointCode);
task.put("vehicle_code", whereJson.getString("storagevehicle_code"));
task.put("Priority", TaskEnum.ACS_PRIORITY.code("1"));
pdaPointTask.create(task);
// 更新起点绑定id
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.set(SchBasePoint::getIos_id, null)
.eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code())
);
return PdaResponse.requestOk();
}
}

15
nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java

@ -90,4 +90,19 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
* @param point_code 点位编码
*/
void unLockPoint(String point_code);
/**
* 查询没有搬运任务的空的目标点位
*
* @param regionCode 点位类型
* @param getLockType 锁定状态
* @param sortType 点位排序规则1升序2降序
* @param pointType 0空载具1满载具
* @param pointCode 点位编码
* @param vehicleIsNull 载具是否为空
* @param isFourPoint 是否判断4个任务点位
* @return List<SchBasePoint>
*/
List<SchBasePoint> checkEndPointTask(String regionCode, String getLockType, String sortType, String
pointType, String pointCode, String vehicleIsNull, boolean isFourPoint);
}

5
nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskService.java

@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
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.dto.SchBaseTaskQuery;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -68,4 +70,7 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
* @return /
*/
SchBaseTask getByCode(String taskCode);
}

4
nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskconfigService.java

@ -3,6 +3,7 @@ package org.nl.wms.sch_manage.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig;
import java.util.List;
@ -51,4 +52,7 @@ public interface ISchBaseTaskconfigService extends IService<SchBaseTaskconfig> {
* @return List<SchBaseTaskconfig>
*/
List<SchBaseTaskconfig> getTaskConfigList();
}

6
nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.java

@ -9,6 +9,7 @@ import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;
/**
* @author lyd
@ -31,4 +32,9 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
* }
*/
List<JSONObject> queryPdaTask(@Param("param") JSONObject whereJson);
/**
* 获取点位任务数量
*/
List<SchBaseTask> getTaskList(Set<String> pointCodes1, Set<String> pointCodes2, Set<String> pointCodes3, Set<String> pointCodes4);
}

25
nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBaseTaskMapper.xml

@ -102,4 +102,29 @@
</if>
</where>
</select>
<select id="getTaskList" resultType="org.nl.wms.sch_manage.service.dao.SchBaseTask">
SELECT config_code,task_id,point_code1, point_code2
FROM sch_base_task
WHERE
<trim prefix="(" suffix=")" prefixOverrides="OR">
<if test="pointCodes1 != null and pointCodes1.size() > 0">
OR point_code1 IN
<foreach item="code" collection="pointCodes1" open="(" separator="," close=")"> #{code} </foreach>
</if>
<if test="pointCodes2 != null and pointCodes2.size() > 0">
OR point_code2 IN
<foreach item="code" collection="pointCodes2" open="(" separator="," close=")"> #{code} </foreach>
</if>
<if test="pointCodes3 != null and pointCodes3.size() > 0">
OR point_code3 IN
<foreach item="code" collection="pointCodes3" open="(" separator="," close=")"> #{code} </foreach>
</if>
<if test="pointCodes4 != null and pointCodes4.size() > 0">
OR point_code4 IN
<foreach item="code" collection="pointCodes4" open="(" separator="," close=")"> #{code} </foreach>
</if>
</trim>
AND (status <![CDATA[ < ]]> '80')
AND (is_delete = '0')
</select>
</mapper>

96
nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBasePointServiceImpl.java

@ -11,25 +11,32 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.sch_manage.enums.PointStatusEnum;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService;
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.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseRegionMapper;
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.dto.SchBasePointQuery;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author Liuxy
@ -45,6 +52,8 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Autowired
private SchBaseRegionMapper regionMapper;
@Autowired
private SchBaseTaskMapper schBaseTaskMapper;
@Override
public IPage<SchBasePoint> queryAll(SchBasePointQuery whereJson, PageQuery page) {
@ -191,10 +200,91 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
public void unLockPoint(String point_code) {
this.update(
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, point_code)
.set(SchBasePoint::getVehicle_code, null)
.set(SchBasePoint::getIos_id, null)
.eq(SchBasePoint::getPoint_code, point_code)
.set(SchBasePoint::getVehicle_code, null)
.set(SchBasePoint::getIos_id, null)
);
}
/**
* 查询没有搬运任务的空的目标点位
*
* @param regionCode 点位类型
* @param getLockType 锁定状态
* @param sortType 点位排序规则1升序2降序
* @param pointType 0空载具1满载具
* @param pointCode 点位编码
* @param vehicleIsNull 载具是否为空
* @return List<SchBasePoint>
*/
@Override
public List<SchBasePoint> checkEndPointTask(String regionCode, String getLockType, String sortType, String
pointType, String pointCode, String vehicleIsNull, boolean isFourPoint) {
Set<String> pointSets;
List<SchBaseTask> taskList;
List<SchBasePoint> returList = new ArrayList<>();
LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getIs_used, true);
if (StringUtils.isNotBlank(regionCode)) {
queryWrapper.eq(SchBasePoint::getRegion_code, regionCode);
}
if (StringUtils.isNotBlank(pointCode)) {
queryWrapper.eq(SchBasePoint::getPoint_code, pointCode);
}
if (StringUtils.isNotBlank(getLockType)) {
queryWrapper.eq(SchBasePoint::getPoint_status, getLockType);
}
if (StringUtils.isNotBlank(pointType)) {
queryWrapper.eq(SchBasePoint::getPoint_type, pointType);
}
if (StringUtils.isNotBlank(vehicleIsNull)) {
boolean isNull = Boolean.parseBoolean(vehicleIsNull);
if (isNull) {
queryWrapper.isNull(SchBasePoint::getVehicle_code);
} else {
queryWrapper.isNotNull(SchBasePoint::getVehicle_code);
}
}
if (StatusEnum.SORT_TYPE.code("升序").equals(sortType)) {
queryWrapper.orderByAsc(SchBasePoint::getPoint_code);
} else if (StatusEnum.SORT_TYPE.code("降序").equals(sortType)) {
queryWrapper.orderByDesc(SchBasePoint::getPoint_code);
} else {
queryWrapper.orderByAsc(SchBasePoint::getPoint_code);
}
List<SchBasePoint> ivtList = this.list(queryWrapper);
Set<String> pointIds = ivtList.stream()
.map(SchBasePoint::getPoint_code)
.collect(Collectors.toSet());
if (ObjectUtils.isEmpty(pointIds)) {
return returList;
}
if (isFourPoint) {
//点位任务
taskList = schBaseTaskMapper.getTaskList(pointIds, pointIds, pointIds, pointIds);
pointSets = taskList.stream()
.flatMap(task -> Stream.of(
task.getPoint_code1(),
task.getPoint_code2(),
task.getPoint_code3(),
task.getPoint_code4()
))
.filter(point -> point != null && !point.trim().isEmpty())
.collect(Collectors.toSet());
} else {
taskList = schBaseTaskMapper.getTaskList(pointIds, pointIds, null, null);
pointSets = taskList.stream()
.flatMap(task -> Stream.of(
task.getPoint_code1(),
task.getPoint_code2()
))
.filter(point -> point != null && !point.trim().isEmpty())
.collect(Collectors.toSet());
}
//符合条件的库存点位过滤掉已存在任务的点位
return ivtList.stream()
.filter(p -> !pointSets.contains(p.getPoint_code()) && p.getPoint_status().equals(getLockType))
.collect(Collectors.toList());
}
}

17
nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseTaskServiceImpl.java

@ -12,12 +12,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.sch_manage.enums.StatusEnum;
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.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery;
@ -27,11 +32,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author Liuxy
@ -45,6 +48,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Autowired
private SchBaseTaskMapper schBaseTaskMapper;
@Autowired
private ISchBasePointService iSchBasePointService;
@Autowired
private TaskFactory taskFactory;
@ -161,4 +167,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return this.getOne(lam);
}
}

5
nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/IOStorInv.java

@ -34,10 +34,7 @@ public class IOStorInv implements Serializable {
*/
private String io_type;
/**
* 业务类型
*/
private String buss_type;
/**
* 单据类型

1
nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java

@ -278,7 +278,6 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
map.put("bill_code", bill_code);
map.put("biz_date", map.getString("biz_date").substring(0, 10));
String bill_type = (String) map.get("bill_type");
map.put("buss_type", bill_type.substring(0, 4));
map.put("io_type", IOSEnum.IO_TYPE.code("出库"));
map.put("detail_count", array.size() + "");
map.put("create_mode", IOSEnum.CREATE_MODE.code("PC产生"));

16
nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java

@ -16,7 +16,6 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
@ -87,7 +86,6 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
@Override
public IPage<IOStorInv> pageQuery(Map whereJson, PageQuery page) {
HashMap<String, String> map = new HashMap<>();
map.put("buss_type", (String) whereJson.get("buss_type"));
map.put("stor_id", (String) whereJson.get("stor_id"));
map.put("bill_type", (String) whereJson.get("bill_type"));
map.put("create_mode", (String) whereJson.get("create_mode"));
@ -144,7 +142,6 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
String bill_code = CodeUtil.getNewCode("IN_STORE_CODE");
io_mst.put("iostorinv_id", iostorinv_id);
io_mst.put("bill_code", bill_code);
io_mst.put("buss_type", ((String) whereJson.get("bill_type")).substring(0, 4));
io_mst.put("io_type", IOSEnum.IO_TYPE.code("入库"));
io_mst.put("bill_type", whereJson.get("bill_type"));
io_mst.put("biz_date", whereJson.get("biz_date").toString().substring(0, 10));
@ -364,11 +361,11 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, map.get("storagevehicle_code"))
);
//判断仓位的长高宽是否能放下载具
if (structattr.getWidth() < 0 &&
structattr.getHeight() < 0 &&
structattr.getZdepth() < 0) {
throw new BadRequestException("载具不符合,请检查!");
}
// if (structattr.getWidth() < 0 &&
// structattr.getHeight() < 0 &&
// structattr.getZdepth() < 0) {
// throw new BadRequestException("载具不符合,请检查!");
// }
sect_id = map.get("sect_id");
sect_code = map.get("sect_code");
sect_name = map.get("sect_name");
@ -469,7 +466,6 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
* pcsn 批次号
*/
public Structattr getStructattr(JSONObject param) {
return RedissonUtils.lockAndReturn(() -> {
List<Structattr> structattrs = iStructattrService.inBoundSectDiv(
StrategyStructParam.builder()
.ioType(param.getString("ioType"))
@ -484,7 +480,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
throw new BadRequestException("无可用货位");
}
return structattrs.get(0);
}, "1" + param.getString("stor_code"), 5);
}

Loading…
Cancel
Save