rev:出库修改

This commit is contained in:
zhangzhiqiang
2023-07-27 11:22:23 +08:00
parent e60c8a8c0f
commit 4edcab8b9e
24 changed files with 359 additions and 182 deletions

View File

@@ -42,9 +42,9 @@ public enum AcsTaskEnum {
TASK_STRUCT_CP_OUT("12","出库-成品-生产出库"),
TASK_STRUCT_CP_CHECK("13","-盘点"),
TASK_WASH_LACK("20","清洗机-缺料请求"),
TASK_WASH_EMP("21","清洗机-空叫空"),
TASK_WASH_EMP("21","清洗机-空框请求"),
TASK_WASH_FULL_AUTO("22","清洗机-满料请求自动"),//去半成品入库:参数不全也去异常处理位
TASK_WASH_FULL_QZ("23","清洗机-满料请求强制"),//去异常位:
TASK_WASH_FULL_QZ("23","清洗机-强制搬出"),//去异常位:
TASK_Engrave_CALL("24","刻字机上料"),
TASK_Engrave_EMPTY("25","刻字输送线-空框送回"),
TASK_POINT_TO_POINT("99","点对点搬运"),

View File

@@ -23,6 +23,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
JSONArray form = new JSONArray();
for (Object o : arr) {
JSONObject task = (JSONObject) o;
if (task.get("is_send")==null){
task.put("is_send",true);
}
JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id")
, "task_type", task.getString("acs_task_type")//垃圾
, "task_code", task.getString("task_code")
@@ -51,6 +54,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
JSONArray form = new JSONArray();
for (Object o : arr) {
JSONObject task = (JSONObject) o;
if (task.get("is_send")==null){
task.put("is_send",true);
}
JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id")
, "task_code", task.getString("task_code")
, "start_point_code", task.getString("point_code1")//起点
@@ -74,6 +80,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
JSONArray form = new JSONArray();
for (Object o : arr) {
JSONObject task = (JSONObject) o;
if (task.get("is_send")==null){
task.put("is_send",true);
}
JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id")
, "task_code", task.getString("task_code")
, "task_group_id", task.getString("task_group_id")

View File

@@ -96,4 +96,11 @@ public class StructattrController {
public ResponseEntity<Object> getSectCascader(@RequestBody JSONObject json) {
return new ResponseEntity<>(ivtStructattrService.getSectCascader(json),HttpStatus.OK);
}
@PostMapping("/setMaterial")
@Log("修改仓位库存")
//("查询联级仓位")
public ResponseEntity<Object> setMaterial(@RequestBody JSONObject json) {
return new ResponseEntity<>(ivtStructattrService.getSectCascader(json),HttpStatus.OK);
}
}

View File

@@ -160,6 +160,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
this.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, struct_code)
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code(type))
.set(StIvtStructattr::getInv_code,inv_code));
.set(StIvtStructattr::getInv_code,inv_code)
.set(StIvtStructattr::getTask_code,inv_code));
}
}

View File

@@ -5,15 +5,18 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.masterdata_manage.master.service.classstandard.IMdPbClassstandardService;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.mps_manage.deliveryorder.service.dao.PcsDeliveryOrder;
import org.nl.wms.mps_manage.deliveryorder.service.dao.mapper.PcsDeliveryOrderMapper;
import org.nl.wms.mps_manage.deliveryorder.service.IPcsDeliveryOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.storage_manage.semimanage.MLEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -50,6 +53,10 @@ public class PcsDeliveryOrderServiceImpl extends ServiceImpl<PcsDeliveryOrderMap
order.setCreate_id(currentUserId);
order.setCreate_name(nickName);
order.setCreate_time(DateUtil.now());
order.setStatus(MLEnum.BILL_STATUS.code("生成"));
MdMeMaterialbase one = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>()
.eq("material_code", form.getString("material_code")));
order.setMaterial_id(one.getMaterial_id());
this.save(order);
}

View File

@@ -24,7 +24,7 @@ public class MpsSaleOrder implements Serializable{
/**
* 销售单标识
*/
@TableId(type = IdType.ASSIGN_ID)
@TableId
@ApiModelProperty(value = "/**销售单标识*/")
private String sale_id;
/**
@@ -194,6 +194,11 @@ public class MpsSaleOrder implements Serializable{
*/
@ApiModelProperty(value = "/**aps最早开始时间下料时间)*/")
private String early_start_time;
/**
* aps订单号
*/
@ApiModelProperty(value = "/**aps订单号 */")
private String aps_sale_code;
/**
* aps订单状态
*/

View File

@@ -62,10 +62,10 @@
<if test="query.cust_code != null">
and der.cust_code = #{query.cust_code}
</if>
<if test="query.material_code != null">
and der.material_code = #{query.material_code}
</if>
</where>
</select>
<select id="getPdaMaterial" resultType="java.util.Map">

View File

@@ -22,6 +22,8 @@ public class OrderQuery extends BaseQuery<MpsSaleOrder> {
private String cust_code;
private String material_code;
private Boolean is_delete = false;

View File

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
@@ -127,28 +128,29 @@ public class MpsSaleOrderServiceImpl extends ServiceImpl<MpsSaleOrderMapper,MpsS
@Override
@Transactional(rollbackFor = Exception.class)
public void excelImport(MultipartFile file, HttpServletRequest request) {
InputStream inputStream = null;
Map<String, Integer> orderSeqNoMap = new HashMap<>();
List<MpsSaleOrder> data = new ArrayList<>();
Map<String, String> errorMap = new HashMap<>();
if (file.isEmpty()) {
throw new BadRequestException("文件为空,请添加数据后重新导入");
}
try {
inputStream = file.getInputStream();
try (InputStream inputStream = file.getInputStream()) {
ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0);
List<List<Object>> read = excelReader.read();
// 循环获取的数据
List<MpsSaleOrder> data = new ArrayList<>();
Map<String,String> errorMap = new HashMap();
row:
for (int i = 1; i < read.size(); i++) {
List<Object> list = read.get(i);
if(ObjectUtil.isEmpty(list)) {
continue;
}
MpsSaleOrder mpsSaleOrder = new MpsSaleOrder();
mpsSaleOrder.setSale_id(IdUtil.getStringId());
mpsSaleOrder.setSale_type("01");
mpsSaleOrder.setStatus("10");
mpsSaleOrder.setCreate_time(DateUtil.now());
mpsSaleOrder.setConfirm_time(DateUtil.now());
mpsSaleOrder.setIs_delete(0);
mpsSaleOrder.setCreate_id(SecurityUtils.getCurrentUserId());
mpsSaleOrder.setCreate_name(SecurityUtils.getCurrentUsername());
mpsSaleOrder.setAps_status("X");
@@ -156,13 +158,10 @@ public class MpsSaleOrderServiceImpl extends ServiceImpl<MpsSaleOrderMapper,MpsS
for(int j = 0; j < list.size(); j++) {
String col = null == list.get(j) ? "" : String.valueOf(list.get(j));
//存在订单编号,忽略不导入
OrderQuery orderQuery = new OrderQuery();
List<Map> saleCode = baseMapper.queryAll(orderQuery);
if(saleCode.stream().anyMatch(m -> col.equals(m.get("sale_code")))) {
continue;
}
解析cell:
{
// List<Map> saleCode = baseMapper.queryAll(new OrderQuery());
// if(saleCode.stream().anyMatch(m -> col.equals(m.get("sale_code")) && "10".equals(m.get("status")))) {
// continue;
// }
if(j == 0) {
if(StringUtils.isBlank(col)) {
throw new BadRequestException("销售单号不能为空");
@@ -174,71 +173,106 @@ public class MpsSaleOrderServiceImpl extends ServiceImpl<MpsSaleOrderMapper,MpsS
throw new BadRequestException("合同号不能为空");
}
mpsSaleOrder.setContract_code(col);
//mpsSaleOrder.setAps_sale_code(mpsSaleOrder.getSale_code() + "-" + col);
}
if(j == 2) {
if(StringUtils.isBlank(col)) {
throw new BadRequestException("规格名称不能为空");
throw new BadRequestException("物料编号不能为空");
}
mpsSaleOrder.setMaterial_spec(col);
List<MdMeMaterialbase> meMaterialBases = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().like("material_spec", col));
if(CollectionUtils.isEmpty(meMaterialBases)) {
errorMap.put("" + i + "" + col, "物料规格对应物料信息不存在");
MdMeMaterialbase meMaterialBases = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_code", col));
if(meMaterialBases == null) {
errorMap.put("" + i + "" + col, "物料编号对应物料信息不存在");
}
else{
Optional<MdMeMaterialbase> first = meMaterialBases.stream().findFirst();
first.ifPresent(mdMeMaterialbase ->
{
//物料id
mpsSaleOrder.setMaterial_id(mdMeMaterialbase.getMaterial_id());
mpsSaleOrder.setMaterial_id(meMaterialBases.getMaterial_id());
// 物料编码
mpsSaleOrder.setMaterial_code(mdMeMaterialbase.getMaterial_code());
mpsSaleOrder.setMaterial_code(meMaterialBases.getMaterial_code());
// 计量单位
mpsSaleOrder.setQty_unit_id(mdMeMaterialbase.getBase_unit_id());
});
mpsSaleOrder.setQty_unit_id(meMaterialBases.getBase_unit_id());
mpsSaleOrder.setMaterial_spec(meMaterialBases.getMaterial_spec());
}
}
if(j == 3) {
if(StringUtils.isBlank(col)) {
throw new BadRequestException("物料规格不能为空");
}
//规格校验?
}
if(j == 4) {
if(StringUtils.isBlank(col)) {
throw new BadRequestException("工段信息不能为空");
}
//智能一线,智能三线
mpsSaleOrder.setProduct_area(col.contains("") || col.contains("3") ? "A3" : "A1");
}
if(j == 4) {
if(j == 5) {
if(StringUtils.isBlank(col)) {
throw new BadRequestException("销售数量不能为空");
}
mpsSaleOrder.setSale_qty(BigDecimal.valueOf(Double.parseDouble(col)));
BigDecimal saleQty = new BigDecimal(NumberUtils.isNumber(col) ? NumberUtils.toDouble(col) : 0);
mpsSaleOrder.setSale_qty(saleQty);
}
if(j == 5) {
if(j == 6) {
//计量单位
if(StringUtils.isNotBlank(col)) {
mpsSaleOrder.setQty_unit_name(col);
}
}
if(j == 6) {
//最早开始时间(下料时间)
if(StringUtils.isNotBlank(col)) {
mpsSaleOrder.setEarly_start_time(DateUtil.format(DateUtil.parse(col), "yyyy-MM-dd"));
}
}
if(j == 7) {
// if(j == 7) {
// //最早开始时间(下料时间)
// if(StringUtils.isNotBlank(col)) {
// mpsSaleOrder.setEarly_start_time(DateUtil.format(DateUtil.parse(col), "yyyy-MM-dd"));
// }
// }
if(j == 8) {
if(StringUtils.isBlank(col)) {
throw new BadRequestException("订单交期不能为空");
}
mpsSaleOrder.setPlandeliver_date(String.valueOf(DateUtil.parse(col)));
if(col.contains("."))
{
int currentYear = DateUtil.thisYear(); // 假设默认使用2023年份
String[] dateParts = col.split("\\.");
String month = dateParts[1];
String day = dateParts[2];
// 将提取的部分拼接成标准的日期格式"yyyy-MM-dd"
String formattedDate = currentYear + "-" + month + "-" + day;
// 使用DateUtil.parse解析日期字符串
mpsSaleOrder.setPlandeliver_date(formattedDate);
}
if(j == 8) {
//备注
if(StringUtils.isNotBlank(col)) {
mpsSaleOrder.setRemark(col);
else{
mpsSaleOrder.setPlandeliver_date(String.valueOf(DateUtil.parse(col, "yyyy-MM-dd")));
}
}
}
// 设置明细号
String orderCode = mpsSaleOrder.getSale_code();
if(orderCode != null) {
int seqNo = orderSeqNoMap.getOrDefault(orderCode, 0) + 1;
orderSeqNoMap.put(orderCode, seqNo);
mpsSaleOrder.setSeq_no(seqNo * 100);
}
OrderQuery orderQuery =new OrderQuery();
orderQuery.setSale_code( mpsSaleOrder.getSale_code());
orderQuery.setStatus("10");
List<Map> salesOrders = baseMapper.queryAll(orderQuery);
//相同订单号
if(salesOrders.size()>0) {
List<Map> salesOrderList = salesOrders.stream().filter(m -> mpsSaleOrder.getSale_code().equals(m.get("sale_code")) && mpsSaleOrder.getMaterial_code().equals(m.get("material_code"))).collect(Collectors.toList());
if(salesOrderList.size()>0)
{
continue;
}
else
{
Map maxSeqNoOrder= salesOrders.stream()
.max(Comparator.comparingInt(m -> (int) m.get("seq_no")))
.orElse(null);
int maxSeqNoValue = (int) maxSeqNoOrder.get("seq_no");
mpsSaleOrder.setSeq_no(maxSeqNoValue+100);
}
}
mpsSaleOrder.setAps_sale_code(mpsSaleOrder.getSale_code()+"-"+mpsSaleOrder.getSeq_no());
if(CollectionUtils.isEmpty(errorMap)) {
if(null != mpsSaleOrder.getSale_code()) {
if(mpsSaleOrder.getSale_code() != null) {
data.add(mpsSaleOrder);
}
}
@@ -246,22 +280,15 @@ public class MpsSaleOrderServiceImpl extends ServiceImpl<MpsSaleOrderMapper,MpsS
throw new BadRequestException(JSON.toJSONString(errorMap));
}
}
this.saveBatch(data);
}
catch(Exception e) {
} catch (Exception e) {
e.printStackTrace();
throw new BadRequestException(e.getMessage());
}
finally {
if(inputStream != null) {
try {
inputStream.close();
}
catch(Exception ignored) {}
}
}
}
@Override
public void update(JSONObject form) {
MpsSaleOrder mpsSaleOrder = form.toJavaObject(MpsSaleOrder.class);

View File

@@ -27,6 +27,7 @@ import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashSendMaterialQZTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashSendMaterialTask;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
@@ -65,6 +66,8 @@ public class PdaWashController {
private WmsToAcsService wmsToAcsService;
@Autowired
private WashSendMaterialTask washSendMaterialTask;
@Autowired
private WashSendMaterialQZTask washSendMaterialQZTask;
@PostMapping("/specList")
@SaIgnore
@@ -262,6 +265,13 @@ public class PdaWashController {
washSendMaterialTask.createTask(query);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/washQzFinish")
@Log("强制下料")
@SaIgnore
public ResponseEntity<Object> washQzFinish(@RequestBody JSONObject query) {
washSendMaterialQZTask.createTask(query);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/washTaskFinish")

View File

@@ -37,6 +37,7 @@ import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -126,14 +127,15 @@ public class WashCallEmptyTask extends AbstractAcsTask {
JSONArray data = new JSONArray();
data.add(task);
// 下发
wms.issueTaskToAcs(data);
Map<String, Object> stringObjectMap = wms.issueTaskToAcs(data);
}, "bcpcallemp", 2);
} catch (Exception ex) {
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getStruct_code, task.getString("point_code3"))
.set(StIvtStructattr::getTask_code, "")
.eq(StIvtStructattr::getStruct_code, task.getString("point_code1"))
);
log.error("刻字请求异常,error:{}",ex);
schBaseTask.setRemark(ex.getMessage());
@@ -212,6 +214,7 @@ public class WashCallEmptyTask extends AbstractAcsTask {
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setTask_group_id(org.nl.common.utils.IdUtil.getStringId());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setIs_send(true);
taskService.updateById(schBaseTask);
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()

View File

@@ -51,6 +51,7 @@ public class WashSendMaterialQZTask extends AbstractAcsTask {
private ISchBasePointService pointService;
@Autowired
private WmsToAcsService wms;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -98,22 +99,18 @@ public class WashSendMaterialQZTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
String start_point_code = param.getString("device_code");
PdmProduceWorkorder order = null;
if (StringUtils.isNotEmpty(param.getString("workorder_code"))){
order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))// )
.eq("is_delete", false)
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
}
//?刻字满料请求:可以存在多个任务?
List<SchBaseTask> tasks = taskService.list(new QueryWrapper<SchBaseTask>()
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
.eq("point_code1", param.getString("device_code"))
.eq("point_code1", "A1_CPQXJ_01_X")
);
if (!CollectionUtils.isEmpty(tasks)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+tasks.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
throw new BadRequestException(String.format("设备%s存在未完成任务"+tasks.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), "A1_CPQXJ_01_X"));
}
SchBaseTask washTask = null;
String task_id = param.getString("task_id");
if (!StringUtils.isEmpty(task_id)){
washTask = taskService.getById(task_id);
}
// 查找任务状态
String taskdtl_id = IdUtil.getStringId();
@@ -123,29 +120,29 @@ public class WashSendMaterialQZTask extends AbstractAcsTask {
task.put("task_type", AcsTaskEnum.TASK_WASH_FULL_QZ.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", order!=null?order.getMaterial_id():"");
task.put("material_qty", param.getBigDecimal("weight"));
task.put("material_id", washTask!=null?washTask.getMaterial_id():"");
task.put("material_qty", param.getBigDecimal("wegiht"));
task.put("vehicle_code", param.getString("vehicle_code"));
task.put("task_status", TaskStatusEnum.CREATED.getCode());
task.put("point_code1", start_point_code);
task.put("point_code1", "A1_CPQXJ_01_X");
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
task.put("create_id", currentUserId);
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("is_send",true);
task.put("is_auto_issue",false);
task.put("priority", "1");
task.put("finished_type", "1");
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("table_fk_id",order!=null?order.getWorkorder_code():"");
task.put("table_fk_id",washTask!=null?washTask.getTask_id():"");
// 去刻字缓存区寻找空位
List<SchBasePoint> list = pointService.list(new QueryWrapper<SchBasePoint>()
.eq("is_used", "1")
.eq("region_code","A1_BCP_YC")
.eq("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode())
.eq("lock_type", StatusEnum.LOCK_OFF.getCode())
.last("and (material_id is null or material_id = '')")
);
.eq("lock_type", StatusEnum.LOCK_OFF.getCode()));
if (CollectionUtils.isEmpty(list)) {
throw new BadRequestException("异常位没有可用货位");
}
@@ -156,7 +153,7 @@ public class WashSendMaterialQZTask extends AbstractAcsTask {
pointService.updateById(point);
// 设置点位
task.put("update_time", DateUtil.now());
task.put("point_code2",point.getPoint_code());
task.put("point_code3",point.getPoint_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setTask_type(AcsTaskEnum.TASK_WASH_FULL_QZ.getCode());
@@ -174,10 +171,15 @@ public class WashSendMaterialQZTask extends AbstractAcsTask {
@Override
public void cancel(String task_id) {
SchBaseTask byId = taskService.getById(task_id);
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task_id));
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode())
.set("lock_type", StatusEnum.LOCK_OFF.getCode())
.eq("point_code",byId.getPoint_code3()));
}
/**
@@ -187,8 +189,6 @@ public class WashSendMaterialQZTask extends AbstractAcsTask {
@Override
@Transactional(timeout=TransactionDefinition.ISOLATION_READ_UNCOMMITTED)
public void pointConfirm(JSONObject task) {
//
}
@Override

View File

@@ -64,7 +64,7 @@ public class WashSendMaterialTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
if (StringUtils.isEmpty(param.getString("weight"))||StringUtils.isEmpty(param.getString("vechile_code"))){
if (StringUtils.isEmpty(param.getString("wegiht"))||StringUtils.isEmpty(param.getString("vechile_code"))){
throw new BadRequestException("请求参数不能为空");
}
String start_point_code = "A1_CPQXJ_01_X";
@@ -85,19 +85,16 @@ public class WashSendMaterialTask extends AbstractAcsTask {
form.put("bill_type","0001");
form.put("point_code",start_point_code);
form.put("stor_id", IOSEnum.STOR_CODE.code("半成品仓库"));//半成品仓库
form.put("total_qty",param.getString("weight"));
form.put("total_qty",param.getString("wegiht"));
form.put("material_id",order.getMaterial_id());
form.put("unit_weight",byId.getNet_weight());
form.put("storagevehicle_code",param.getString("vehicle_code"));
form.put("storagevehicle_code",param.getString("vechile_code"));
form.put("product_code","A1");
form.put("auto_send",true);
JSONObject req = new JSONObject();
req.put("from",form);
pdaStBcpInService.createIn(req);
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("task_step","")
.eq("task_id",param.getString("task_id")));
return "";
}

View File

@@ -3,6 +3,7 @@ package org.nl.wms.storage_manage.pda.controller;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiOperation;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.storage_manage.pda.service.PdaStBcpInService;
@@ -62,7 +63,8 @@ public class PdaStBcpInController {
@Log("呼叫空载具")
//("呼叫空载具")
public ResponseEntity<Object> callVehicle() {
return new ResponseEntity<>(pdaStBcpInService.callVehicle(), HttpStatus.OK);
pdaStBcpInService.callVehicle();
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
}
@PostMapping("/createIn")

View File

@@ -48,6 +48,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
@@ -158,25 +159,21 @@ public class PdaStBcpInServiceImpl implements PdaStBcpInService {
JSONObject result = new JSONObject();
result.put("message", "下发失败");
RedissonUtils.lock(() -> {
// 1.查入库点位
SchBasePoint pointDao = iSchBasePointService.getOne(
new QueryWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getRegion_code, PDAEnum.REGION_CODE.code("半成品入库区域"))
.eq(SchBasePoint::getIs_used, IOSEnum.IS_USED.code("")), false
);
// 2.判断此入库点是否有正在执行的任务
List<SchBaseTask> taskList = iSchBaseTaskService.list(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getIs_delete, false)
.ne(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.and(qr -> qr.eq(SchBaseTask::getPoint_code1, pointDao.getPoint_code())
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.and(qr -> qr.eq(SchBaseTask::getPoint_code1, "A1_CPQXJ_01_X")
.or()
.eq(SchBaseTask::getPoint_code2, pointDao.getPoint_code())
.eq(SchBaseTask::getPoint_code3, "A1_CPQXJ_01_X")
)
);
if (ObjectUtil.isNotEmpty(taskList)) throw new BadRequestException("有正在执行中的任务,请稍后在尝试!");
if (ObjectUtil.isNotEmpty(taskList)) {
throw new BadRequestException("清洗下料有正在执行中的任务,请稍后在尝试!"+taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
// 3.找一个空载具
StIvtStructattr attrDao = structattrService.getOne(
@@ -195,7 +192,7 @@ public class PdaStBcpInServiceImpl implements PdaStBcpInService {
.acs_task_type("7")
.task_group_id(IdUtil.getStringId())
.point_code1(attrDao.getStruct_code())
.point_code3(pointDao.getPoint_code())
.point_code3("A1_CPQXJ_01_X")
.vehicle_code(attrDao.getStoragevehicle_code())
.product_area("A1") // 暂时写死
.build();

View File

@@ -97,11 +97,11 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
.eq(MpsSaleOrder::getSale_code, row.getBase_bill_code())
.eq(MpsSaleOrder::getSeq_no, row.getBase_bill_table())
);
// if (ObjectUtil.isEmpty(orderDao)) {
// throw new BadRequestException("销售单不存在!");
// }
if (ObjectUtil.isEmpty(orderDao)) {
throw new BadRequestException(row.getSource_bill_code()+"对应销售单"+row.getBase_bill_code()+"_"+row.getBase_bill_table()+"不存在!");
}
row.setBase_billdtl_id(orderDao==null?"":orderDao.getSale_id().toString());
row.setBase_billdtl_id(orderDao.getSale_id());
row.setBase_bill_code(row.getBase_bill_code());
row.setBase_bill_type(orderDao==null?"":orderDao.getSale_type());
row.setBase_bill_table(row.getBase_bill_table());

View File

@@ -21,6 +21,9 @@
<if test="sale_id != null and sale_id != ''">
and ivt.sale_id = #{sale_id}
</if>
<if test="sale_code != null and sale_code != ''">
and ivt.sale_code = #{sale_code}
</if>
order by ivt.canuse_qty ASC,ivt.struct_code ASC
</select>

View File

@@ -29,9 +29,9 @@ spring:
password: ${DB_PWD:123456}
# 初始连接数
initial-size: 30
initial-size: 10
# 最小连接数
min-idle: 30
min-idle: 10
# 最大连接数
max-active: 100
# 是否自动回收超时连接

View File

@@ -38,6 +38,13 @@ export function changeEmp(data) {
data
})
}
export function setMaterial(data) {
return request({
url: 'api/structattr/setMaterial',
method: 'post',
data
})
}
export function getSectCascader(data) {
return request({
@@ -47,4 +54,4 @@ export function getSectCascader(data) {
})
}
export default { add, edit, del, changeActive, getSectCascader, changeEmp }
export default { add, edit, del, changeActive, getSectCascader, changeEmp, setMaterial }

View File

@@ -51,6 +51,61 @@
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<el-dialog
title="仓位物料设置"
append-to-body
:visible.sync="dialogVisible"
destroy-on-close
width="1000px"
close="closeView"
>
<el-form ref="form" :model="materialForm" :rules="rules" size="mini" label-suffix=":" label-width="90px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否空载具" prop="is_emptyvehicle">
<el-radio
v-for="item in trueorfalse"
:key="item.value"
v-model="materialForm.is_emptyvehicle"
:label="item.value"
>{{ item.label }}
</el-radio>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="载具号">
<label slot="label">&nbsp;&nbsp;&nbsp;:</label>
<el-input v-model="materialForm.storagevehicle_code" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item v-if="materialForm.is_emptyvehicle==false" label="物料编码">
<el-input v-model="materialForm.material_code" style="width: 200px;" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料编码" prop="material_code">
<template slot-scope="scope">
<el-input v-model="materialForm.material_code" clearable style="width: 370px">
<el-button slot="append" icon="el-icon-plus" @click="queryMater(materialForm)" />
</el-input>
</template>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="materialForm.is_emptyvehicle==false" label="物料数量">
<el-input-number v-model="materialForm.qty" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="closeView">取消</el-button>
<el-button type="primary" @click="setStructMaterial(form)">确认</el-button>
</div>
</el-dialog>
<!--表单组件-->
<el-dialog
:close-on-click-modal="false"
@@ -253,18 +308,27 @@
v-permission="['admin','structattr:edit','structattr:del']"
label="操作"
fixed="right"
width="120px"
width="180px"
align="center"
>
<template slot-scope="scope">
<span>
<udOperation
:data="scope.row"
:permission="permission"
/>
<el-button size="mini" type="text" icon="el-icon-edit" @click="toView(scope.row)">仓位设置</el-button>
</span>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<MaterDtl
:dialog-show.sync="materialShow"
:is-single="true"
:mater-opt-code="materType"
@setMaterValue="setMaterValue"
/>
<pagination />
</div>
</div>
@@ -278,6 +342,9 @@ import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import crudSectattr from '@/api/wms/basedata/st/sectattr'
import MaterDtl from '@/views/wms/pub/MaterDialog'
import {setMaterial} from "../../../../../api/wms/basedata/st/structattr";
/* import checkoutbill from "@/api/wms/st/core/outbill/checkoutbill";*/
const defaultForm = {
@@ -290,6 +357,7 @@ const defaultForm = {
sect_code: null,
sect_name: null,
stor_id: null,
material_code: null,
stor_code: null,
stor_name: null,
stor_type: null,
@@ -328,7 +396,7 @@ const defaultForm = {
export default {
name: 'Structattr',
dicts: ['ST_HEIGHT_TYPE', 'd_lock_type', 'SCH_TASK_TYPE_DTL'],
components: { pagination, crudOperation, rrOperation, udOperation },
components: { pagination, crudOperation, rrOperation, udOperation, MaterDtl },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({
@@ -354,7 +422,11 @@ export default {
}
}
return {
materialForm:{},
materialShow: false,
materType: '00',
sects: [],
dialogVisible: false,
trueorfalse: [ { value: true, label: '是' }, { value: false, label: '否' }],
invtypelist: [],
permission: {},
@@ -419,6 +491,21 @@ export default {
val[1] = form.sect_id
form.cascader = val
},
setStructMaterial(data){
console.log(data)
crudStructattr.setMaterial(data).then(res => {
this.crud.toQuery()
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
})
},
setMaterValue(row) {
console.log(row)
this.materialForm.material_code = row.material_code
this.tableData.splice(this.nowindex, 1, this.nowrow)
},
queryMater(index, row) {
this.materialShow = true
},
sectChange(val) {
this.form.sect_id = val[1]
},
@@ -472,6 +559,14 @@ export default {
}).catch(() => {
})
},
toView(row){
this.materialForm = row
this.dialogVisible = true
},
closeView(){
this.materialForm={}
this.dialogVisible = false
},
changeEmp(data) {
let msg = '设置该仓位非空载具,是否继续!'
if (data.is_emptyvehicle === false) {

View File

@@ -121,7 +121,7 @@
<el-input v-model="form.deliver_code" style="width: 200px;" />
</el-form-item>
<el-form-item label="销售单单号" prop="deliver_code">
<el-input v-model="form.deliver_code" style="width: 200px;" />
<el-input v-model="form.sale_code" style="width: 200px;" />
</el-form-item>
<el-form-item label="发货单明细" prop="seq_no">
<el-input v-model="form.seq_no" style="width: 200px;" />

View File

@@ -181,6 +181,12 @@
min-width="100"
show-overflow-tooltip
/>
<el-table-column
prop="seq_no"
label="销售单行号"
min-width="100"
show-overflow-tooltip
/>
<!-- <el-table-column prop="seq_no" label="明细序号" /> -->
<el-table-column
prop="sale_type"

View File

@@ -152,10 +152,10 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column prop="task_code" label="任务编码" min-width="100" show-overflow-tooltip />
<el-table-column prop="table_fk_id" label="业务编码" min-width="100" show-overflow-tooltip />
<el-table-column prop="table_fk_id" label="关联业务" min-width="100" show-overflow-tooltip />
<el-table-column v-if="true" prop="task_id" label="任务标识" min-width="150" show-overflow-tooltip />
<el-table-column v-if="true" prop="material_id" label="物料标识" min-width="150" show-overflow-tooltip />
<el-table-column v-if="true" prop="material_spec" label="物料标识" min-width="150" show-overflow-tooltip />
<el-table-column v-if="true" prop="material_id" label="物料id" min-width="150" show-overflow-tooltip />
<el-table-column v-if="true" prop="material_spec" label="规格" min-width="150" show-overflow-tooltip />
<el-table-column prop="task_name" label="任务类型" :min-width="flexWidth('task_name',crud.data,'任务类型')" />
<el-table-column prop="acs_task_type" label="acs任务类型" min-width="120" show-overflow-tooltip :formatter="acsTypeName" />
<el-table-column v-if="false" prop="task_status" label="任务状态" />

View File

@@ -152,7 +152,6 @@
<el-table-column show-overflow-tooltip prop="plan_qty" label="出库数量">
<template slot-scope="scope">
<el-input-number
v-show="!scope.row.edit"
v-model="form.tableData[scope.$index].plan_qty"
size="small"
:controls="false"
@@ -161,7 +160,7 @@
:min="0"
@change="changeQty"
/>
<span v-show="scope.row.edit">{{ scope.row.plan_qty }}</span>
<!-- <span v-show="scope.row.edit">{{ scope.row.plan_qty }}</span>-->
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="qty_unit_name" label="单位" />