Browse Source

add:新增空载具入库、空载具出库、手工组盘

master
刘先源 3 weeks ago
parent
commit
ed19713d51
  1. 6
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java
  2. 36
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java
  3. 16
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml
  4. 5
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
  5. 49
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaEmpVehicleController.java
  6. 14
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/controller/PdaIosInController.java
  7. 36
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaEmpVehicleService.java
  8. 24
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/PdaIosInService.java
  9. 186
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaEmpVehicleServiceImpl.java
  10. 63
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java
  11. 165
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleInTask.java
  12. 165
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleOutTask.java
  13. 5
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java
  14. 7
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java
  15. 5
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/GroupPlate.java
  16. 18
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvMapper.xml
  17. 7
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/OutBillServiceImpl.java
  18. 8
      wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java
  19. 1
      wms/nladmin-ui/src/views/wms/basedata/group/index.vue
  20. 33
      wms/nladmin-ui/src/views/wms/basedata/structattr/index.vue
  21. 16
      wms/nladmin-ui/src/views/wms/st/inbill/AddDialog.vue
  22. 1
      wms/nladmin-ui/src/views/wms/st/inbill/AddDtl.vue
  23. 4
      wms/nladmin-ui/src/views/wms/st/inbill/DivDialog.vue
  24. 8
      wms/nladmin-ui/src/views/wms/st/inbill/ViewDialog.vue
  25. 2
      wms/nladmin-ui/src/views/wms/st/inbill/index.vue
  26. 16
      wms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue
  27. 2
      wms/nladmin-ui/src/views/wms/st/outbill/AddDtl.vue
  28. 8
      wms/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue
  29. 4
      wms/nladmin-ui/src/views/wms/st/outbill/StructIvt.vue
  30. 12
      wms/nladmin-ui/src/views/wms/st/outbill/ViewDialog.vue
  31. 2
      wms/nladmin-ui/src/views/wms/st/outbill/index.vue
  32. 1
      wms/nladmin-ui/src/views/wms/statement/structivt/index.vue

6
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java

@ -171,10 +171,13 @@ public class NDCAgvServiceImpl implements NDCAgvService {
if (phase < 0 || index < 0) { if (phase < 0 || index < 0) {
return null; return null;
} }
byte indexhigh = (byte) IntToHexHigh(index); byte indexhigh = (byte) IntToHexHigh(index);
byte indexlow = (byte) IntToHexLow(index); byte indexlow = (byte) IntToHexLow(index);
byte phasehigh = (byte) IntToHexHigh(phase); byte phasehigh = (byte) IntToHexHigh(phase);
byte phaselow = (byte) IntToHexLow(phase); byte phaselow = (byte) IntToHexLow(phase);
byte resulthigh = (byte) IntToHexHigh(result);
byte resultlow = (byte) IntToHexLow(result);
byte[] b = new byte[]{(byte) 0X87, (byte) 0XCD, byte[] b = new byte[]{(byte) 0X87, (byte) 0XCD,
(byte) 0X00, (byte) 0X08, (byte) 0X00, (byte) 0X08,
@ -183,11 +186,10 @@ public class NDCAgvServiceImpl implements NDCAgvService {
(byte) 0X00, (byte) 0X6D, (byte) 0X00, (byte) 0X6D,
(byte) 0X00, (byte) 0X06, (byte) 0X00, (byte) 0X06,
(byte) indexhigh, (byte) indexlow, (byte) indexhigh, (byte) indexlow,
(byte) 0X01, (byte) 0X10, (byte) 0X01, (byte) 0X12,
(byte) phasehigh, (byte) phaselow (byte) phasehigh, (byte) phaselow
}; };
log.info("反馈agv动作数据--index:" + hexToString(indexhigh & 0xFF) + hexToString(indexlow & 0xFF) + ",phase:" + hexToString(phasehigh & 0xFF) + hexToString(phaselow & 0xFF)); log.info("反馈agv动作数据--index:" + hexToString(indexhigh & 0xFF) + hexToString(indexlow & 0xFF) + ",phase:" + hexToString(phasehigh & 0xFF) + hexToString(phaselow & 0xFF));
System.out.println("反馈agv动作数据:" + Bytes2HexString(b)); System.out.println("反馈agv动作数据:" + Bytes2HexString(b));

36
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

@ -19,6 +19,7 @@ import org.nl.acs.device_driver.RequestMethodEnum;
import org.nl.acs.device_driver.basedriver.agv.utils.AgvActionEnum; import org.nl.acs.device_driver.basedriver.agv.utils.AgvActionEnum;
import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver;
import org.nl.acs.device_driver.driver.AbstractDeviceDriver; import org.nl.acs.device_driver.driver.AbstractDeviceDriver;
import org.nl.acs.device_driver.storage.standard_storage.StandardStorageDeviceDriver;
import org.nl.acs.ext.wms.data.one.feedBackTaskStatus.FeedBackTaskStatusRequest; import org.nl.acs.ext.wms.data.one.feedBackTaskStatus.FeedBackTaskStatusRequest;
import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl;
@ -204,8 +205,14 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
//log.info("{},{}", device_code, "允许AGV取货。"); //log.info("{},{}", device_code, "允许AGV取货。");
// lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, "允许AGV取货。")); // lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, "允许AGV取货。"));
} }
//到达取货等待点 // 到达货架
//(需要WCS反馈) if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
log.info("到达{}取货点开始取货", device_code);
inst.setExecute_status("1");
instructionService.update(inst);
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
flag = true;
}
} else if (phase == 0x04) { } else if (phase == 0x04) {
data = getData(data, index, inst, task); data = getData(data, index, inst, task);
//取货完毕 //取货完毕
@ -248,12 +255,17 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
agv_status = 2; agv_status = 2;
//到达普通站点取货完成 //到达普通站点取货完成
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
data = actionComplete(index, inst, device_code, 0, Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("取货完成")), "取货完成"); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
log.info("agv进入" + device_code + "取货完成"); log.info("agv进入" + device_code + "取货完成");
flag = true; flag = true;
} }
//到达放货等待点 //到达货架取货完成
//(需要WCS反馈) if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
log.info("agv进入" + device_code + "取货完成");
flag = true;
}
} else if (phase == 0x06) { } else if (phase == 0x06) {
data = getData(data, index, inst, task); data = getData(data, index, inst, task);
//到达放货点 //到达放货点
@ -297,6 +309,12 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} }
// 货架
if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
log.info("到达{}放货点", device_code);
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
flag = true;
}
if (flag) { if (flag) {
// log.info("==================允许AGV放货=================="); // log.info("==================允许AGV放货==================");
// logServer.deviceExecuteLog(device_code, "", "", "允许AGV放货。"); // logServer.deviceExecuteLog(device_code, "", "", "允许AGV放货。");
@ -343,7 +361,13 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
//agv普通站点放货完成 //agv普通站点放货完成
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
log.info("{}放货完成", device_code); log.info("{}放货完成", device_code);
data = actionComplete(index, inst, device_code, 0, Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成"); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
flag = true;
}
//agv货架放货完成
if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
log.info("{}放货完成", device_code);
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
flag = true; flag = true;
} }
if (flag) { if (flag) {

16
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPbStoragevehicleextMapper.xml

@ -72,11 +72,25 @@
attr.sect_name, attr.sect_name,
mater.material_code, mater.material_code,
mater.material_name, mater.material_name,
mater.material_spec mater.material_spec,
late.prison_area
FROM FROM
md_pb_storagevehicleext ext md_pb_storagevehicleext ext
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
INNER JOIN md_me_materialbase mater ON mater.material_id = ext.material_id INNER JOIN md_me_materialbase mater ON mater.material_id = ext.material_id
LEFT JOIN (
SELECT
material_id,
storagevehicle_code,
pcsn,
MAX(prison_area) AS prison_area
FROM
md_pb_groupplate
WHERE
status = '02'
GROUP BY
material_id,storagevehicle_code,pcsn
) late ON late.material_id = ext.material_id and late.pcsn = ext.pcsn and late.storagevehicle_code = ext.storagevehicle_code
<where> <where>
1 = 1 1 = 1
<if test="param.stor_id != null and param.stor_id != ''"> <if test="param.stor_id != null and param.stor_id != ''">

5
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java

@ -67,16 +67,17 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
String layer_num = (String) whereJson.get("layer_num"); String layer_num = (String) whereJson.get("layer_num");
String is_used = (String) whereJson.get("is_used"); String is_used = (String) whereJson.get("is_used");
String is_have = (String) whereJson.get("is_have"); String is_have = (String) whereJson.get("is_have");
String storagevehicle_type = (String) whereJson.get("storagevehicle_type");
return structattrMapper.selectPage(new Page<>(page.getPage() + 1 ,page.getSize()), new LambdaQueryWrapper<Structattr>() return structattrMapper.selectPage(new Page<>(page.getPage() + 1 ,page.getSize()), new LambdaQueryWrapper<Structattr>()
.like(StrUtil.isNotEmpty(search),Structattr::getStruct_code, search)
.like(StrUtil.isNotEmpty(search),Structattr::getStruct_name, search)
.eq(StrUtil.isNotEmpty(stor_id),Structattr::getStor_id, stor_id) .eq(StrUtil.isNotEmpty(stor_id),Structattr::getStor_id, stor_id)
.eq(StrUtil.isNotEmpty(sect_id),Structattr::getSect_id, sect_id) .eq(StrUtil.isNotEmpty(sect_id),Structattr::getSect_id, sect_id)
.eq(StrUtil.isNotEmpty(lock_type),Structattr::getLock_type, lock_type) .eq(StrUtil.isNotEmpty(lock_type),Structattr::getLock_type, lock_type)
.eq(StrUtil.isNotEmpty(layer_num),Structattr::getLayer_num, layer_num) .eq(StrUtil.isNotEmpty(layer_num),Structattr::getLayer_num, layer_num)
.eq(StrUtil.isNotEmpty(storagevehicle_type),Structattr::getStoragevehicle_type, storagevehicle_type)
.eq(StrUtil.isNotEmpty(is_used),Structattr::getIs_used, is_used) .eq(StrUtil.isNotEmpty(is_used),Structattr::getIs_used, is_used)
.eq(Structattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")) .eq(Structattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否"))
.like(StrUtil.isNotEmpty(search),Structattr::getStruct_code, search)
.isNull("1".equals(is_have),Structattr::getStoragevehicle_code) .isNull("1".equals(is_have),Structattr::getStoragevehicle_code)
.isNotNull("2".equals(is_have),Structattr::getStoragevehicle_code) .isNotNull("2".equals(is_have),Structattr::getStoragevehicle_code)
.orderByAsc(Structattr::getStruct_code) .orderByAsc(Structattr::getStruct_code)

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

@ -0,0 +1,49 @@
package org.nl.wms.pda.ios_manage.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.ios_manage.service.PdaEmpVehicleService;
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-08-05
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/pda/empVehicle")
@Slf4j
public class PdaEmpVehicleController {
@Autowired
private PdaEmpVehicleService pdaEmpVehicleService;
@PostMapping("/in")
@Log("空托盘入库")
@SaIgnore
public ResponseEntity<Object> empVehicleIn(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaEmpVehicleService.empVehicleIn(whereJson),HttpStatus.OK);
}
@PostMapping("/out")
@Log("空托盘出库")
@SaIgnore
public ResponseEntity<Object> empVehicleOut(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaEmpVehicleService.empVehicleOut(whereJson),HttpStatus.OK);
}
}

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

@ -74,4 +74,18 @@ public class PdaIosInController {
return new ResponseEntity<>(pdaIosInService.confirmIn(whereJson),HttpStatus.OK); return new ResponseEntity<>(pdaIosInService.confirmIn(whereJson),HttpStatus.OK);
} }
@PostMapping("/getMaterCode")
@Log("获取物料信息")
@SaIgnore
public ResponseEntity<Object> getMaterCode(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaIosInService.getMaterCode(whereJson),HttpStatus.OK);
}
@PostMapping("/groupPlateTwo")
@Log("人工组盘确认")
@SaIgnore
public ResponseEntity<Object> groupPlateTwo(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaIosInService.groupPlateTwo(whereJson),HttpStatus.OK);
}
} }

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

@ -0,0 +1,36 @@
package org.nl.wms.pda.ios_manage.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda.util.PdaResponse;
/**
* <p>
* 手持空托盘管理 服务类
* </p>
*
* @author Liuxy
* @since 2025-08-05
*/
public interface PdaEmpVehicleService {
/**
* 空托盘入库
* @param whereJson {
* point_code 起点
* storagevehicle_code 载具编码
*
* }
* @return PdaResponse
*/
PdaResponse empVehicleIn(JSONObject whereJson);
/**
*
* @param whereJson {
* point_code: 终点
* storagevehicle_type: 载具类型
* }
* @return PdaResponse
*/
PdaResponse empVehicleOut(JSONObject whereJson);
}

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

@ -71,4 +71,28 @@ public interface PdaIosInService {
* @return PdaResponse * @return PdaResponse
*/ */
PdaResponse confirmIn(JSONObject whereJson); PdaResponse confirmIn(JSONObject whereJson);
/**
* 获取物料信息
* @param whereJson {
* material_code: 物料编码
* }
* @return PdaResponse
*/
PdaResponse getMaterCode(JSONObject whereJson);
/**
* 人工组盘确认
* @param whereJson {
* storagevehicle_code: 载具编码
* material_code: 物料编码
* material_name: 物料名称
* material_spec: 物料规格
* pcsn: 批次
* qty: 数量
* prison_area: 监区
* }
* @return PdaResponse
*/
PdaResponse groupPlateTwo(JSONObject whereJson);
} }

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

@ -0,0 +1,186 @@
package org.nl.wms.pda.ios_manage.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.pda.ios_manage.service.PdaEmpVehicleService;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleInTask;
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask;
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.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 手持空托盘管理 实现类
* </p>
*
* @author Liuxy
* @since 2025-08-05
*/
@Service
public class PdaEmpVehicleServiceImpl implements PdaEmpVehicleService {
/**
* 载具服务
*/
@Autowired
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
/**
* 仓位服务
*/
@Autowired
private IStructattrService iStructattrService;
/**
* 载具入库任务类
*/
@Autowired
private EmpVehicleInTask empVehicleInTask;
/**
* 载具出库任务类
*/
@Autowired
private EmpVehicleOutTask empVehicleOutTask;
@Override
@Transactional
public PdaResponse empVehicleIn(JSONObject whereJson) {
// 基础校验
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code"));
if (ObjectUtil.isEmpty(vehicleDao)) {
throw new BadRequestException("载具不存在!【" + whereJson.getString("storagevehicle_code") + "】");
}
if (ObjectUtil.isEmpty(whereJson.getString("point_code"))) {
throw new BadRequestException("起点不能为空!");
}
// 根据托盘类型,尺寸大小找对应入库货位
Structattr attrDao = queryInPoint(vehicleDao);
if (ObjectUtil.isEmpty(attrDao)) {
throw new BadRequestException("仓位不足或条件不满足!");
}
// 锁定终点
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘入库锁"));
iStructattrService.updateById(attrDao);
// 创建任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", whereJson.getString("point_code"));
jsonTask.put("point_code2", attrDao.getStruct_code());
jsonTask.put("vehicle_code", whereJson.getString("storagevehicle_code"));
jsonTask.put("Priority", IOSConstant.IS_DELETE_YES);
empVehicleInTask.create(jsonTask);
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse empVehicleOut(JSONObject whereJson) {
// 基础校验
if (ObjectUtil.isEmpty(whereJson.getString("point_code"))) {
throw new BadRequestException("终点不能为空!");
}
if (ObjectUtil.isEmpty(whereJson.getString("storagevehicle_type"))) {
throw new BadRequestException("载具类型不能为空!");
}
// 根据载具类型查找对应载具
Structattr attrDao = queryOutPoint(whereJson);
if (ObjectUtil.isEmpty(attrDao)) {
throw new BadRequestException("库内此类型空托盘不足!【" + whereJson.getString("storagevehicle_type") + "】");
}
// 锁定仓位
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("空托盘出库锁"));
iStructattrService.updateById(attrDao);
// 创建任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", attrDao.getStruct_code());
jsonTask.put("point_code2", whereJson.getString("point_code"));
jsonTask.put("vehicle_code", attrDao.getStoragevehicle_code());
jsonTask.put("Priority", IOSConstant.IS_DELETE_YES);
empVehicleOutTask.create(jsonTask);
return PdaResponse.requestOk();
}
/**
* 查找入库货位
* 分配规则
* 1.满足托盘类型 2.满足载具的长宽高
*
* @param vehicleDao 载具实体类
* @return Structattr 仓位实体类
*/
private Structattr queryInPoint(MdPbStoragevehicleinfo vehicleDao) {
// 默认库区为主存区
List<Structattr> structattrList = iStructattrService.list(new LambdaQueryWrapper<>(Structattr.class)
.eq(Structattr::getSect_code, IOSConstant.SECT_CODE)
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code, ""))
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("金属托盘")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("金属托盘"))
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("小料架")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("小料架"))
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(短边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(短边)"))
.eq(vehicleDao.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(长边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(长边)"))
.orderByAsc(Structattr::getStruct_code)
);
// 校验长宽高
Structattr structattr = structattrList.stream().filter(st ->
st.getWidth().compareTo(vehicleDao.getVehicle_width()) >= 0 &&
st.getHeight().compareTo(vehicleDao.getVehicle_height()) >= 0 &&
st.getZdepth().compareTo(vehicleDao.getVehicle_long()) >= 0
).findAny().get();
return structattr;
}
/**
* 寻找出库托盘仓位
* 分配规则
* 1.根据载具类型匹配
*
* @param whereJson {
* storagevehicle_type: 载具类型
* }
* @return Structattr 仓位实体类
*/
private Structattr queryOutPoint(JSONObject whereJson) {
// 默认库区为主存区
String storagevehicle_type = whereJson.getString("storagevehicle_type");
Structattr attrDao = iStructattrService.getOne(new LambdaQueryWrapper<>(Structattr.class)
.eq(Structattr::getSect_code, IOSConstant.SECT_CODE)
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES)
.and(wrapper -> wrapper.isNotNull(Structattr::getStoragevehicle_code).or().ne(Structattr::getStoragevehicle_code, ""))
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("金属托盘")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("金属托盘"))
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("小料架")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("小料架"))
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("大料架(短边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(短边)"))
.eq(storagevehicle_type.equals(IOSEnum.VEHICLE_TYPE.code("大料架(长边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(长边)"))
.orderByAsc(Structattr::getStruct_code)
);
return attrDao;
}
}

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

@ -240,6 +240,69 @@ public class PdaIosInServiceImpl implements PdaIosInService {
return PdaResponse.requestOk(); return PdaResponse.requestOk();
} }
@Override
public PdaResponse getMaterCode(JSONObject whereJson) {
return PdaResponse.requestParamOk(iMdMeMaterialbaseService.getByCode(whereJson.getString("material_code")));
}
@Override
@Transactional
public PdaResponse groupPlateTwo(JSONObject whereJson) {
// 校验载具
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code"));
if (ObjectUtil.isEmpty(vehicleDao)) {
throw new BadRequestException("载具不存在!【"+whereJson.getString("storagevehicle_code")+"】");
}
// 校验此载具是否有入库状态的组盘信息
boolean is_in = iMdPbGroupplateService.list(
new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getStoragevehicle_code, vehicleDao.getStoragevehicle_code())
).stream()
.anyMatch(row -> row.getStatus().equals(IOSEnum.GROUP_PLATE_STATUS.code("入库")));
if (is_in) {
throw new BadRequestException("当前载具已经入库,请检查数据!【"+whereJson.getString("storagevehicle_code")+"】");
}
// 获取物料信息
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(whereJson.getString("material_code"));
// 校验组盘物料、批次、原单据号、原单据类型是否一样
List<GroupPlate> plateDaoList = iMdPbGroupplateService.list(
new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
);
if (ObjectUtil.isNotEmpty(plateDaoList)) {
boolean is_like = plateDaoList.stream()
.allMatch(row -> row.getMaterial_id().equals(materDao.getMaterial_id()) &&
row.getPcsn().equals(whereJson.getString("pcsn"))
);
if (!is_like) {
throw new BadRequestException("当前托盘所绑物料批次与当前组盘物料批次不一致!");
}
}
// 插入组盘记录表
GroupPlate groupDao = new GroupPlate();
groupDao.setGroup_id(org.nl.config.IdUtil.getStringId());
groupDao.setStoragevehicle_code(whereJson.getString("storagevehicle_code"));
groupDao.setMaterial_id(materDao.getMaterial_id());
groupDao.setPcsn(whereJson.getString("pcsn"));
// 默认数量个
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getByCode("EA");
groupDao.setQty_unit_id(unitDao.getMeasure_unit_id());
groupDao.setQty_unit_name(unitDao.getUnit_name());
groupDao.setQty(whereJson.getBigDecimal("qty"));
groupDao.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
groupDao.setCreate_id(SecurityUtils.getCurrentUserId());
groupDao.setCreate_name(SecurityUtils.getCurrentNickName());
groupDao.setCreate_time(DateUtil.now());
groupDao.setExt_type(whereJson.getString("ext_type"));
groupDao.setExt_code(whereJson.getString("ext_code"));
groupDao.setPrison_area(whereJson.getString("prison_area"));
iMdPbGroupplateService.save(groupDao);
return PdaResponse.requestOk();
}
/** /**
* 组织入库插入数据 * 组织入库插入数据
* @param whereJson { * @param whereJson {

165
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleInTask.java

@ -0,0 +1,165 @@
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.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author: Liuxy
* @Description: 空载具入库
* @Date: 2025/8/5
*/
@Component(value = "EmpVehicleInTask")
@TaskType("EmpVehicleInTask")
public class EmpVehicleInTask extends AbstractTask {
/**
* 任务服务类
*/
@Autowired
private ISchBaseTaskService taskService;
/**
* 仓位服务
*/
@Autowired
private IStructattrService iStructattrService;
@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(EmpVehicleInTask.class.getSimpleName());
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
// task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_name("管理员");
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 (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
}
@Override
public void backMes(String task_code) {
}
@Transactional
public void finishTask(SchBaseTask taskObj) {
// 更新终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code())
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_YES)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新任务
taskObj.setRemark("已完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskService.updateById(taskObj);
}
@Transactional
public void cancelTask(SchBaseTask taskObj) {
// 更新终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
.set(Structattr::getTaskdtl_id, null)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新任务
taskObj.setRemark("已取消");
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskService.updateById(taskObj);
}
}

165
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/EmpVehicleOutTask.java

@ -0,0 +1,165 @@
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.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* @Author: Liuxy
* @Description: 空载具出库
* @Date: 2025/8/5
*/
@Component(value = "EmpVehicleOutTask")
@TaskType("EmpVehicleOutTask")
public class EmpVehicleOutTask extends AbstractTask {
/**
* 任务服务类
*/
@Autowired
private ISchBaseTaskService taskService;
/**
* 仓位服务
*/
@Autowired
private IStructattrService iStructattrService;
@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(EmpVehicleOutTask.class.getSimpleName());
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
// task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_name("管理员");
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 (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
throw new BadRequestException("只能取消生成中的任务!");
}
this.cancelTask(taskObj);
}
@Override
public void backMes(String task_code) {
}
@Transactional
public void finishTask(SchBaseTask taskObj) {
// 更新起点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getStoragevehicle_code, null)
.set(Structattr::getIs_emptyvehicle, IOSConstant.IS_DELETE_NO)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新任务
taskObj.setRemark("已完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskService.updateById(taskObj);
}
@Transactional
public void cancelTask(SchBaseTask taskObj) {
// 更新终点
iStructattrService.update(
new UpdateWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())
.set(Structattr::getTaskdtl_id, null)
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
);
// 更新任务
taskObj.setRemark("已取消");
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskService.updateById(taskObj);
}
}

5
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSConstant.java

@ -75,4 +75,9 @@ public class IOSConstant {
* 手持定点任务 * 手持定点任务
*/ */
public final static String PDA_POINT_TASK = "PdaPointTask"; public final static String PDA_POINT_TASK = "PdaPointTask";
/**
* 主存区编码
*/
public final static String SECT_CODE = "ZC01";
} }

7
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java

@ -38,12 +38,13 @@ public enum IOSEnum {
// 锁类型 // 锁类型
LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2" LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2"
, "移入锁", "3", "移出锁", "4", "其他锁","9" , "移入锁", "3", "移出锁", "4", "空托盘入库锁", "5", "空托盘出库锁", "6",
"其他锁","9"
)), )),
// 存放载具类型 // 存放载具类型
VEHICLE_TYPE_PUT(MapOf.of("1", "1", "2", "2", "3", "3" VEHICLE_TYPE_PUT(MapOf.of("大料架(短边)", "1", "大料架(长边)", "2", "金属托盘", "3"
, "4", "4")), , "小料架", "4")),
// 载具类型 // 载具类型
VEHICLE_TYPE(MapOf.of("金属托盘", "00", "小料架", "01", "大料架(短边)", "02" VEHICLE_TYPE(MapOf.of("金属托盘", "00", "小料架", "01", "大料架(短边)", "02"

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

@ -86,4 +86,9 @@ public class GroupPlate implements Serializable {
* 来源单据类型 * 来源单据类型
*/ */
private String ext_type; private String ext_type;
/**
* 监区A1/A2/A3/A4/A5/A6/A7/A9/A10/A11/A12/A14
*/
private String prison_area;
} }

18
wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/dao/mapper/IOStorInvMapper.xml

@ -48,8 +48,22 @@
</select> </select>
<select id="getGroupPlate" resultType="org.nl.wms.warehouse_management.service.dto.GroupPlateDto"> <select id="getGroupPlate" resultType="org.nl.wms.warehouse_management.service.dto.GroupPlateDto">
SELECT MAX(group_id) as group_id,storagevehicle_code,gp.material_id,pcsn,MAX(gp.qty_unit_id) as qty_unit_id,MAX(gp.qty_unit_name) as qty_unit_name,SUM(qty) as qty,SUM(qty) as plan_qty,MAX(remark),MAX(`status`),MAX(ext_code) as ext_code,MAX(ext_type) as ext_type,mtl.material_code, mtl.material_name SELECT
FROM md_pb_groupplate gp MAX(group_id) as group_id,
storagevehicle_code,
gp.material_id,pcsn,
MAX(gp.qty_unit_id) as qty_unit_id,
MAX(gp.qty_unit_name) as qty_unit_name,
SUM(qty) as qty,
SUM(qty) as plan_qty,
MAX(remark),MAX(`status`),
MAX(ext_code) as ext_code,
MAX(ext_type) as ext_type,
mtl.material_code,
mtl.material_name,
MAX(gp.prison_area) AS prison_area
FROM
md_pb_groupplate gp
LEFT JOIN md_me_materialbase mtl ON gp.material_id = mtl.material_id LEFT JOIN md_me_materialbase mtl ON gp.material_id = mtl.material_id
<where> <where>
gp.status = '01' gp.status = '01'

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

@ -310,10 +310,10 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
ioStorInvDtl.put("bill_status", IOSEnum.BILL_STATUS.code("生成")); ioStorInvDtl.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
ioStorInvDtl.put("qty_unit_id", row.get("qty_unit_id")); ioStorInvDtl.put("qty_unit_id", row.get("qty_unit_id"));
ioStorInvDtl.put("qty_unit_name", row.getString("qty_unit_name")); ioStorInvDtl.put("qty_unit_name", row.getString("qty_unit_name"));
ioStorInvDtl.put("plan_qty", row.get("qty")); ioStorInvDtl.put("plan_qty", row.get("plan_qty"));
ioStorInvDtl.put("remark", row.getString("remark")); ioStorInvDtl.put("remark", row.getString("remark"));
ioStorInvDtl.put("assign_qty", "0"); ioStorInvDtl.put("assign_qty", "0");
ioStorInvDtl.put("unassign_qty", row.get("qty")); ioStorInvDtl.put("unassign_qty", row.get("plan_qty"));
ioStorInvDtlMapper.insert(ioStorInvDtl.toJavaObject(IOStorInvDtl.class)); ioStorInvDtlMapper.insert(ioStorInvDtl.toJavaObject(IOStorInvDtl.class));
@ -1217,6 +1217,8 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
.eq(SchBasePoint::getPoint_code,ioStorInvDis.getPoint_code()) .eq(SchBasePoint::getPoint_code,ioStorInvDis.getPoint_code())
); );
// 判断是否是整出
if (ioStorInvDis.getReal_qty().doubleValue() >= ioStorInvDis.getPlan_qty().doubleValue()) {
//更新组盘记录表 //更新组盘记录表
groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class) groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库")) .set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库"))
@ -1224,6 +1226,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
.eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id()) .eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id())
.eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code()) .eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code())
); );
}
// 查询该明细下是否还有未完成的分配明细 // 查询该明细下是否还有未完成的分配明细
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class) int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)

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

@ -738,13 +738,13 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
.eq(Structattr::getLock_type,IOSEnum.LOCK_TYPE.code("未锁定")) .eq(Structattr::getLock_type,IOSEnum.LOCK_TYPE.code("未锁定"))
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code,"")) .and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code,""))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("金属托盘")), .eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("金属托盘")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("3")) Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("金属托盘"))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("小料架")), .eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("小料架")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("4")) Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("小料架"))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(短边)")), .eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(短边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("1")) Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(短边)"))
.eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(长边)")), .eq(mdPbStoragevehicleinfo.getStoragevehicle_type().equals(IOSEnum.VEHICLE_TYPE.code("大料架(长边)")),
Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("2")) Structattr::getStoragevehicle_type, IOSEnum.VEHICLE_TYPE_PUT.code("大料架(长边)"))
); );
if (ObjectUtil.isEmpty(structattrList)){ if (ObjectUtil.isEmpty(structattrList)){
throw new BadRequestException("该库区没有仓位"); throw new BadRequestException("该库区没有仓位");

1
wms/nladmin-ui/src/views/wms/basedata/group/index.vue

@ -75,6 +75,7 @@
<el-table-column prop="pcsn" label="批次" :min-width="flexWidth('pcsn',crud.data,'批次')" /> <el-table-column prop="pcsn" label="批次" :min-width="flexWidth('pcsn',crud.data,'批次')" />
<el-table-column prop="status" label="状态" :formatter="formattStatus" :min-width="flexWidth('status',crud.data,'状态')" /> <el-table-column prop="status" label="状态" :formatter="formattStatus" :min-width="flexWidth('status',crud.data,'状态')" />
<el-table-column prop="qty" label="组盘数量" :formatter="crud.formatNum3" :min-width="100" /> <el-table-column prop="qty" label="组盘数量" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="prison_area" label="监区" :min-width="flexWidth('prison_area',crud.data,'监区')" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" /> <el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="create_name" label="组盘人" :min-width="flexWidth('create_name',crud.data,'组盘人')" /> <el-table-column prop="create_name" label="组盘人" :min-width="flexWidth('create_name',crud.data,'组盘人')" />
<el-table-column prop="create_time" label="组盘时间" :min-width="flexWidth('create_time',crud.data,'组盘时间')" /> <el-table-column prop="create_time" label="组盘时间" :min-width="flexWidth('create_time',crud.data,'组盘时间')" />

33
wms/nladmin-ui/src/views/wms/basedata/structattr/index.vue

@ -69,6 +69,22 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="存放类型">
<el-select
v-model="query.storagevehicle_type"
clearable
size="mini"
class="filter-item"
@change="crud.toQuery"
>
<el-option
v-for="item in dict.store_type"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="模糊搜索"> <el-form-item label="模糊搜索">
<el-input <el-input
v-model="query.search" v-model="query.search"
@ -267,11 +283,17 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="sect_name" label="库区名称" /> <el-table-column prop="sect_name" label="库区名称" />
<el-table-column prop="placement_type" label="放置类型" min-width="120" show-overflow-tooltip> <!-- <el-table-column prop="placement_type" label="放置类型" min-width="120" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
{{ dict.label.placement_type[scope.row.placement_type] }} {{ dict.label.placement_type[scope.row.placement_type] }}
</template> </template>
</el-table-column>-->
<el-table-column prop="storagevehicle_type" label="存放类型" min-width="120" show-overflow-tooltip>
<template slot-scope="scope">
{{ dict.label.store_type[scope.row.storagevehicle_type] }}
</template>
</el-table-column> </el-table-column>
<el-table-column prop="is_emptyvehicle" label="是否空载具" width="150" :formatter="isEmpVehihcle" />
<el-table-column label="是否启用" align="center" prop="is_used"> <el-table-column label="是否启用" align="center" prop="is_used">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
@ -373,7 +395,7 @@ const defaultForm = {
} }
export default { export default {
name: 'Structattr', name: 'Structattr',
dicts: ['ST_HEIGHT_TYPE', 'is_used', 'd_lock_type', 'SCH_TASK_TYPE_DTL', 'placement_type'], dicts: ['ST_HEIGHT_TYPE', 'is_used', 'd_lock_type', 'SCH_TASK_TYPE_DTL', 'placement_type', 'store_type'],
components: { pagination, crudOperation, rrOperation, udOperation }, components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()], mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() { cruds() {
@ -487,6 +509,13 @@ export default {
taskdtl_typeFormat(row) { taskdtl_typeFormat(row) {
return this.dict.label.SCH_TASK_TYPE_DTL[row.taskdtl_type] return this.dict.label.SCH_TASK_TYPE_DTL[row.taskdtl_type]
}, },
isEmpVehihcle(row) {
if (row.is_emptyvehicle === '1') {
return '是'
} else {
return '否'
}
},
sectQueryChange(val) { sectQueryChange(val) {
if (val.length === 1) { if (val.length === 1) {
this.query.stor_id = val[0] this.query.stor_id = val[0]

16
wms/nladmin-ui/src/views/wms/st/inbill/AddDialog.vue

@ -84,8 +84,8 @@
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" /> <el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" />
</el-form-item> </el-form-item>
<el-form-item label="总量" prop="total_qty"> <el-form-item label="总量" prop="total_qty">
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input-number <el-input-number
v-model="form.total_qty" v-model="form.total_qty"
:controls="false" :controls="false"
@ -117,7 +117,7 @@
size="mini" size="mini"
@click="insertEvent()" @click="insertEvent()"
> >
添加箱号物料 添加组盘物料
</el-button> </el-button>
</span> </span>
@ -131,11 +131,11 @@
:header-cell-style="{background:'#f5f7fa',color:'#606266'}" :header-cell-style="{background:'#f5f7fa',color:'#606266'}"
> >
<el-table-column type="index" label="序号" width="55" align="center" /> <el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column show-overflow-tooltip width="150" prop="pcsn" label="批次号" /> <el-table-column show-overflow-tooltip prop="pcsn" label="批次号" />
<el-table-column show-overflow-tooltip width="150" prop="material_code" label="物料编码" /> <el-table-column show-overflow-tooltip prop="material_code" label="物料编码" />
<el-table-column show-overflow-tooltip width="150" prop="material_name" label="物料名称" /> <el-table-column show-overflow-tooltip prop="material_name" label="物料名称" />
<el-table-column show-overflow-tooltip width="170" prop="plan_qty" label="数量" /> <el-table-column show-overflow-tooltip prop="plan_qty" label="数量" />
<el-table-column show-overflow-tooltip width="170" prop="qty_unit_name" label="计量单位名称" /> <el-table-column show-overflow-tooltip prop="qty_unit_name" label="计量单位名称" />
<el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="120" fixed="right"> <el-table-column v-if="crud.status.cu > 0" align="center" label="操作" width="120" fixed="right">
<template scope="scope"> <template scope="scope">
<el-button <el-button

1
wms/nladmin-ui/src/views/wms/st/inbill/AddDtl.vue

@ -57,6 +57,7 @@
<el-table-column show-overflow-tooltip width="150" prop="material_name" label="物料名称" /> <el-table-column show-overflow-tooltip width="150" prop="material_name" label="物料名称" />
<el-table-column width="200" prop="pcsn" label="批次号" /> <el-table-column width="200" prop="pcsn" label="批次号" />
<el-table-column show-overflow-tooltip width="170" prop="qty" label="数量" /> <el-table-column show-overflow-tooltip width="170" prop="qty" label="数量" />
<el-table-column show-overflow-tooltip width="170" prop="prison_area" label="监区" />
<el-table-column show-overflow-tooltip width="170" prop="qty_unit_name" label="计量单位名称" /> <el-table-column show-overflow-tooltip width="170" prop="qty_unit_name" label="计量单位名称" />
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->

4
wms/nladmin-ui/src/views/wms/st/inbill/DivDialog.vue

@ -69,7 +69,7 @@
show-overflow-tooltip show-overflow-tooltip
prop="plan_qty" prop="plan_qty"
:formatter="crud.formatNum3" :formatter="crud.formatNum3"
label="量" label="量"
align="center" align="center"
/> />
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center" /> <el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" align="center" />
@ -164,7 +164,7 @@
show-overflow-tooltip show-overflow-tooltip
prop="plan_qty" prop="plan_qty"
:formatter="crud.formatNum3" :formatter="crud.formatNum3"
label="量" label="量"
align="center" align="center"
/> />
<el-table-column show-overflow-tooltip prop="point_code" label="入库点" align="center" /> <el-table-column show-overflow-tooltip prop="point_code" label="入库点" align="center" />

8
wms/nladmin-ui/src/views/wms/st/inbill/ViewDialog.vue

@ -69,8 +69,8 @@
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" /> <el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" />
</el-form-item> </el-form-item>
<el-form-item label="总量" prop="total_qty"> <el-form-item label="总量" prop="total_qty">
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input-number <el-input-number
v-model="form.total_qty" v-model="form.total_qty"
:controls="false" :controls="false"
@ -111,7 +111,7 @@
<el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" /> <el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column prop="pcsn" label="批次号" width="150" align="center" /> <el-table-column prop="pcsn" label="批次号" width="150" align="center" />
<!-- <el-table-column prop="sap_pcsn" label="SAP批次号" width="150" align="center" />--> <!-- <el-table-column prop="sap_pcsn" label="SAP批次号" width="150" align="center" />-->
<el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" /> <el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" />
<el-table-column prop="qty_unit_name" label="单位" align="center" /> <el-table-column prop="qty_unit_name" label="单位" align="center" />
<!-- <el-table-column prop="source_bill_type" label="源单类型" align="center" width="130px" :formatter="invtypeFormat" />--> <!-- <el-table-column prop="source_bill_type" label="源单类型" align="center" width="130px" :formatter="invtypeFormat" />-->
<!-- <el-table-column prop="source_bill_code" label="源单号" align="center" width="130px" />--> <!-- <el-table-column prop="source_bill_code" label="源单号" align="center" width="130px" />-->
@ -139,7 +139,7 @@
<el-table-column prop="pcsn" label="批次号" align="center" width="150" /> <el-table-column prop="pcsn" label="批次号" align="center" width="150" />
<!-- <el-table-column prop="sap_pcsn" label="SAP批次号" align="center" />--> <!-- <el-table-column prop="sap_pcsn" label="SAP批次号" align="center" />-->
<el-table-column prop="storagevehicle_code" label="载具号" align="center" /> <el-table-column prop="storagevehicle_code" label="载具号" align="center" />
<el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" /> <el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" />
<el-table-column prop="point_code" label="起始位置" align="center" /> <el-table-column prop="point_code" label="起始位置" align="center" />
<el-table-column prop="struct_code" label="目的位置" align="center" /> <el-table-column prop="struct_code" label="目的位置" align="center" />
<el-table-column prop="task_code" label="任务号" align="center" /> <el-table-column prop="task_code" label="任务号" align="center" />

2
wms/nladmin-ui/src/views/wms/st/inbill/index.vue

@ -181,7 +181,7 @@
<el-table-column show-overflow-tooltip min-width="120" prop="biz_date" label="业务日期" /> <el-table-column show-overflow-tooltip min-width="120" prop="biz_date" label="业务日期" />
<el-table-column show-overflow-tooltip prop="create_mode" :formatter="create_modeFormat" label="生成方式" /> <el-table-column show-overflow-tooltip prop="create_mode" :formatter="create_modeFormat" label="生成方式" />
<el-table-column label="明细数" align="center" prop="detail_count" /> <el-table-column label="明细数" align="center" prop="detail_count" />
<el-table-column label="总量" align="center" prop="total_qty"> <el-table-column label="总量" align="center" prop="total_qty">
<template slot-scope="scope"> <template slot-scope="scope">
{{ fun(scope.row.total_qty) }} {{ fun(scope.row.total_qty) }}
</template> </template>

16
wms/nladmin-ui/src/views/wms/st/outbill/AddDialog.vue

@ -84,8 +84,8 @@
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" /> <el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" />
</el-form-item> </el-form-item>
<el-form-item label="总量" prop="total_qty"> <el-form-item label="总量" prop="total_qty">
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input-number <el-input-number
v-model="form.total_qty" v-model="form.total_qty"
:controls="false" :controls="false"
@ -147,10 +147,9 @@
<span v-show="scope.row.edit">{{ scope.row.pcsn }}</span> <span v-show="scope.row.edit">{{ scope.row.pcsn }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="plan_qty" label="出库量" width="150" align="center"> <el-table-column prop="plan_qty" label="出库量" width="150" align="center">
<template scope="scope"> <template scope="scope">
<el-input-number v-show="!scope.row.edit" v-model="scope.row.plan_qty" :precision="3" :controls="false" :min="1" style="width: 120px" /> <el-input-number v-model="scope.row.plan_qty" :precision="3" :controls="false" :min="1" @change="changeQty" style="width: 120px" />
<span v-show="scope.row.edit">{{ scope.row.plan_qty }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="qty_unit_name" label="单位" align="center" /> <el-table-column prop="qty_unit_name" label="单位" align="center" />
@ -364,6 +363,13 @@ export default {
this.form.total_qty = parseFloat(this.form.total_qty) - parseFloat(rows[index].plan_qty) this.form.total_qty = parseFloat(this.form.total_qty) - parseFloat(rows[index].plan_qty)
rows.splice(index, 1) rows.splice(index, 1)
this.form.detail_count = this.form.tableData.length this.form.detail_count = this.form.tableData.length
},
changeQty(row) {
let qty = 0
this.form.tableData.forEach(a => {
qty += a.plan_qty
})
this.form.total_qty = qty
} }
} }
} }

2
wms/nladmin-ui/src/views/wms/st/outbill/AddDtl.vue

@ -76,7 +76,7 @@
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" /> <el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" /> <el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="pcsn" label="批次" :min-width="flexWidth('pcsn',crud.data,'批次')" /> <el-table-column prop="pcsn" label="批次" :min-width="flexWidth('pcsn',crud.data,'批次')" />
<el-table-column prop="qty" label="量" :formatter="crud.formatNum3" :min-width="flexWidth('qty',crud.data,'重量')" /> <el-table-column prop="qty" label="量" :formatter="crud.formatNum3" :min-width="flexWidth('qty',crud.data,'重量')" />
<el-table-column prop="frozen_qty" label="冻结数量" :formatter="crud.formatNum3" :min-width="flexWidth('frozen_qty',crud.data,'冻结数量')" /> <el-table-column prop="frozen_qty" label="冻结数量" :formatter="crud.formatNum3" :min-width="flexWidth('frozen_qty',crud.data,'冻结数量')" />
<el-table-column prop="qty_unit_name" label="重量单位" :min-width="flexWidth('qty_unit_name',crud.data,'重量单位')" /> <el-table-column prop="qty_unit_name" label="重量单位" :min-width="flexWidth('qty_unit_name',crud.data,'重量单位')" />
</el-table> </el-table>

8
wms/nladmin-ui/src/views/wms/st/outbill/DivDialog.vue

@ -128,9 +128,9 @@
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" /> <el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" /> <el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" width="140px" /> <el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" width="140px" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="量" :formatter="crud.formatNum3" align="center" /> <el-table-column show-overflow-tooltip prop="plan_qty" label="量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="assign_qty" label="已分配量" :formatter="crud.formatNum3" align="center" /> <el-table-column show-overflow-tooltip prop="assign_qty" label="已分配量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="unassign_qty" label="未分配量" :formatter="crud.formatNum3" align="center" /> <el-table-column show-overflow-tooltip prop="unassign_qty" label="未分配量" :formatter="crud.formatNum3" align="center" />
</el-table> </el-table>
</el-card> </el-card>
<div class="crud-opts2"> <div class="crud-opts2">
@ -211,7 +211,7 @@
<el-table-column prop="material_name" label="物料名称" width="170px" :min-width="flexWidth('material_name',crud.data,'物料名称')" /> <el-table-column prop="material_name" label="物料名称" width="170px" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="storagevehicle_code" label="载具号" width="150px" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" /> <el-table-column prop="storagevehicle_code" label="载具号" width="150px" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="pcsn" label="批次号" width="150px" :min-width="flexWidth('pcsn',crud.data,'批次号')" /> <el-table-column prop="pcsn" label="批次号" width="150px" :min-width="flexWidth('pcsn',crud.data,'批次号')" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="出库量" :formatter="crud.formatNum3" align="center" width="120px" :min-width="flexWidth('plan_qty',crud.data,'出库量')"> <el-table-column show-overflow-tooltip prop="plan_qty" label="出库量" :formatter="crud.formatNum3" align="center" width="120px" :min-width="flexWidth('plan_qty',crud.data,'出库量')">
<template scope="scope"> <template scope="scope">
<el-input-number v-show="mstrow.bill_type === '1011'" v-model="scope.row.plan_qty" :precision="3" :controls="false" :min="1" style="width: 90px" /> <el-input-number v-show="mstrow.bill_type === '1011'" v-model="scope.row.plan_qty" :precision="3" :controls="false" :min="1" style="width: 90px" />
<span v-show="mstrow.bill_type !== '1011'">{{ parseFloat(scope.row.plan_qty).toFixed(3) }}</span> <span v-show="mstrow.bill_type !== '1011'">{{ parseFloat(scope.row.plan_qty).toFixed(3) }}</span>

4
wms/nladmin-ui/src/views/wms/st/outbill/StructIvt.vue

@ -93,7 +93,7 @@
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="托盘编码" align="center" width="250px" /> <el-table-column show-overflow-tooltip prop="storagevehicle_code" label="托盘编码" align="center" width="250px" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" /> <el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip sortable prop="pcsn" label="批次号" align="center" width="150px" /> <el-table-column show-overflow-tooltip sortable prop="pcsn" label="批次号" align="center" width="150px" />
<el-table-column show-overflow-tooltip prop="canuse_qty" label="可出量" :formatter="crud.formatNum3" align="center" /> <el-table-column show-overflow-tooltip prop="canuse_qty" label="可出量" :formatter="crud.formatNum3" align="center" />
<el-table-column align="center" label="操作" width="160" fixed="right"> <el-table-column align="center" label="操作" width="160" fixed="right">
<template scope="scope"> <template scope="scope">
<el-button v-show="!scope.row.edit" type="primary" class="filter-item" size="mini" icon="el-icon-edit" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> <el-button v-show="!scope.row.edit" type="primary" class="filter-item" size="mini" icon="el-icon-edit" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
@ -245,7 +245,7 @@ export default {
this.fullscreenLoading = false this.fullscreenLoading = false
}) })
} else { } else {
this.$confirm('未分配量不为0,是否继续提交?') this.$confirm('未分配量不为0,是否继续提交?')
.then(_ => { .then(_ => {
const rows = [] const rows = []
this.tableDtl.forEach((item) => { this.tableDtl.forEach((item) => {

12
wms/nladmin-ui/src/views/wms/st/outbill/ViewDialog.vue

@ -70,8 +70,8 @@
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" /> <el-input v-model="form.detail_count" size="mini" disabled style="width: 210px" />
</el-form-item> </el-form-item>
<el-form-item label="总量" prop="total_qty"> <el-form-item label="总量" prop="total_qty">
<label slot="label">&nbsp;&nbsp;&nbsp;:</label> <label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input-number <el-input-number
v-model="form.total_qty" v-model="form.total_qty"
:controls="false" :controls="false"
@ -129,9 +129,9 @@
<el-table-column min-width="140" show-overflow-tooltip prop="material_code" label="物料编码" align="center" /> <el-table-column min-width="140" show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" /> <el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column prop="pcsn" label="批次号" width="150px" align="center" show-overflow-tooltip /> <el-table-column prop="pcsn" label="批次号" width="150px" align="center" show-overflow-tooltip />
<el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" /> <el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" />
<el-table-column prop="assign_qty" :formatter="crud.formatNum3" label="已分配量" align="center" width="100px" /> <el-table-column prop="assign_qty" :formatter="crud.formatNum3" label="已分配量" align="center" width="100px" />
<el-table-column prop="unassign_qty" :formatter="crud.formatNum3" label="未分配量" align="center" width="100px" /> <el-table-column prop="unassign_qty" :formatter="crud.formatNum3" label="未分配量" align="center" width="100px" />
<el-table-column prop="qty_unit_name" label="单位" align="center" /> <el-table-column prop="qty_unit_name" label="单位" align="center" />
<el-table-column prop="source_bill_code" label="源单号" align="center" width="130px" /> <el-table-column prop="source_bill_code" label="源单号" align="center" width="130px" />
<el-table-column show-overflow-tooltip prop="remark" label="明细备注" align="center" /> <el-table-column show-overflow-tooltip prop="remark" label="明细备注" align="center" />
@ -157,7 +157,7 @@
<el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" /> <el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column prop="storagevehicle_code" label="载具号" width="150px" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" /> <el-table-column prop="storagevehicle_code" label="载具号" width="150px" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="pcsn" label="批次号" align="center" show-overflow-tooltip /> <el-table-column prop="pcsn" label="批次号" align="center" show-overflow-tooltip />
<el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" /> <el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="量" align="center" />
<el-table-column prop="struct_code" label="仓位" align="center" show-overflow-tooltip /> <el-table-column prop="struct_code" label="仓位" align="center" show-overflow-tooltip />
<el-table-column prop="sect_name" label="区域" align="center" show-overflow-tooltip /> <el-table-column prop="sect_name" label="区域" align="center" show-overflow-tooltip />
<!-- <el-table-column show-overflow-tooltip prop="instorage_time" width="150px" label="入库时间" align="center" />--> <!-- <el-table-column show-overflow-tooltip prop="instorage_time" width="150px" label="入库时间" align="center" />-->

2
wms/nladmin-ui/src/views/wms/st/outbill/index.vue

@ -184,7 +184,7 @@
<el-table-column show-overflow-tooltip prop="bill_type" :formatter="bill_typeFormat" label="业务类型" /> <el-table-column show-overflow-tooltip prop="bill_type" :formatter="bill_typeFormat" label="业务类型" />
<el-table-column show-overflow-tooltip width="100" prop="biz_date" label="业务日期" /> <el-table-column show-overflow-tooltip width="100" prop="biz_date" label="业务日期" />
<el-table-column show-overflow-tooltip label="明细数" align="center" prop="detail_count" width="60" /> <el-table-column show-overflow-tooltip label="明细数" align="center" prop="detail_count" width="60" />
<el-table-column show-overflow-tooltip label="计划量" align="center" prop="total_qty" width="100" :formatter="crud.formatNum3" /> <el-table-column show-overflow-tooltip label="计划量" align="center" prop="total_qty" width="100" :formatter="crud.formatNum3" />
<!-- <el-table-column show-overflow-tooltip label="实际重量" align="center" prop="plan_qty" width="100" :formatter="crud.formatNum3" />--> <!-- <el-table-column show-overflow-tooltip label="实际重量" align="center" prop="plan_qty" width="100" :formatter="crud.formatNum3" />-->
<el-table-column show-overflow-tooltip label="是否回传" align="center" prop="is_upload" width="80" :formatter="formatIsUpload" /> <el-table-column show-overflow-tooltip label="是否回传" align="center" prop="is_upload" width="80" :formatter="formatIsUpload" />
<el-table-column show-overflow-tooltip :formatter="create_modeFormat" prop="create_mode" label="生成方式" width="100" /> <el-table-column show-overflow-tooltip :formatter="create_modeFormat" prop="create_mode" label="生成方式" width="100" />

1
wms/nladmin-ui/src/views/wms/statement/structivt/index.vue

@ -89,6 +89,7 @@
<el-table-column prop="storagevehicle_code" label="载具号" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" /> <el-table-column prop="storagevehicle_code" label="载具号" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="canuse_qty" label="可用数" :formatter="crud.formatNum3" :min-width="100" /> <el-table-column prop="canuse_qty" label="可用数" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" /> <el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="prison_area" label="监区" :min-width="100" />
<el-table-column prop="qty_unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" /> <el-table-column prop="qty_unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" /> <el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="insert_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" /> <el-table-column prop="insert_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" />

Loading…
Cancel
Save