add:一体机包装机叫料功能

This commit is contained in:
zhangzhiqiang
2023-08-09 15:47:37 +08:00
parent ef17d390f7
commit 192561edfe
6 changed files with 92 additions and 27 deletions

View File

@@ -222,12 +222,18 @@ public class PdaWashController {
@PostMapping("/materialList") @PostMapping("/materialList")
@Log("物料列表") @Log("物料列表")
@SaIgnore @SaIgnore
public ResponseEntity<Object> materialList(@RequestBody JSONObject query, PageQuery page) { public ResponseEntity<Object> materialList(@RequestBody JSONObject query) {
List<Map> list = new ArrayList<>(); List<Map> list = new ArrayList<>();
QueryWrapper<MdMeMaterialbase> queryWrapper = new QueryWrapper<>(); QueryWrapper<MdMeMaterialbase> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("material_type_id", "1528555445302726656");
if (StringUtils.isNotEmpty(query.getString("material_code"))){ if (StringUtils.isNotEmpty(query.getString("material_code"))){
queryWrapper.eq("material_code",query.getString("material_code")); queryWrapper.nested(a->a
.eq("material_code",query.getString("material_code"))
.or().like("material_spec",query.getString("material_code")));
} }
PageQuery page = new PageQuery();
page.setSize(query.getInteger("size"));
page.setPage(query.getInteger("page"));
Page<MdMeMaterialbase> result = materialbaseService.page(page.build(),queryWrapper); Page<MdMeMaterialbase> result = materialbaseService.page(page.build(),queryWrapper);
return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK);
} }

View File

@@ -7,16 +7,20 @@ package org.nl.wms.pda_manage.pda.controller;
*/ */
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo; import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log; import org.nl.common.anno.Log;
import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum; import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.RedissonUtils; import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService; import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
@@ -33,6 +37,7 @@ import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@@ -57,45 +62,92 @@ public class TmpPackageController {
private ISchBasePointService basePointService; private ISchBasePointService basePointService;
@Autowired @Autowired
private IPdmProduceWorkorderService workorderService; private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@PostMapping("packageList") @PostMapping("packageList")
@SaIgnore @SaIgnore
public ResponseEntity<Object> packageList(){ public ResponseEntity<Object> packageList(){
//workorderService.list(new QueryWrapper<PdmProduceWorkorder>().eq()) List<PdmProduceWorkorder> list = workorderService.list(new QueryWrapper<PdmProduceWorkorder>()
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); .eq("workprocedure_id", "1535144822984282112")
.eq("workorder_status", WorkerOrderEnum.PRODUCTING.getCode()));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
} }
@PostMapping("sendVechile") @PostMapping("sendMaterial")
@SaIgnore @SaIgnore
@Transactional
public ResponseEntity<Object> callVechile(@RequestBody JSONObject param){ public ResponseEntity<Object> callVechile(@RequestBody JSONObject param){
Assert.notNull(new Object[]{param.getString("device_code"),param.getString("point_code")},"请求参数不能为空");
JSONObject moveTask =taskService.createMoveTask(param.getString("point_code"),param.getString("device_code") , AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
basePointService.update(new UpdateWrapper<SchBasePoint>().set("lock_type",StatusEnum.LOCK_OFF.getCode())
.set("point_status",StatusEnum.POINT_STATUS_EMPTY.getCode())
.set("material_id","").set("qty",0)
.set("task_id","")
.set("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode())
.eq("point_code",param.getString("point_code")));
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
} }
@PostMapping("cachepoint") @PostMapping("cachepoint")
@SaIgnore @SaIgnore
public ResponseEntity<Object> kzpoint(@RequestBody JSONObject param) { public ResponseEntity<Object> kzpoint(@RequestBody JSONObject param) {
JSONObject jo = new JSONObject(); ///api/point/queryVehicle?page=0&size=20&sort=id%2Cdesc&product_area=A1&region_code=A1_KZHC
jo.put("device_code", "A1_KZ_SL"); param.put("region_code","A1_KZHC");
JSONObject result = wmsToAcsService.request(jo, "api/wms/startDischarge"); param.put("product_area","A1");
if (!StrUtil.equals(result.getString("status"), "200")) { List<Map<String, String>> list = basePointService.queryPointMaterial(param);
throw new BadRequestException((String)result.get("message")); return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
} }
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); @PostMapping("sendVechile")
}
@PostMapping("callVechile")
@SaIgnore @SaIgnore
public ResponseEntity<Object> kzresidue(@RequestBody JSONObject param){ public ResponseEntity<Object> kzresidue(@RequestBody JSONObject param){
RedissonUtils.lock(()->{ Assert.notNull(param.getString("device_code"),"请求参数不能为空");
JSONObject jo = new JSONObject(); // 判断当前点是否有未完成的任务
jo.put("next_point_code", param.getString("device_code")); List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
jo.put("start_point_code", "A1_KZ_SL"); .nested(i -> i
jo.put("weight", param.getString("qty")); .eq("point_code1", param.getString("device_code")).or()
JSONObject result = wmsToAcsService.request(jo, "api/wms/putOver"); .eq("point_code3", param.getString("device_code")))
if (!StrUtil.equals(result.getString("status"), "200")) { .lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (ObjectUtil.isNotEmpty(list)) {
throw new BadRequestException("当前点位" + param.getString("device_code") + "存在未完成的任务");
}
// 去刻字缓存区寻找空位
List<SchBasePoint> points = basePointService.list(new QueryWrapper<SchBasePoint>()
.eq("is_used", "1")
.eq("region_code","A1_KZHC")
.eq("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode())
.eq("lock_type", StatusEnum.LOCK_OFF.getCode())
.last("and (material_id is null or material_id = '')")
);
if (CollectionUtils.isEmpty(points)){
throw new BadRequestException("刻字缓存位无可用空点位");
}
JSONObject moveTask =taskService.createMoveTask(param.getString("device_code"), points.get(0).getPoint_code(), AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message")); throw new BadRequestException((String)result.get("message"));
} }
},"kzresidue",null); moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
// 完成
basePointService.update(new UpdateWrapper<SchBasePoint>().set("lock_type",StatusEnum.LOCK_OFF.getCode())
.set("point_status",StatusEnum.POINT_STATUS_EMPTY_VEHICLE.getCode())
.set("material_id","")
.set("task_id","")
.set("qty",0)
.eq("point_code",points.get(0).getPoint_code()));
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
} }
} }

View File

@@ -203,7 +203,9 @@ public class WashCallEmptyTask extends AbstractAcsTask {
.eq(StIvtStructattr::getIs_emptyvehicle,IOSEnum.IS_USED.code("")) .eq(StIvtStructattr::getIs_emptyvehicle,IOSEnum.IS_USED.code(""))
.eq(StIvtStructattr::getSect_code, PDAEnum.SECT_CODE.code("半成品库区")) .eq(StIvtStructattr::getSect_code, PDAEnum.SECT_CODE.code("半成品库区"))
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) .eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getIs_used,true),false .eq(StIvtStructattr::getIs_used,true)
.orderByDesc(StIvtStructattr::getXqty)
.orderByAsc(StIvtStructattr::getYqty),false
); );
if (ObjectUtil.isEmpty(attrDao)) throw new BadRequestException("未找到空载具!"); if (ObjectUtil.isEmpty(attrDao)) throw new BadRequestException("未找到空载具!");

View File

@@ -67,6 +67,9 @@ public class WashSendMaterialTask extends AbstractAcsTask {
if (StringUtils.isEmpty(param.getString("wegiht"))||StringUtils.isEmpty(param.getString("vechile_code"))){ if (StringUtils.isEmpty(param.getString("wegiht"))||StringUtils.isEmpty(param.getString("vechile_code"))){
throw new BadRequestException("请求参数不能为空"); throw new BadRequestException("请求参数不能为空");
} }
if (param.getString("vechile_code").equals("99999")){
throw new BadRequestException("料框码不正确,请手动处理");
}
String start_point_code = "A1_CPQXJ_01_X"; String start_point_code = "A1_CPQXJ_01_X";
//?刻字满料请求:可以存在多个任务? //?刻字满料请求:可以存在多个任务?
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>() List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
@@ -94,7 +97,8 @@ public class WashSendMaterialTask extends AbstractAcsTask {
JSONObject req = new JSONObject(); JSONObject req = new JSONObject();
req.put("from",form); req.put("from",form);
pdaStBcpInService.createIn(req); pdaStBcpInService.createIn(req);
taskService.update(new UpdateWrapper<SchBaseTask>().set("task_step",3)
.eq("task_id",order.getTask_id()));
return ""; return "";
} }

View File

@@ -272,7 +272,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
if (CollectionUtils.isEmpty(cps)){ if (CollectionUtils.isEmpty(cps)){
throw new BadRequestException("库存不足"); throw new BadRequestException("库存不足");
} }
for (StIvtStructivtCp ivtDao : cps) {//分配规则需要考虑托盘跟数量 for (StIvtStructivtCp ivtDao : cps) {//分配规则需要考虑托盘跟数量 100 200 500 --200
if (unassign_qty<=0){ if (unassign_qty<=0){
break; break;
} }

View File

@@ -66,7 +66,8 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
.or().isNull(StIvtStructattr::getStoragevehicle_code) .or().isNull(StIvtStructattr::getStoragevehicle_code)
) )
.ne(StIvtStructattr::getIs_emptyvehicle, true) .ne(StIvtStructattr::getIs_emptyvehicle, true)
.orderByAsc(StIvtStructattr::getStruct_code) .orderByDesc(StIvtStructattr::getXqty)
.orderByAsc(StIvtStructattr::getYqty)
, false); , false);
break; break;
case RuleUtil.PRODUCTION_IN_2 : case RuleUtil.PRODUCTION_IN_2 :