rev:手持更新

This commit is contained in:
2025-09-08 09:09:37 +08:00
parent 763216bf71
commit 12b762513c
16 changed files with 253 additions and 75 deletions

View File

@@ -116,7 +116,6 @@ public class BsrealStorattrServiceImpl extends ServiceImpl<BsrealStorattrMapper,
dto.setUpdate_time(now);
dto.setCreate_time(now);
//TODO
dto.setSyscompanyid(9L);
dto.setSysdeptid(9L);
dto.setSysownerid(9L);

View File

@@ -1,6 +1,7 @@
package org.nl.wms.ext.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.ext.service.AcsToWmsService;
@@ -30,8 +31,15 @@ public class AcsToWmsController {
@PostMapping("/status")
@Log(value = "ACS给WMS反馈任务状态")
@SaIgnore
public ResponseEntity<Object> receiveTaskStatusAcs(@RequestBody String string) {
return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK);
public ResponseEntity<Object> receiveTaskStatusAcs(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(whereJson), HttpStatus.OK);
}
@PostMapping("/resultCar")
@Log(value = "ACS给WMS反馈车号")
@SaIgnore
public ResponseEntity<Object> resultCar(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.resultCar(whereJson), HttpStatus.OK);
}
}

View File

@@ -21,4 +21,14 @@ public class EXTConstant {
* ACS下发任务接口地址
*/
public final static String SEND_TASK_ACS_API = "api/wms/task";
/**
* ACS下发 取放货确认
*/
public final static String CONFIRM_AGV_ACS_API = "api/wms/confirmAgv";
/**
* ACS下发 获取称重信息
*/
public final static String GET_WEIGH_ACS_API = "api/wms/getWeigh";
}

View File

@@ -1,5 +1,8 @@
package org.nl.wms.ext.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.ext.util.BaseResponse;
import java.util.Map;
/**
@@ -16,8 +19,20 @@ public interface AcsToWmsService {
* ACS客户端--->WMS服务端
* ACS向WMS反馈任务状态
*
* @param string ACS反馈的任务数组
* @return Map<String, Object>
* @param whereJson ACS反馈的任务数组
* @return BaseResponse
*/
Map<String, Object> receiveTaskStatusAcs(String string);
BaseResponse receiveTaskStatusAcs(JSONObject whereJson);
/**
* ACS客户端--->WMS服务端
* ACS给WMS反馈车号
* @param whereJson {
* task_id: 任务标识
* task_code: 任务编码
* car_no: 车号
* }
* @return BaseResponse
*/
BaseResponse resultCar(JSONObject whereJson);
}

View File

@@ -30,4 +30,14 @@ public interface WmsToAcsService {
* @return AcsResponse
*/
AcsResponse getWeighAcs(JSONObject whereJson);
/**
* 确认取放货
* @param whereJson {
* task_type: 1-取货确认 2- 放货确认
* task_code: 任务号
* }
* @return AcsResponse
*/
AcsResponse confirmAgv(JSONObject whereJson);
}

View File

@@ -1,12 +1,13 @@
package org.nl.wms.ext.service.impl;
import com.alibaba.fastjson.JSONArray;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.ext.enums.ResultAcsStatus;
import org.nl.wms.ext.service.AcsToWmsService;
import org.nl.wms.ext.util.BaseResponse;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
@@ -15,11 +16,9 @@ import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
@@ -55,52 +54,77 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public Map<String, Object> receiveTaskStatusAcs(String string) {
log.info("acs向lms反馈任务状态请求参数--------------------------------------" + string);
JSONArray array = JSONArray.parseArray(string);
//返回处理失败的任务
JSONArray errArr = new JSONArray();
for (int i = 0; i < array.size(); i++) {
JSONObject row = array.getJSONObject(i);
String task_id = row.getString("task_id");
RLock lock = redissonClient.getLock(task_id);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBaseTask taskObj = iSchBaseTaskService.getById(task_id);
// acs反馈的任务类型
String acs_task_status = row.getString("task_status");
TaskStatus status;
if (ResultAcsStatus.EXECUTING.getCode().equals(acs_task_status)) {
// 执行中
status = TaskStatus.EXECUTING;
} else if (ResultAcsStatus.FINISHED.getCode().equals(acs_task_status)) {
// 完成
status = TaskStatus.FINISHED;
iSchBaseTaskService.updateById(taskObj);
} else {
// 取消
status = TaskStatus.CANCELED;
}
// 根据配置编码执行相关配置内的方法
AbstractTask task = taskFactory.getTask(taskObj.getConfig_code());
task.updateTaskStatus(taskObj.getTask_code(),status);
public BaseResponse receiveTaskStatusAcs(JSONObject whereJson) {
log.info("acs向lms反馈任务状态请求参数--------------------------------------" + whereJson.toString());
// 任务标识
String task_id = whereJson.getString("task_id");
// acs反馈的任务类型
String acs_task_status = whereJson.getString("task_status");
RLock lock = redissonClient.getLock(task_id);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBaseTask taskObj = iSchBaseTaskService.getById(task_id);
TaskStatus status;
if (ResultAcsStatus.EXECUTING.getCode().equals(acs_task_status)) {
// 执行中
status = TaskStatus.EXECUTING;
// 更新车号
} else if (ResultAcsStatus.FINISHED.getCode().equals(acs_task_status)) {
// 完成
status = TaskStatus.FINISHED;
} else {
throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!");
}
} finally {
if (tryLock) {
lock.unlock();
// 取消
status = TaskStatus.CANCELED;
}
// 根据配置编码执行相关配置内的方法
AbstractTask task = taskFactory.getTask(taskObj.getConfig_code());
task.updateTaskStatus(taskObj.getTask_code(), status);
} else {
throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "任务状态反馈成功!");
result.put("data", new JSONObject());
result.put("errArr", errArr);
log.info("acs向lms反馈任务状态返回参数--------------------------------------" + result.toString());
return result;
log.info("acs向lms反馈任务状态返回参数--------------------------------------" + BaseResponse.responseOk().toString());
return BaseResponse.responseOk();
}
@Override
@Transactional(rollbackFor = Exception.class)
@SneakyThrows
public BaseResponse resultCar(JSONObject whereJson) {
log.info("acs向lms反馈任务车号请求参数--------------------------------------" + whereJson.toString());
// 任务标识
String task_id = whereJson.getString("task_id");
// 车号
String car_no = whereJson.getString("car_no");
if (ObjectUtil.isEmpty(car_no)) {
throw new BadRequestException("车号不能为空!");
}
RLock lock = redissonClient.getLock(task_id);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
SchBaseTask taskObj = iSchBaseTaskService.getById(task_id);
taskObj.setCar_no(car_no);
iSchBaseTaskService.updateById(taskObj);
} else {
throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return BaseResponse.responseOk();
}
}

View File

@@ -30,6 +30,12 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
@Override
public AcsResponse getWeighAcs(JSONObject whereJson) {
return null;
return AcsUtil.notifyAcs(EXTConstant.GET_WEIGH_ACS_API, whereJson);
}
@Override
public AcsResponse confirmAgv(JSONObject whereJson) {
return AcsUtil.notifyAcs(EXTConstant.CONFIRM_AGV_ACS_API, whereJson);
}
}

View File

@@ -80,4 +80,51 @@ public class AcsUtil {
return resultAcs;
}
/**
* 调用acs
* @param api acs地址
* @param param 下发参数
* @return AcsResponse
*/
public static AcsResponse notifyAcs(String api, JSONObject param) {
log.info("下发acs接口"+api+"的输入参数为:-------------------" + param.toString());
// 返回参数
AcsResponse resultAcs;
// 系统参数类
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
//判断是否连接ACS系统
Param isConnectAcs = sysParamService.findByCode(SysParamConstant.IS_CONNECT_ACS);
if (ObjectUtil.isEmpty(isConnectAcs)) {
return AcsResponse.requestError("系统参数表中:" + SysParamConstant.IS_CONNECT_ACS + "不存在");
}
if (isConnectAcs.getValue().equals(IOSConstant.IS_DELETE_NO)) {
return AcsResponse.requestOkMessage("下发成功未连接ACS系统!");
}
//ACS地址
Param acsUrlParam = sysParamService.findByCode(SysParamConstant.ACS_URL);
if (ObjectUtil.isEmpty(acsUrlParam)) {
return AcsResponse.requestError("系统参数表中:" + SysParamConstant.ACS_URL + "不存在");
}
String url = acsUrlParam.getValue() + api;
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(param))
.execute().body();
// 格式转换
JSONObject result = JSONObject.parseObject(resultMsg);
resultAcs = JSONObject.toJavaObject(result, AcsResponse.class);
log.info("下发ACS任务的输出参数为-------------------" + resultMsg);
} catch (Exception e) {
//网络不通
String msg = e.getMessage();
log.error("连接失败:{}", msg);
return AcsResponse.requestError("网络不通,操作失败!");
}
return resultAcs;
}
}

View File

@@ -56,9 +56,8 @@ public class BaseResponse implements Serializable {
return response;
}
public static BaseResponse responseOk(String requestNo) {
public static BaseResponse responseOk() {
BaseResponse response = new BaseResponse();
response.setRequestNo(requestNo);
response.setStatus(HttpStatus.HTTP_OK);
response.setMessage("请求成功");
response.setResponseDate(DateUtil.now());
@@ -84,9 +83,8 @@ public class BaseResponse implements Serializable {
return response;
}
public static BaseResponse responseError(String requestNo, String message) {
public static BaseResponse responseError(String message) {
BaseResponse response = new BaseResponse();
response.setRequestNo(requestNo);
response.setStatus(HttpStatus.HTTP_BAD_REQUEST);
response.setMessage(message);
response.setResponseDate(DateUtil.now());

View File

@@ -78,7 +78,7 @@ public class PdaInGroupBoxServiceImpl implements PdaInGroupBoxService {
// 物料编码
String mater_code = split[0];
// 烘干次数
String bake_num = split[10];
String bake_num = split[7];
// 校验物料
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(groupDao.getMaterial_id());
if (!materDao.getMaterial_code().equals(mater_code)) {

View File

@@ -101,10 +101,15 @@ public class PdmBomCallMaterialDtlServiceImpl extends ServiceImpl<PdmBomCallMate
throw new BadRequestException("请维护当前载具重量【" + pointDao.getVehicle_code() + "");
}
// TODO 调用ACS接口获取称重信息
AcsResponse weighAcs = wmsToAcsService.getWeighAcs(new JSONObject());
JSONObject jsonResult = weighAcs.getResultData();
// 调用ACS接口获取称重信息
JSONObject jsonParam = new JSONObject();
jsonParam.put("device_code", pointDao.getPoint_code());
AcsResponse weighAcs = wmsToAcsService.getWeighAcs(jsonParam);
if (weighAcs.getStatus() != 200) {
throw new BadRequestException(weighAcs.getMessage());
}
JSONObject jsonResult = weighAcs.getResultData();
// 称重重量
double weigh_qty = NumberUtil.round(jsonResult.getDoubleValue("weigh_qty"), 2).doubleValue();
// 扣除载具重量

View File

@@ -14,6 +14,8 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.ext.service.WmsToAcsService;
import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.sch_manage.enums.PointStatusEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
@@ -48,6 +50,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Autowired
private SchBaseRegionMapper regionMapper;
@Autowired
private WmsToAcsService wmsToAcsService;
@Override
public IPage<SchBasePoint> queryAll(SchBasePointQuery whereJson, PageQuery page) {
IPage<SchBasePoint> pages = new Page<>(page.getPage() + 1, page.getSize());
@@ -204,19 +209,42 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Transactional
public void getConfirm(JSONObject whereJson) {
SchBasePoint pointDao = this.getById(whereJson.getString("point_code"));
if (ObjectUtil.isEmpty(pointDao.getIng_task_code())) {
throw new BadRequestException("当前站点没有任务【"+pointDao.getPoint_code()+"");
}
// 通知ACS可以离开
JSONObject jsonParam = new JSONObject();
jsonParam.put("task_type", IOSConstant.ONE);
jsonParam.put("task_code", pointDao.getIng_task_code());
AcsResponse acsResponse = wmsToAcsService.confirmAgv(jsonParam);
if (acsResponse.getStatus() != 200) {
throw new BadRequestException(acsResponse.getMessage());
}
// 清空点位信息
pointDao.setVehicle_code("");
pointDao.setPoint_status(IOSEnum.POINT_STATUS.code("空位"));
pointDao.setIng_task_code("");
this.updateById(pointDao);
// TODO 通知ACS可以离开
}
@Override
@Transactional
public void putConfirm(JSONObject whereJson) {
SchBasePoint pointDao = this.getById(whereJson.getString("point_code"));
// TODO 通知ACS可以离开
if (ObjectUtil.isEmpty(pointDao.getIng_task_code())) {
throw new BadRequestException("当前站点没有任务【"+pointDao.getPoint_code()+"");
}
// 通知ACS可以离开
JSONObject jsonParam = new JSONObject();
jsonParam.put("task_type", IOSConstant.TWO);
jsonParam.put("task_code", pointDao.getIng_task_code());
AcsResponse acsResponse = wmsToAcsService.confirmAgv(jsonParam);
if (acsResponse.getStatus() != 200) {
throw new BadRequestException(acsResponse.getMessage());
}
}
@Override

View File

@@ -25,10 +25,14 @@
late.*,
mater.material_code,
mater.material_name,
mater.material_spec
mater.material_spec,
mater.material_model,
mater.quality_time AS quality_time_day,
supp.supp_name
FROM
md_pb_groupplate late
INNER JOIN md_me_materialbase mater ON mater.material_id = late.material_id
INNER JOIN md_cs_supplierbase supp ON supp.supp_code = late.supp_code
<where>
1 = 1
<if test="param.material_code != null and param.material_code != ''">

View File

@@ -138,10 +138,15 @@ public class SelectOutServiceImpl extends ServiceImpl<IOStorInvDtlMapper, IOStor
throw new BadRequestException("请维护当前载具重量【" + pointDao.getVehicle_code() + "");
}
// TODO 调用ACS接口获取称重信息
AcsResponse weighAcs = wmsToAcsService.getWeighAcs(new JSONObject());
JSONObject jsonResult = weighAcs.getResultData();
// 调用ACS接口获取称重信息
JSONObject jsonParam = new JSONObject();
jsonParam.put("device_code", pointDao.getPoint_code());
AcsResponse weighAcs = wmsToAcsService.getWeighAcs(jsonParam);
if (weighAcs.getStatus() != 200) {
throw new BadRequestException(weighAcs.getMessage());
}
JSONObject jsonResult = weighAcs.getResultData();
// 称重重量
double weigh_qty = NumberUtil.round(jsonResult.getDoubleValue("weigh_qty"), 2).doubleValue();
// 扣除载具重量

View File

@@ -185,10 +185,15 @@ public class StIvtCombinedBoxServiceImpl extends ServiceImpl<StIvtCombinedBoxMap
throw new BadRequestException("请维护当前载具重量【" + pointDao.getVehicle_code() + "");
}
// TODO 调用ACS接口获取称重信息
AcsResponse weighAcs = wmsToAcsService.getWeighAcs(new JSONObject());
JSONObject jsonResult = weighAcs.getResultData();
// 调用ACS接口获取称重信息
JSONObject jsonParam = new JSONObject();
jsonParam.put("device_code", pointDao.getPoint_code());
AcsResponse weighAcs = wmsToAcsService.getWeighAcs(jsonParam);
if (weighAcs.getStatus() != 200) {
throw new BadRequestException(weighAcs.getMessage());
}
JSONObject jsonResult = weighAcs.getResultData();
// 称重重量
double weigh_qty = NumberUtil.round(jsonResult.getDoubleValue("weigh_qty"), 2).doubleValue();
// 扣除载具重量

View File

@@ -403,13 +403,27 @@ export default {
LODOP.SET_SHOW_MODE('HIDE_DISBUTTIN_SETUP', 1)// 隐藏那些无效按钮
// 打印纸张大小设置https://www.it610.com/article/2094844.html
LODOP.PRINT_INIT('')
LODOP.SET_PRINT_PAGESIZE(1, '80mm', '60mm', '')
LODOP.ADD_PRINT_RECT('1mm', '3mm', '74mm', '54mm', 0, 1)
LODOP.SET_PRINT_STYLE('FontSize', 9)
LODOP.SET_PRINT_PAGESIZE(1, '100mm', '80mm', '')
LODOP.ADD_PRINT_RECT('1mm', '3mm', '94mm', '74mm', 0, 1)
LODOP.SET_PRINT_STYLE('FontSize', 11)
LODOP.SET_PRINT_STYLE('Bold', 1)
LODOP.ADD_PRINT_BARCODE('10mm', '15mm', '60mm', '20mm', 'QRCode', row.material_name)
LODOP.ADD_PRINT_TEXT('35mm', '15mm', '80mm', '15mm', '备件名称:' + row.material_name + '')
LODOP.ADD_PRINT_TEXT('45mm', '15mm', '80mm', '15mm', '型号:' + row.material_spec + '')
LODOP.ADD_PRINT_BARCODE('5mm', '5mm', '40mm', '40mm', 'QRCode', row.material_code + '##' + row.material_name + '##' +
row.material_spec + '##' + row.material_model + '##' + row.quality_time_day + '##' + row.produce_time + '##' +
row.supp_name + '##' + row.bake_num + '##' + row.supp_code + '##' + row.pcsn + '##' + row.execution_stand
)
LODOP.ADD_PRINT_TEXT('7mm', '48mm', '80mm', '15mm', '物料编码:' + row.material_code + '')
LODOP.ADD_PRINT_TEXT('16mm', '48mm', '80mm', '15mm', '物料名称:' + row.material_name + '')
LODOP.ADD_PRINT_TEXT('25mm', '48mm', '80mm', '15mm', '规格:' + row.material_spec + '')
LODOP.ADD_PRINT_TEXT('34mm', '48mm', '80mm', '15mm', '型号:' + row.material_model + '')
LODOP.ADD_PRINT_TEXT('43mm', '48mm', '80mm', '15mm', '有效期(天)' + row.quality_time_day + '')
LODOP.ADD_PRINT_TEXT('52mm', '48mm', '80mm', '15mm', '生产日期:' + row.produce_time + '')
LODOP.ADD_PRINT_TEXT('61mm', '48mm', '80mm', '15mm', '供应商名称:' + row.supp_name + '')
LODOP.ADD_PRINT_TEXT('43mm', '5mm', '80mm', '15mm', '烘干次数:' + row.bake_num + '')
LODOP.ADD_PRINT_TEXT('52mm', '5mm', '80mm', '15mm', '供应商编码:' + row.supp_code + '')
LODOP.ADD_PRINT_TEXT('61mm', '5mm', '80mm', '15mm', '批号:' + row.pcsn + '')
LODOP.ADD_PRINT_TEXT('69mm', '5mm', '80mm', '15mm', '执行标准:' + row.execution_stand + '')
// LODOP.PRINT()// 打印
LODOP.PREVIEW()// 预览
}