feat: 修改对接记录存储、打印唛头、码垛剩余反馈
This commit is contained in:
@@ -42,6 +42,6 @@ public class LogMessageConstant {
|
||||
public final static String BACKGROUND_YELLOW = "\u001B[43m";
|
||||
|
||||
/** 索引路径 */
|
||||
public final static String INDEX_DIR = "D:\\lucene\\index";
|
||||
public final static String INDEX_DIR = "E:\\lucene\\index";
|
||||
|
||||
}
|
||||
|
||||
@@ -20,8 +20,10 @@ public class AutoClearInteractionData {
|
||||
@Autowired
|
||||
private ISysParamService paramService;
|
||||
public void run(){
|
||||
Param interactionDay = paramService.findByCode("interaction_day");
|
||||
recordService.deleteByDay(interactionDay.getValue());
|
||||
Param max_rows_to_keep = paramService.findByCode("max_rows_to_keep");
|
||||
Param max_rows_to_delete = paramService.findByCode("max_rows_to_delete");
|
||||
// recordService.deleteByDay(interactionDay.getValue());
|
||||
recordService.deleteByRows(max_rows_to_keep, max_rows_to_delete);
|
||||
log.info("run 执行成功");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ public class ApplyTaskResponse extends BaseResponse {
|
||||
private String mix_number;
|
||||
private String weight;
|
||||
private String label_message;
|
||||
// 特殊业务-无具体含义:目前是是否满足码满规定托盘数
|
||||
private int is_satisfy;
|
||||
|
||||
public static ApplyTaskResponse responseOk(String requestNo) {
|
||||
ApplyTaskResponse response = new ApplyTaskResponse();
|
||||
@@ -26,6 +28,7 @@ public class ApplyTaskResponse extends BaseResponse {
|
||||
response.setMessage("任务申请成功");
|
||||
response.setResponseDate(DateUtil.now());
|
||||
response.setCode(HttpStatus.HTTP_OK);
|
||||
response.setIs_satisfy(0);
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -36,6 +39,17 @@ public class ApplyTaskResponse extends BaseResponse {
|
||||
response.setResponseDate(DateUtil.now());
|
||||
response.setCode(HttpStatus.HTTP_OK);
|
||||
response.setLabel_message(message);
|
||||
response.setIs_satisfy(0);
|
||||
return response;
|
||||
}
|
||||
public static ApplyTaskResponse responseOk(String requestNo, String message, int is_satisfy) {
|
||||
ApplyTaskResponse response = new ApplyTaskResponse();
|
||||
response.setRequestNo(requestNo);
|
||||
response.setMessage(message);
|
||||
response.setResponseDate(DateUtil.now());
|
||||
response.setCode(HttpStatus.HTTP_OK);
|
||||
response.setLabel_message(message);
|
||||
response.setIs_satisfy(is_satisfy);
|
||||
return response;
|
||||
}
|
||||
public static ApplyTaskResponse responseError(String requestNo, String message) {
|
||||
@@ -44,6 +58,7 @@ public class ApplyTaskResponse extends BaseResponse {
|
||||
response.setCode(HttpStatus.HTTP_BAD_REQUEST);
|
||||
response.setMessage(message);
|
||||
response.setResponseDate(DateUtil.now());
|
||||
response.setIs_satisfy(0);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
@@ -50,6 +51,7 @@ import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskFactory;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.task.tasks.fj.mapper.FJMapper;
|
||||
import org.nl.wms.util.CommonUtils;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
@@ -63,6 +65,7 @@ import javax.annotation.PostConstruct;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -115,6 +118,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
private WmsToMesService wmsToMesService;
|
||||
@Autowired
|
||||
private WmsToMmsService wmsToMmsService;
|
||||
@Autowired
|
||||
private FJMapper fjMapper;
|
||||
|
||||
// 初始化反射方法
|
||||
@PostConstruct
|
||||
@@ -169,7 +174,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
String deviceCode = param.getString("device_code");
|
||||
String requestNo = param.getString("requestNo");
|
||||
RLock lock = redissonClient.getLock(deviceCode);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
SchBasePoint basePoint = pointService.getById(deviceCode);
|
||||
@@ -203,7 +208,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
String deviceCode = param.getString("device_code");
|
||||
String requestNo = param.getString("requestNo");
|
||||
RLock lock = redissonClient.getLock(deviceCode);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
SchBasePoint basePoint = pointService.getById(deviceCode);
|
||||
@@ -237,7 +242,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
String deviceCode = param.getString("device_code");
|
||||
String requestNo = param.getString("requestNo");
|
||||
RLock lock = redissonClient.getLock(deviceCode);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
SchBasePoint basePoint = pointService.getById(deviceCode);
|
||||
@@ -271,7 +276,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
String deviceCode = param.getString("device_code");
|
||||
String requestNo = param.getString("requestNo");
|
||||
RLock lock = redissonClient.getLock(deviceCode);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
int handling = 0; // 无业务:0
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
SchBasePoint basePoint = pointService.getById(deviceCode);
|
||||
@@ -281,7 +287,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
String configCode = basePoint.getRegion_code() + "MLTask";
|
||||
// 组织参数
|
||||
param.put("config_code", configCode);
|
||||
param.put("special_param", specialHandling(basePoint.getRegion_code()));
|
||||
handling = specialHandling(basePoint.getRegion_code(), param);
|
||||
param.put("special_param", handling);
|
||||
taskService.apply(param);
|
||||
}
|
||||
} finally {
|
||||
@@ -289,15 +296,37 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return ApplyTaskResponse.responseOk(requestNo);
|
||||
return ApplyTaskResponse.responseOk(requestNo, "任务创建成功", handling);
|
||||
}
|
||||
|
||||
// todo: 特殊处理
|
||||
protected String specialHandling(String regionCode) {
|
||||
if (regionCode.equals("FJ")) {
|
||||
protected int specialHandling(String regionCode, JSONObject param) {
|
||||
int torus = 0; // 无业务:0, 分拣剩余1托:1,分拣剩余0托:2
|
||||
if (regionCode.equals("FJ")) { // 判断是否够码满
|
||||
// 分拣需要在这设置特殊值
|
||||
// 校验是否够码满一托
|
||||
List<ApplyDeviceDto> list = JSONArray.parseArray(param.getString("list"), ApplyDeviceDto.class);
|
||||
PdmBdWorkorder workorder = workorderService.getDeviceDockingProductionTask(param.getString("device_code"));
|
||||
// 1 获取点位相应数量
|
||||
int sum = 0;
|
||||
for (ApplyDeviceDto applyDeviceDto : list) {
|
||||
sum += Integer.parseInt(applyDeviceDto.getQty());
|
||||
}
|
||||
// 2 获取库存量 surplusNumber
|
||||
int surplusNumber = fjMapper.getInventoryQuantity(workorder.getMaterial_id());
|
||||
// 3 现有总数 total
|
||||
int total = sum + surplusNumber;
|
||||
// 4 获取木托盘需要多少块 needFullNumber
|
||||
String needFullNumberStr = fjMapper.getNeedFullNumber(workorder.getMaterial_id());
|
||||
int needFullNumber = TaskUtils.convertMultiply(needFullNumberStr);
|
||||
int surplus = total / needFullNumber;
|
||||
if (surplus == 1) {
|
||||
return 1;
|
||||
} else if (surplus == 0) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return torus;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
|
||||
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
|
||||
import org.nl.wms.ext.record.service.dao.SysInteractRecord;
|
||||
@@ -69,4 +70,11 @@ public interface ISysInteractRecordService extends IService<SysInteractRecord> {
|
||||
<K, V> void saveRecord(String name, K request, V response, String direction);
|
||||
|
||||
void deleteByDay(String day);
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
* @param maxRowsToKeep 最大保存容量
|
||||
* @param maxRowsToDelete 最大删除数
|
||||
*/
|
||||
void deleteByRows(Param maxRowsToKeep, Param maxRowsToDelete);
|
||||
}
|
||||
|
||||
@@ -10,4 +10,6 @@ import org.nl.wms.ext.record.service.dao.SysInteractRecord;
|
||||
public interface SysInteractRecordMapper extends BaseMapper<SysInteractRecord> {
|
||||
|
||||
void deleteByDay(String day);
|
||||
|
||||
void deleteByRows(String maxRowsToKeep, String maxRowsToDelete);
|
||||
}
|
||||
|
||||
@@ -6,4 +6,7 @@
|
||||
DELETE FROM sys_interact_record
|
||||
WHERE record_time <![CDATA[<=]]> DATE_SUB(NOW(), INTERVAL #{day} DAY);
|
||||
</delete>
|
||||
<delete id="deleteByRows">
|
||||
CALL DeleteRowsIfNeeded(#{maxRowsToKeep}, #{maxRowsToDelete});
|
||||
</delete>
|
||||
</mapper>
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
|
||||
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
|
||||
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
||||
@@ -149,4 +150,9 @@ public class SysInteractRecordServiceImpl extends ServiceImpl<SysInteractRecordM
|
||||
sysInteractRecordMapper.deleteByDay(day);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByRows(Param maxRowsToKeep, Param maxRowsToDelete) {
|
||||
sysInteractRecordMapper.deleteByRows(maxRowsToKeep.getValue(), maxRowsToDelete.getValue());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -56,4 +56,11 @@ public interface IPdmBdWorkorderService extends IService<PdmBdWorkorder> {
|
||||
* @param entity
|
||||
*/
|
||||
void submits(PdmBdWorkorder entity);
|
||||
|
||||
/**
|
||||
* 根据对接位获取工单
|
||||
* @param deviceCode
|
||||
* @return
|
||||
*/
|
||||
PdmBdWorkorder getDeviceDockingProductionTask(String deviceCode);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,8 @@ import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
|
||||
import org.nl.wms.pdm.workorder.service.dao.mapper.PdmBdWorkorderMapper;
|
||||
import org.nl.wms.pdm.workorder.service.dao.vo.AcsWorkOrderVo;
|
||||
import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
|
||||
@@ -51,6 +53,8 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
|
||||
@Override
|
||||
public IPage<PdmBdWorkorder> queryAll(PdmBdWorkorderQuery query, PageQuery page){
|
||||
@@ -164,4 +168,18 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
||||
TaskUtils.setWorkOrderUpdateByAcs(pdmBdWorkorder);
|
||||
pdmBdWorkorderMapper.updateById(pdmBdWorkorder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdmBdWorkorder getDeviceDockingProductionTask(String deviceCode) {
|
||||
if (ObjectUtil.isEmpty(deviceCode)) {
|
||||
throw new BadRequestException("根据设备查询工单,设备编码不能为空");
|
||||
}
|
||||
// 查找父类设备
|
||||
SchBasePoint basePoint = pointService.getById(deviceCode);
|
||||
// 只能有一个生产中
|
||||
LambdaQueryWrapper<PdmBdWorkorder> lam = new QueryWrapper<PdmBdWorkorder>().lambda();
|
||||
lam.eq(PdmBdWorkorder::getPoint_code, basePoint.getParent_point_code())
|
||||
.eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode());
|
||||
return pdmBdWorkorderMapper.selectOne(lam);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,8 +165,6 @@ public class FJMKTask extends AbstractTask {
|
||||
.collect(Collectors.toList());
|
||||
String requestParam = task.getRequest_param();// 任务的其他数据
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String workOrderCode = jsonObject.getString("workorder_code"); // 工单
|
||||
PdmBdWorkorder workorder = workorderService.getByCode(workOrderCode);
|
||||
String startPoint = task.getPoint_code1();
|
||||
// 获取起点 回写载具编码
|
||||
SchBasePoint startPointObj = pointService.getById(startPoint);
|
||||
@@ -181,24 +179,8 @@ public class FJMKTask extends AbstractTask {
|
||||
throw new BadRequestException("包装线不可用!");
|
||||
}
|
||||
task.setPoint_code2(packagePoint.getPoint_code()); // 包装线
|
||||
// 校验是否够码满一托
|
||||
List<ApplyDeviceDto> list = JSONArray.parseArray(jsonObject.getString("list"), ApplyDeviceDto.class);
|
||||
// 1 获取点位相应数量
|
||||
int sum = 0;
|
||||
for (ApplyDeviceDto applyDeviceDto : list) {
|
||||
sum += Integer.parseInt(applyDeviceDto.getQty());
|
||||
}
|
||||
// 2 获取库存量 surplusNumber
|
||||
int surplusNumber = fjMapper.getInventoryQuantity(workorder.getMaterial_id());
|
||||
// 3 现有总数 total
|
||||
int total = sum + surplusNumber;
|
||||
// 4 获取木托盘需要多少块 needFullNumber
|
||||
String needFullNumberStr = fjMapper.getNeedFullNumber(workorder.getMaterial_id());
|
||||
int needFullNumber = TaskUtils.convertMultiply(needFullNumberStr);
|
||||
// todo: 大于两托正常,大于1托给1,小于1托给2
|
||||
// 5 校验是否够码满一托/两托
|
||||
// 大于等于2就可以码
|
||||
if (total/needFullNumber >= 2) {
|
||||
if (jsonObject.getInteger("special_param") == 0) {
|
||||
/** 覆膜机木托盘位 */
|
||||
SchBasePoint LaminatePoint = findStartPoint(startRegionStr, jsonObject);
|
||||
if (ObjectUtil.isEmpty(LaminatePoint)) {
|
||||
|
||||
Reference in New Issue
Block a user