2 Commits

Author SHA1 Message Date
zhangzq
708a31b9e6 undo:缓存线箱码物料更新 2024-02-28 16:50:23 +08:00
zhangzq
06e9ccc0fe add:振动清洗机上下料任务 2024-02-28 16:35:19 +08:00
19 changed files with 594 additions and 72 deletions

View File

@@ -53,13 +53,15 @@ public enum AcsTaskEnum {
TASK_Engrave_CALL("24","刻字机上料"),
TASK_Engrave_EMPTY("25","刻字输送线-空框送回"),
TASK_STRUCT_HR_IN("26","入库-海柔半成品-生产入库"),
TASK_STRUCT_HR_OUT("27","出库-海柔半成品-生产出库"),
TASK_STRUCT_HR_IN("26","入库-海柔半成品-单据入库"),
TASK_STRUCT_HR_OUT("27","出库-海柔半成品-单据出库"),
TASK_STRUCT_HR_CHECK("28","海柔半成品-盘点"),
TASK_STRUCT_HR_EMP_IN("29","入库-海柔半成品-空托盘"),
TASK_STRUCT_HR_EMP_OUT("30","出库-海柔半成品-空托盘"),
TASK_STRUCT_HR_PRODUCT_IN("31","入库-海柔半成品-生产入库"),
TASK_STRUCT_HR_PRODUCT_OUT("32","出库-海柔半成品-生产出库"),
TASK_STRUCT_HR_TRANSPORT_IN("35","搬运任务-海柔半成品库入库点"),
TASK_STRUCT_HR_TRANSPORT_OUT("36","搬运任务-海柔半成品库库点"),
TASK_STRUCT_HR_TRANSPORT_OUT("36","搬运任务-海柔半成品库库点"),
TASK_WASH_FEEDING_JG("40","激光清洗机上料"),
TASK_WASH_FEEDING_FH("41","发黑清洗机上料"),
TASK_WASH_FEEDING_ZD("42","振动清洗机上料"),
@@ -94,6 +96,7 @@ public enum AcsTaskEnum {
ACS_TASK_TYPE_NOBLE_SINGLE_TASK("2","诺宝单工任务"),
ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK("3","诺宝单入-单任务"),
ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK("4","诺宝双入-双任务"),
ACS_TASK_TYPE_HR_TASK("14","海柔任务"),
ACS_TASK_TYPE_NOBLE_POINT_POINT_TASK("5","诺宝点对点任务"),

View File

@@ -0,0 +1,26 @@
package org.nl.common.publish.event;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import java.util.Map;
/*
* @author ZZQ
* @Date 2023/4/28 13:50
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class TaskEvent2 extends PublishEvent {
private TaskStatusEnum status;
private String task_id;
private Map<String,String> extParam;
}

View File

@@ -141,7 +141,7 @@ public class WQLCore {
//开始加载系统默认wql根目录
isSuccess = loadWQL(WQLCore.ROOT);
isSuccess = true;//loadWQL(WQLCore.ROOT);
return isSuccess;

View File

@@ -0,0 +1,69 @@
package org.nl.wms.ext_manage.acs.service.listener;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.publish.AbstraceListener;
import org.nl.common.publish.event.TaskEvent;
import org.nl.common.publish.event.TaskEvent2;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.semimanage.TASKEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class TaskListener extends AbstraceListener<TaskEvent2> {
@Autowired
private ISchBaseTaskService taskService;
@Override
protected String doEvent(TaskEvent2 event) {
TaskStatusEnum status = event.getStatus();
if (StringUtils.isNotEmpty(event.getTask_id())){
SchBaseTask task = taskService.getById(event.getTask_id());
switch (status){
case CREATED:
//下发
JSONArray param = new JSONArray();
param.add(JSON.parseObject(JSONUtil.toJsonStr(task)));
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
Map<String, Object> result = bean.issueTaskToAcs4(param);
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("remark","下发acs失败"+MapUtil.getStr(result, "message"))
.set("task_status",TaskStatusEnum.SURE_START_ERROR.getCode())
.eq("task_id",task.getTask_id()));
}else {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",TaskStatusEnum.EXECUTING.getCode())
.eq("task_id",task.getTask_id()));
}
break;
case EXECUTING:
break;
case FINISHED:
break;
case CANCEL:
break;
default:
}
}
return null;
}
}

View File

@@ -185,8 +185,7 @@ public class BigScreenServiceImpl implements BigScreenService, ApplicationAutoIn
List<Map> arr4 = deviceService.repairList(ids);
//故障曲线
List<Map> collect = arr4.stream().filter(map -> {
Object date_time = map.get("date_time");
if (date_time != null) {
if (map.get("date_time") != null) {
return map.get("date_time").equals(DateUtil.today());
}
return false;
@@ -201,9 +200,8 @@ public class BigScreenServiceImpl implements BigScreenService, ApplicationAutoIn
}
//周工单情况
ScrapRateQuery query = new ScrapRateQuery();
DateTime dateTime = DateUtil.offsetWeek(new Date(), -1);
query.setWorkprocedure_ids(ids);//统计月
query.setStart_time(DateFormatUtils.format(dateTime, "yyyy-MM-dd"));
query.setWorkprocedure_ids(ids);
query.setStart_time(DateFormatUtils.format(DateUtil.offsetWeek(new Date(), -1), "yyyy-MM-dd"));
List<Map> scrapRate = workorderService.scrapRate(query);
Map map = scrapRate.get(0);
Map jo3 = MapOf.of("sumfinishproduce_qty", map.get("real_qty"),

View File

@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.wms.scheduler_manage.service.cacheline.CachelinePositionService;
import org.nl.wms.staging_manage.service.conveyor.dao.SchConveyorPosition;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -23,15 +25,19 @@ import java.util.List;
@Slf4j
@SaIgnore
public class CacheConveyorContorller {
@Autowired
private CachelinePositionService cachelinePositionService;
/**
* 半成品数据库:/api/bcp/hr/bypda
* @param param
* 缓存线物料查询接口:/getCacheLineMaterialInfo"
* @param bcpIvt
* @return
*/
@PostMapping("/call")
@Log("缓存线叫料")
public ResponseEntity<Object> conveyor(@RequestBody StIvtStructivtBcp param,@RequestParam("target") String target){
public ResponseEntity<Object> conveyor(@RequestBody JSONObject bcpIvt){
StIvtStructivtBcp bcp = new StIvtStructivtBcp();
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -95,10 +95,10 @@ public class FhWashController {
}
@PostMapping("/blanking")
@Log("清洗下料")
public ResponseEntity<Object> blanking(@RequestBody JSONObject params){
public ResponseEntity<Object> blanking(@RequestBody JSONArray params,String vechile_code){
//创建半成品入库任务
pointService.queryPointMaterial(null);
fhWashService.blanking(params);
fhWashService.blanking(params,vechile_code);
return new ResponseEntity<>(HttpStatus.OK);
}
//退火区

View File

@@ -1,7 +1,7 @@
package org.nl.wms.pda_manage.pda.controller.a3wash;
/**
* 振动清洗机手持功能
* 振动清洗机手持功能acs同步缓存线物料相关未开发
*/
import cn.dev33.satoken.annotation.SaIgnore;
@@ -18,7 +18,9 @@ import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.scheduler_manage.service.cacheline.CachelinePositionService;
import org.nl.wms.scheduler_manage.service.extendtask.a3.FHWash.FhWashService;
import org.nl.wms.scheduler_manage.service.extendtask.a3.HBWash.ZdWashService;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.PointQuery;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
@@ -26,6 +28,7 @@ import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.staging_manage.service.conveyor.ISchConveyorPositionService;
import org.nl.wms.staging_manage.service.conveyor.dao.SchConveyorPosition;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.impl.HrBcpProjectOutService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -45,30 +48,32 @@ import java.util.Map;
@SaIgnore
public class ZdWashController {
private static String CONVEYOR = "";
@Autowired
private ISchConveyorPositionService schConveyorPositionService;
@Autowired
private FhWashService fhWashService;
private ZdWashService zdWashService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private IMdPbStoragevehicleextService storagevehicleextService;
@Autowired
private HrBcpProjectOutService hrBcpProjectOutService;
@PostMapping("/conveyor")
@Log("查询输送线")
public ResponseEntity<Object> conveyor(@RequestBody JSONObject param){
List<SchConveyorPosition> list = schConveyorPositionService.list(new QueryWrapper<SchConveyorPosition>()
.eq("position_code", CONVEYOR));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
@PostMapping("/callMaterial")
@Log("半成品库叫料")
public ResponseEntity<Object> callMaterial(@RequestBody JSONObject bcpIvt){
hrBcpProjectOutService.create(bcpIvt);
return new ResponseEntity<>(HttpStatus.OK);
}
// * 缓存线物料查询接口:/getCacheLineMaterialInfo"
@PostMapping("/feeding")
@Log("激光清洗机上料")
public ResponseEntity<Object> feeding(@RequestBody JSONArray params){
fhWashService.feeding(params);
//缓存线叫料"
zdWashService.feeding(params);
return new ResponseEntity<>(HttpStatus.OK);
}
@@ -76,7 +81,7 @@ public class ZdWashController {
@Log("清洗中物料")
public ResponseEntity<Object> washing(){
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("task_type", AcsTaskEnum.TASK_WASH_FEEDING_JG.getCode())
.eq("task_type", AcsTaskEnum.TASK_WASH_FEEDING_ZD.getCode())
.eq("task_status", StatusEnum.TASK_RUNNING.getCode())
.eq("is_delete", Boolean.FALSE)
.orderByAsc("task_code"));
@@ -99,37 +104,7 @@ public class ZdWashController {
@Log("清洗下料")
public ResponseEntity<Object> blanking(@RequestBody JSONObject params){
//创建半成品入库任务
pointService.queryPointMaterial(null);
fhWashService.blanking(params);
return new ResponseEntity<>(HttpStatus.OK);
}
//退火区
@RequestMapping("/staging")
@Log("查询退火暂存区")
public ResponseEntity<Object> staging(PointQuery query, PageQuery page){
//创建半成品入库任务
List<Map> maps = pointService.queryVechileMaterial(query);
return new ResponseEntity<>(TableDataInfo.build(maps),HttpStatus.OK);
}
@PostMapping("/release")
@Log("点位释放")
public ResponseEntity<Object> release(@RequestBody List<Long> ids){
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code","").in("point_id",ids));
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/place")
@Log("点位放置")
public ResponseEntity<Object> place(@RequestBody JSONObject param){
//更新点位
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code",param.getString("vehicle_code"))
.eq("point_code",param.getString("point_code")));
//更新载具物料信息为清洗
storagevehicleextService.update(new UpdateWrapper<MdPbStoragevehicleext>()
.set("is_need_clean",true)
.eq("storagevehicle_code",param.getString("vehicle_code")));
zdWashService.blanking(params);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/vechileRelease")

View File

@@ -1,5 +1,6 @@
package org.nl.wms.scheduler_manage.service.cacheline;
import com.alibaba.fastjson.JSONArray;
import org.nl.wms.scheduler_manage.service.cacheline.dto.CachelinePositionDto;
import org.springframework.data.domain.Pageable;
@@ -61,4 +62,11 @@ public interface CachelinePositionService {
*/
void deleteAll(String[] ids);
/**
* 缓存线叫料出箱
* @param materials缓存线物料料箱信息
* @param handleClass业务类
*/
void callOut(JSONArray materials,String handleClass);
}

View File

@@ -2,20 +2,29 @@ package org.nl.wms.scheduler_manage.service.cacheline.impl;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.TaskEvent2;
import org.nl.common.utils.IdUtil;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.scheduler_manage.service.cacheline.CachelinePositionService;
import org.nl.wms.scheduler_manage.service.cacheline.dto.CachelinePositionDto;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Pageable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
@@ -35,6 +44,9 @@ import cn.hutool.core.util.ObjectUtil;
@Slf4j
public class CachelinePositionServiceImpl implements CachelinePositionService {
@Autowired
private ISchBaseTaskService taskService;
@Override
public Map<String,Object> queryAll(Map whereJson, Pageable page){
HashMap param = new HashMap();
@@ -112,4 +124,36 @@ public class CachelinePositionServiceImpl implements CachelinePositionService {
}
}
@Override
public void callOut(JSONArray materials,String handleClass) {
List<String> list = new ArrayList<>();
if (materials!=null && materials.size()>0){
for (Object material : materials) {
JSONObject cacheVehile = (JSONObject) material;
String cacheVehile1 = cacheVehile.getString("cacheVehile");
list.add(cacheVehile1);
}
}
/**
* 创建缓存线出箱任务起点是缓存线,终点是缓存线对接位
*/
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("task_code"));
task.setPoint_code1("缓存线编号");
task.setPoint_code3("缓存线编号");
task.setTask_status(StatusEnum.TASK_CREATE.getCode());
task.setIs_send(true);
task.setBarcodeArr(list.stream().collect(Collectors.joining(",")));
task.setCreate_time(new Date());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setHandle_class(handleClass);
taskService.save(task);
// 2.2 生成任务
BussEventMulticaster.Publish(TaskEvent2.builder()
.status(TaskStatusEnum.CREATED)
.task_id(task.getTask_id())
.build());
}
}

View File

@@ -7,6 +7,7 @@ package org.nl.wms.scheduler_manage.service.extendtask.a3.FHWash;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
@@ -16,6 +17,8 @@ import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.scheduler_manage.service.extendtask.a3.HrTransportTask;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
@@ -27,6 +30,9 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@Service
@@ -38,6 +44,8 @@ public class FhWashService {
private ISchConveyorPositionService conveyorPositionService;
@Autowired
private HrTransportTask transportTask;
@Autowired
protected IMdPbStoragevehicleextService storagevehicleextService;
public String feeding(JSONArray params){
if (params!=null && params.size()>0){
@@ -64,17 +72,33 @@ public class FhWashService {
return null;
};
public String blanking(JSONObject params){
public String blanking(JSONArray params,String storagevehicle_code){
/**
* 校验:完成清洗任务
* 绑定载具物料关系
*/
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name",SecurityUtils.getCurrentNickName())
.set("update_time", DateUtil.now())
.eq("task_id",params.getString("task_id")));
if (params!=null && params.size()>0){
List<SchBaseTask> tasks = params.toJavaList(SchBaseTask.class);
Map<String, List<SchBaseTask>> groupBy = tasks.stream().collect(Collectors.groupingBy(item -> item.getMaterial_id() + item.getWorkprocedure_id()));
if (groupBy.size()>1){
throw new BadRequestException("清洗下料,只能选择同工序同物料的清洗中物料");
}
List<String> collect = tasks.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList());
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name",SecurityUtils.getCurrentNickName())
.set("update_time", DateUtil.now())
.in("task_id",collect));
int qty = tasks.stream().mapToInt(a -> a.getMaterial_qty().intValue()).sum();
//跟新载具物料关系
MdPbStoragevehicleext vehicleMaterial = new MdPbStoragevehicleext();
vehicleMaterial.setStoragevehicle_code(storagevehicle_code);
vehicleMaterial.setQty(qty);
vehicleMaterial.setMaterial_id(tasks.get(0).getMaterial_id());
vehicleMaterial.setWorkprocedure_id(tasks.get(0).getWorkprocedure_id());
vehicleMaterial.setUpdate_time(DateUtil.now());
storagevehicleextService.saveOrUpdate(vehicleMaterial);
}
return null;
};
}

View File

@@ -0,0 +1,138 @@
package org.nl.wms.scheduler_manage.service.extendtask.a3.HBWash;
/*
* @author ZZQ
* @Date 2023/7/12 21:13
*/
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.TaskEvent2;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.scheduler_manage.service.cacheline.CachelinePositionService;
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehicleService;
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import org.nl.wms.scheduler_manage.service.extendtask.a3.HrTransportTask;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.staging_manage.service.conveyor.ISchConveyorPositionService;
import org.nl.wms.staging_manage.service.conveyor.dao.SchConveyorPosition;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
public class ZdWashService {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
protected IMdPbStoragevehicleextService storagevehicleextService;
@Autowired
private CachelinePositionService cachelinePositionService;
@Autowired
private ISchCachelineVehilematerialService cachelineVehicleService;
public String feeding(JSONArray params){
if (params!=null && params.size()>0){
cachelinePositionService.callOut(params,this.getClass().getName());
}
//创建任务
return null;
};
public String blanking(JSONObject params){
JSONArray data = params.getJSONArray("data");
/**
* 校验:完成清洗任务
* 绑定载具物料关系
*/
if (data!=null && data.size()>0){
List<SchBaseTask> tasks = data.toJavaList(SchBaseTask.class);
Map<String, List<SchBaseTask>> groupBy = tasks.stream().collect(Collectors.groupingBy(item -> item.getMaterial_id() + item.getWorkprocedure_id()));
if (groupBy.size()>1){
throw new BadRequestException("清洗下料,只能选择同工序同物料的清洗中物料");
}
List<String> collect = tasks.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList());
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name",SecurityUtils.getCurrentNickName())
.set("update_time", DateUtil.now())
.in("task_id",collect));
int qty = tasks.stream().mapToInt(a -> a.getMaterial_qty().intValue()).sum();
//跟新载具物料关系
MdPbStoragevehicleext vehicleMaterial = new MdPbStoragevehicleext();
vehicleMaterial.setStoragevehicle_code(params.getString("vehicle_code"));
vehicleMaterial.setQty(qty);
vehicleMaterial.setMaterial_id(tasks.get(0).getMaterial_id());
vehicleMaterial.setWorkprocedure_id(tasks.get(0).getWorkprocedure_id());
vehicleMaterial.setUpdate_time(DateUtil.now());
storagevehicleextService.saveOrUpdate(vehicleMaterial);
}
return null;
};
public void taskOperate(JSONObject form) {
String task_id = form.getString("task_id");
String status = form.getString("status");
SchBaseTask callOut = taskService.getById(task_id);
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
//生成清洗任务;
String barcodeArr = callOut.getBarcodeArr();
String[] split = barcodeArr.split(",");
List<SchCachelineVehilematerial> cachelineVehicles = cachelineVehicleService.list(new QueryWrapper<SchCachelineVehilematerial>()
.in("vehicle_code", split));
if (!CollectionUtils.isEmpty(cachelineVehicles)){
Map<String, SchCachelineVehilematerial> collect = cachelineVehicles.stream().collect(HashMap::new, (k, v) -> k.put(v.getVehicle_code(), v), HashMap::putAll);
List<SchBaseTask> tasks = new ArrayList<>();
for (String storagevehicle_code : split) {
//查询物料信息
SchCachelineVehilematerial vehilematerial = collect.get(storagevehicle_code);
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_name(AcsTaskEnum.TASK_WASH_FEEDING_ZD.getDesc());
task.setTask_type(AcsTaskEnum.TASK_WASH_FEEDING_ZD.getCode());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setMaterial_id(vehilematerial.getMaterial_id());
task.setMaterial_qty(vehilematerial.getQuantity());
task.setWorkprocedure_id(vehilematerial.getWorkprocedure_id());
task.setIs_delete(Boolean.FALSE);
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(new Date());
task.setTask_status(StatusEnum.TASK_RUNNING.getCode());
tasks.add(task);
}
taskService.saveBatch(tasks);
}
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
} else if(status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
taskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status,TaskStatusEnum.CANCEL.getCode())
.eq(SchBaseTask::getTask_id,task_id ));
}
}
}

View File

@@ -51,6 +51,8 @@ public class JgWashService {
task.setTask_type(AcsTaskEnum.TASK_WASH_FEEDING_JG.getCode());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setMaterial_id(position.getMaterila_id());
task.setMaterial_qty(position.getQty());
task.setWorkprocedure_id(position.getWrokprocedure_id());
task.setIs_delete(Boolean.FALSE);
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());

View File

@@ -162,7 +162,7 @@ public class SchBaseTask implements Serializable {
/**
* 任务完成类型
*/
private String finished_type;
private String finished_type = "1";
/**
* agv任务类型

View File

@@ -21,6 +21,7 @@ import org.nl.wms.storage_manage.semimanagehr.service.check.IStIvtCheckmstHrBcpS
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvEmpBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpOutService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.impl.HrBcpProjectOutService;
import org.nl.wms.storage_manage.semimanagehr.service.moveInv.IStIvtMoveinvHrBcpService;
import java.util.function.Consumer;
@@ -107,6 +108,11 @@ public enum TASKEnum implements FunctionStrategy<String, JSONObject> {
bean.taskOperate(form);
}),
HR_BCP_TRANSPORT_OUT_TASK(type -> AcsTaskEnum.TASK_STRUCT_HR_PRODUCT_OUT.getCode().equals(type), form -> {
HrBcpProjectOutService bean = SpringContextHolder.getBean(HrBcpProjectOutService.class);
bean.taskOperate(form);
}),
;
private final Predicate<String> predicate;

View File

@@ -31,7 +31,7 @@ import java.util.Map;
* @since 2023-05-10
*/
@RestController
@RequestMapping("cc")
@RequestMapping("/api/bcp/hr")
public class StIvtStructivtHrBcpController {
@Autowired

View File

@@ -0,0 +1,216 @@
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import io.jsonwebtoken.lang.Assert;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.TaskEvent2;
import org.nl.common.utils.IdUtil;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.pda.PDAEnum;
import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvOrderService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvOrder;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtHrBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtflowHrService;
import org.nl.wms.storage_manage.semimanagehr.service.structIvt.dao.StIvtStructivtHrBcp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 海柔生产出库
*/
@Service
public class HrBcpProjectOutService {
@Autowired
private IStIvtStructivtHrBcpService structivtBcpService; // 海柔半成品服务
@Autowired
private IStIvtStructattrService structattrService; // 仓位服务
@Autowired
private ISchBaseTaskService iSchBaseTaskService; // 任务服务
@Autowired
private IStIvtStructivtflowHrService iStIvtStructivtflowService; // 海柔库存变动服务
@Autowired
protected IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务
@Autowired
private IStIvtIostorinvOrderService iStIvtIostorinvOrderService; // 出入库顺序服务
public void create(JSONObject form) {
// "workshop_id": "A3",
// "workprocedure_id": "1694243108683911168",
// "is_active": true,
// "qty_unit_id": "16",
// "canuse_qty": 11.000,
// "stor_id": "15286279952695336963",
// "is_pick": true,
// "unit_name": "个\\只",
// "sect_code": "HKQ001",
// "material_spec": "45CCL1 5/8-DWV",
// "instorage_time": "2024-02-20 10:08:01",
// "quality_scode": "01",
// "stor_name": "紫铜三线半成品仓库",
// "storagevehicle_code": "A000000833",
// "struct_id": "179999804806716689",
// "struct_name": "\t05排19列05层",
// "material_id": "1684111111695790000",
// "pcsn": "2024-02-20",
// "sect_name": "三线半成品库区",
// "unit_weight": 4.000,
// "lock_type": "0",
// "struct_code": "B05-19-05",
// "material_name": "A345度等径承插口弯头45CCL1 5/8-DWVUSNA0131027",
// "material_code": "24011401S"
Assert.notNull(form, "参数不能为空");
/**
* 1.校验任务是否存在
* 2.创建任务
* 3.发布任务事件:是否下发
*/
int count = iSchBaseTaskService.count(new QueryWrapper<SchBaseTask>()
.eq("task_type", AcsTaskEnum.TASK_STRUCT_HR_PRODUCT_OUT.getCode())
.le("task_status", TaskStatusEnum.FINISHED.getCode()));
if (count>4){//海柔会自己判断不会允许它放货
throw new BadRequestException("当前出库任务过多,稍后再试");
}
SchBaseTask schBaseTask = new SchBaseTask();
schBaseTask.setTask_id(IdUtil.getStringId());
schBaseTask.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
schBaseTask.setTask_type(AcsTaskEnum.TASK_STRUCT_HR_PRODUCT_OUT.getCode());
schBaseTask.setTask_name(AcsTaskEnum.TASK_STRUCT_HR_PRODUCT_OUT.getDesc());
schBaseTask.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_HR_TASK.getCode());
schBaseTask.setTask_status(TaskStatusEnum.CREATED.getCode());
schBaseTask.setPoint_code1(form.getString("struct_code"));
schBaseTask.setPoint_code3(PDAEnum.REGION_CODE.code("海柔半成品出库区域"));
schBaseTask.setVehicle_code(form.getString("storagevehicle_code"));
schBaseTask.setProduct_area(form.getString("workshop_id"));
schBaseTask.setMaterial_id(form.getString("material_id"));
schBaseTask.setMaterial_qty(form.getBigDecimal("canuse_qty"));
schBaseTask.setHandle_class(this.getClass().getName());
schBaseTask.setWorkprocedure_id(form.getString("workprocedure_id"));
schBaseTask.setAgv_system_type(AcsTaskEnum.AGV_SYSTEM_HR.getCode());
schBaseTask.setTask_step(1);
schBaseTask.setTable_fk(form.getString("target"));//终点
iSchBaseTaskService.save(schBaseTask);
// 2.2 生成任务
BussEventMulticaster.Publish(TaskEvent2.builder()
.status(TaskStatusEnum.CREATED)
.task_id(schBaseTask.getTask_id())
.build());
}
public void taskOperate(JSONObject form) {
String task_id = form.getString("task_id");
String status = form.getString("status");
SchBaseTask task = iSchBaseTaskService.getById(task_id);
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
/**
* 更新任务
* 更新仓位跟出入库记录表
* 生成关联任务下发acs
*/
this.confirm(task);
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status,TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getTask_id,task_id ));
SchBaseTask schBaseTask = new SchBaseTask();
schBaseTask.setTask_id(IdUtil.getStringId());
schBaseTask.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
schBaseTask.setTask_type(AcsTaskEnum.TASK_STRUCT_HR_TRANSPORT_OUT.getCode());
schBaseTask.setTask_name(AcsTaskEnum.TASK_STRUCT_HR_TRANSPORT_OUT.getDesc());
schBaseTask.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_HR_TASK.getCode());
schBaseTask.setTask_status(TaskStatusEnum.CREATED.getCode());
schBaseTask.setPoint_code1(task.getPoint_code3());
schBaseTask.setPoint_code3(task.getTable_fk());
schBaseTask.setVehicle_code(task.getVehicle_code());
schBaseTask.setProduct_area(task.getProduct_area());
schBaseTask.setMaterial_id(task.getMaterial_id());
schBaseTask.setMaterial_qty(task.getMaterial_qty());
schBaseTask.setWorkprocedure_id(task.getWorkprocedure_id());
schBaseTask.setAgv_system_type(AcsTaskEnum.AGV_SYSTEM_NB.getCode());
schBaseTask.setTask_step(2);
schBaseTask.setTable_fk_id(task.getTask_id());
iSchBaseTaskService.save(schBaseTask);
BussEventMulticaster.Publish(TaskEvent2.builder()
.status(TaskStatusEnum.CREATED)
.task_id(schBaseTask.getTask_id())
.build());
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
} else if(status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status,TaskStatusEnum.CANCEL.getCode())
.eq(SchBaseTask::getTask_id,task_id ));
}
}
public String confirm(SchBaseTask task) {
StIvtStructivtHrBcp ivtDao = structivtBcpService.getOne(new QueryWrapper<StIvtStructivtHrBcp>()
.eq("struct_code",task.getPoint_code1()));
//删除库存
if (ivtDao!=null){
structivtBcpService.remove(new QueryWrapper<StIvtStructivtHrBcp>()
.eq("struct_id", ivtDao.getStruct_id()));
// 插入库存变动记录
JSONObject param = JSONObject.parseObject(JSON.toJSONString(ivtDao));
param.put("change_type", ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY);
param.put("change_qty", ivtDao.getCanuse_qty());
param.put("result_qty", 0);
param.put("bill_code",task.getTask_code());
param.put("inv_id",task.getTask_id());
iStIvtStructivtflowService.insetIvtChange(param);
//更新仓位
structattrService.update(new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, task.getPoint_code1())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getTask_code, "")
.set(StIvtStructattr::getInv_code,"")
.set(StIvtStructattr::getStoragevehicle_code, ""));
// 更新载具扩展属性 - 释放载具对应物料关系 清空数量
iMdPbStoragevehicleextService.update(
new MdPbStoragevehicleext()
.setMaterial_id("")
.setQty(0),
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicle_code,task.getVehicle_code())
);
// 插入出入库顺序表
StIvtIostorinvOrder dao = new StIvtIostorinvOrder();
dao.setOrder_id(IdUtil.getStringId());
dao.setWorkshop_id(PDAEnum.WORKSHOP_ID.code("智能三线车间"));
dao.setStor_id(PDAEnum.STOR_ID.code("紫铜三线半成品仓库"));
dao.setOut_device(task.getPoint_code3());
dao.setBar_code(task.getVehicle_code());
dao.setMaterial_id(task.getMaterial_id());
dao.setSale_id("");
dao.setWeight(task.getMaterial_qty());
dao.setQty(task.getMaterial_qty());
dao.setType(IOSEnum.IO_TYPE.code("出库"));
dao.setIs_delete(false);
dao.setCreate_time(DateUtil.now());
dao.setBiz_date(DateUtil.today());
dao.setWorkprocedure_id(task.getWorkprocedure_id());
iStIvtIostorinvOrderService.save(dao);
}
return null;
}
}

View File

@@ -79,8 +79,8 @@
<springProfile name="dev3">
<root level="debug">
<!-- <appender-ref ref="asyncLuceneAppender"/>-->
<root level="info">
<appender-ref ref="asyncLuceneAppender"/>
<appender-ref ref="CONSOLE"/>
</root>
<logger name="jdbc" level="ERROR" additivity="true">

File diff suppressed because one or more lines are too long