This commit is contained in:
2023-03-28 19:53:58 +08:00
65 changed files with 8256 additions and 2749 deletions

View File

@@ -43,7 +43,12 @@
<artifactId>jansi</artifactId>
<version>1.9</version>
</dependency>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.4</version>
</dependency>
<!--登录相关-->
<dependency>
<groupId>cn.dev33</groupId>
@@ -254,6 +259,11 @@
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<scope>test</scope> <!-- 特殊处理不引入父类lib -->
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
@@ -334,7 +344,11 @@
<includes>
<include>**/*.*</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>

View File

@@ -27,11 +27,10 @@ public enum AcsTaskEnum {
TASK_CACHELINE_OUT("3","缓存线出库任务"),
//回调状态
STATUS_START("1","开始取货"),
STATUS_RUNDING("2","放货中"),
STATUS_FINISH("3","完成"),
STATUS_CANNEL("4","取消"),
STATUS_START("1","执行中"),
STATUS_FINISH("2","完成"),
STATUS_CANNEL("3","取消"),
//专机请求
REQUEST_CALLTYPE_FULL("1","满料请求"),
REQUEST_CALLTYPE_EMP("2","缺料请求"),
;

View File

@@ -20,12 +20,12 @@ public enum StatusEnum {
//锁状态
LOCK_OFF("0","",""),
LOCK_ON("1","",""),
//缓存线载具状态00-空位、01-绿色空箱、02-黄色满箱、03-红色异常、04不显示
CACHE_VEL_NULL("00","空位",""),
CACHE_VEL_EMT("01","绿色空箱",""),
CACHE_VEL_FULL("02","黄色满箱",""),
CACHE_VEL_ERR("03","红色异常",""),
CACHE_VEL_DIS("04","04不显示",""),
//缓存线载具状态 1-空位、2-绿色空箱、3-黄色满箱、4-红色异常、5不显示
CACHE_VEL_NULL("1","空位",""),
CACHE_VEL_EMT("2","绿色空箱",""),
CACHE_VEL_FULL("3","黄色满箱",""),
CACHE_VEL_ERR("4","红色异常",""),
CACHE_VEL_DIS("5","不显示",""),
//任务状态
TASK_CREATE("1","生成",""),
TASK_START_P("2","起点确认",""),

View File

@@ -6,12 +6,13 @@ package org.nl.common.enums;
* @Date: 2023/3/16
*/
public enum WorkerOrderEnum {
// 1-创建、2-下发、3-生产中、4-暂停、5-完成
// 1-创建、2-下发、3-生产中、4-暂停、5-完成 6-强制完成
CREATE("创建", "1"),
SEND("下发", "2"),
PRODUCTING("生产中", "3"),
STOP("暂停", "4"),
COMPLETE("完成", "5"),
FORCE_COMPLETE("强制完成", "6"),
// 1-PC创建、2-Excel导入
PCINTO("PC创建", "1"),
EXCELINTO("EXCEL导入", "2"),

View File

@@ -0,0 +1,7 @@
package org.nl.common.handler;
@FunctionalInterface
public
interface LockProcess {
void process();
}

View File

@@ -0,0 +1,45 @@
package org.nl.common.utils;
import lombok.SneakyThrows;
import org.nl.common.handler.LockProcess;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import java.util.concurrent.TimeUnit;
/*
* @author ZZQ
* @Date 2023/3/27 10:30
*/
public class RedissonUtils {
/**
*
* @param process 业务代码
* @param key
* @param seconds 尝试获取锁的等待时间,允许为空
*/
@SneakyThrows
public static void lock(LockProcess process, String key, Integer seconds){
RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
RLock lock = redissonClient.getLock(key);
boolean isLock;
if (seconds == null){
isLock = lock.tryLock();
}else {
isLock = lock.tryLock(seconds, TimeUnit.SECONDS);
}
try {
if (isLock){
process.process();
}{
throw new BadRequestException("当前业务 key:"+key+"正在锁定请稍后再试");
}
}finally {
if (isLock){
lock.unlock();
}
}
}
}

View File

@@ -41,7 +41,7 @@ public class RestBusinessTemplate{
catch(Exception e) {
log.error("execute error", e);
result.setCode(ResultCode.FAILED.getCode());
result.setDesc(ResultCode.FAILED.getDesc());
result.setDesc(ResultCode.FAILED.getDesc()+",原因是:"+e.getMessage());
}
return result;
}

View File

@@ -15,7 +15,7 @@ import javax.sql.DataSource;
import java.sql.DriverManager;
import java.sql.SQLException;
@Configuration
//@Configuration
@Slf4j
public class DataBaseConfig {
@Value("${erp.oracle.enabled}")

View File

@@ -1,6 +1,7 @@
package org.nl.system.controller.dict;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -117,5 +118,13 @@ public class SysDictController {
return new ResponseEntity<>(HttpStatus.OK);
}
@Log("查询字典详情")
@ApiOperation("查询字典详情")
@PostMapping("/dictDetailByCode")
@SaIgnore
public ResponseEntity<Object> createDetail(@RequestBody String code){
return new ResponseEntity<>(dictService.getDictByName(code),HttpStatus.OK);
}
}

View File

@@ -169,6 +169,9 @@ public class SectattrServiceImpl implements SectattrService {
String is_productstore = (String) whereJson.get("is_productstore");
String is_attachment = (String) whereJson.get("is_attachment");
String is_reversed = (String) whereJson.get("is_reversed");
String stor_id = (String) whereJson.get("stor_id");
stor_map.put("stor_id", stor_id);
if (!StrUtil.isEmpty(is_materialstore)) {
stor_map.put("is_materialstore", is_materialstore);
}

View File

@@ -21,6 +21,7 @@
输入.is_productstore TYPEAS s_string
输入.is_attachment TYPEAS s_string
输入.is_reversed TYPEAS s_string
输入.stor_id TYPEAS s_string
[临时表]
@@ -95,6 +96,9 @@
ENDOPTION
OPTION 输入.is_reversed <> ""
stor.is_reversed = 输入.is_reversed
ENDOPTION
OPTION 输入.stor_id <> ""
stor.stor_id = 输入.stor_id
ENDOPTION
ENDSELECT
ENDQUERY

View File

@@ -21,7 +21,7 @@ public class CachelinePositionDto implements Serializable {
private String position_name;
/** 位置顺序号 */
private BigDecimal positionOrder_no;
private BigDecimal positionorder_no;
/** 缓存线编码 */
private String cacheline_code;

View File

@@ -6,8 +6,11 @@ import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.anno.Log;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.utils.api.ResultCode;
import org.nl.modules.common.exception.BizCoreException;
import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -16,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
@@ -37,6 +41,17 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.apply(whereJson), HttpStatus.OK);
}
@PostMapping("/receiveTaskIdToCacheLine")
@Log("ACS给WMS发送缓存线的实时任务ID")
@ApiOperation("ACS给WMS发送缓存线的实时任务ID")
public ResponseEntity<Object> receiveTaskIdToCacheLine(@RequestBody JSONObject whereJson) {
//参数校验
if(StringUtils.isEmpty(whereJson.getString("task_id")) || StringUtils.isEmpty(whereJson.getString("position_code"))) {
throw new BizCoreException(ResultCode.MISS_PARAMETER);
}
return new ResponseEntity<>(acsToWmsService.receiveTaskIdToCacheLine(whereJson), HttpStatus.OK);
}
@PostMapping("/status")
@Log("ACS给WMS反馈任务状态")
@ApiOperation("ACS给WMS反馈任务状态")
@@ -44,11 +59,11 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK);
}
@PostMapping("/orderFinish")
@PostMapping("/orderStatus")
@Log("ACS给WMS下发工单完成状态")
@ApiOperation("ACS给WMS下发工单完成状态")
public ResponseEntity<Object> orderFinish(@RequestBody String string) {
return new ResponseEntity<>(acsToWmsService.orderFinish(string), HttpStatus.OK);
public ResponseEntity<Object> orderFinish(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.orderStatus(param), HttpStatus.OK);
}
@PostMapping("/feedDeviceStatusType")
@@ -58,10 +73,32 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.feedDeviceStatusType(string), HttpStatus.OK);
}
@PostMapping("/feedDeviceQty")
@Log("向wms反馈设备实时数量")
@ApiOperation("向wms反馈设备实时数量")
public ResponseEntity<Object> feedDeviceRealQty(@RequestBody List<JSONObject> param) {
acsToWmsService.feedDevQty(param);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/feedcachelineVe")
@Log("向wms反馈缓存载具信息")
@ApiOperation("向wms反馈缓存载具信息")
public ResponseEntity<Object> feedcachelineVe(@RequestBody JSONObject param) {
acsToWmsService.feedcachelineVe(param);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/feedOrderRealQty")
@Log("向wms反订单实施数量")
@Log("向wms反实施数量")
@ApiOperation("向wms反订单实施数量")
public ResponseEntity<Object> feedOrderRealQty(@RequestBody String string) {
return new ResponseEntity<>(acsToWmsService.feedOrderRealQty(string), HttpStatus.OK);
}
}

View File

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.nl.common.anno.Log;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -64,6 +65,11 @@ public class WmsToAcsController {
return new ResponseEntity<>(wmsToAcsService.order(arr), HttpStatus.OK);
}
/**
* @see org.nl.common.enums.WorkerOrderEnum
* @param whereJson
* @return
*/
@PostMapping("/orderStatusUpdate")
@Log("WMS向acs发送强制完成")
@ApiOperation("WMS强制完成向acs发送强制完成")

View File

@@ -2,6 +2,7 @@ package org.nl.wms.ext.acs.service;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
import java.util.Map;
public interface AcsToWmsService {
@@ -16,6 +17,18 @@ public interface AcsToWmsService {
Map<String, Object> apply(JSONObject jsonObject);
/**
*
* ACS客户端--->WMS服务端
* ACS给WMS发送缓存线的实时任务ID
* @param jsonObject 条件1.缓存线点位编码:position_code,2.任务id:task_id
* @return JSONObject
* @author gbx
* @date 2023/3/25
*/
JSONObject receiveTaskIdToCacheLine(JSONObject jsonObject);
/**
* ACS客户端--->WMS服务端
* ACS向WMS反馈任务状态
@@ -37,10 +50,16 @@ public interface AcsToWmsService {
/**
* ACS给WMS下发工单强制完成状态
* @param string
* @return
*/
Map<String, Object> orderFinish(String string);
Map<String, Object> orderStatus(JSONObject param);
/**
* 设备实时数量
* @param param
* @return
*/
void feedDevQty(List<JSONObject> param);
/**
* ACS给WMS反馈设备状态状态
@@ -49,6 +68,13 @@ public interface AcsToWmsService {
*/
Map<String, Object> feedDeviceStatusType(String string);
/**
* acs反馈缓存线载具对应关系
* 缓存线变化时候全部反馈
* @param param{""cacheline_code":"xxx","param":"01_zj001,02_zj002,...""}
*/
void feedcachelineVe(JSONObject param);
/**
* ACS给WMS反馈订单实时数量
* @param string

View File

@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.anno.Log;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
@@ -16,24 +17,33 @@ import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.nl.wms.pda.service.CacheLineHandService;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.TaskService;
import org.nl.wms.sch.service.dto.TaskDto;
import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@RequiredArgsConstructor
@Slf4j
public class AcsToWmsServiceImpl implements AcsToWmsService {
private final TaskService taskService;
private final AgvInstService agvInstService;
public class AcsToWmsServiceImpl implements AcsToWmsService{
@Autowired
private TaskService taskService;
@Autowired
private CacheLineHandService cacheLineHandService;
private final AgvInstService agvInstService;
@Override
public Map<String, Object> apply(JSONObject jsonObject) {
@@ -55,6 +65,34 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
/**
* 更新缓存线的点位实时任务信息
* ACS给WMS发送缓存线的实时任务ID
* @param jsonObject position_code缓存线点位编码 task_id任务id
*/
@Override
public JSONObject receiveTaskIdToCacheLine(JSONObject jsonObject) {
JSONObject result = new JSONObject();
HashMap<String,String> json = new HashMap<>(2);
try {
String taskId = jsonObject.getString("position_code");
String positionCode = jsonObject.getString("task_id");
//缓存线位置表
WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position");
json.put("position_code", positionCode);
json.put("task_id", taskId);
//更新缓存线的点位实时任务信息
positionTab.update(json);
}
catch(Exception e) {
result.put("status", 400);
result.put("message", e.getMessage());
}
result.put("status", HttpStatus.OK.value());
result.put("message", "设备状态反馈成功");
return result;
}
/**
* task_uuid任务标识
* task_code任务编码
@@ -70,15 +108,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONArray errArr = new JSONArray();
for (int i = 0; i < array.size(); i++) {
JSONObject row = array.getJSONObject(i);
String task_uuid = row.getString("task_uuid");
TaskDto taskDto = taskService.findById(task_uuid);
String task_id = row.getString("task_id");
TaskDto taskDto = taskService.findById(task_id);
String processing_class = taskDto.getHandle_class();
//1:执行中,2:完成 ,3:acs取消
String acs_task_status = row.getString("task_status");
String message = "";
String status = "";
if ("1".equals(acs_task_status)) {
status = AcsTaskEnum.STATUS_RUNDING.getCode();
status = AcsTaskEnum.STATUS_START.getCode();
}
if ("2".equals(acs_task_status)) {
status = AcsTaskEnum.STATUS_FINISH.getCode();
@@ -101,7 +139,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
log.info("任务状态更新失败:{}", message);
JSONObject json = new JSONObject();
json.put("task_uuid", task_uuid);
json.put("task_id", task_id);
json.put("message", message);
errArr.add(json);
@@ -111,7 +149,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
log.info("任务状态更新失败:{}", message);
JSONObject json = new JSONObject();
json.put("task_uuid", task_uuid);
json.put("task_id", task_id);
json.put("message", message);
errArr.add(json);
@@ -132,14 +170,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
@Override
public Map<String, Object> orderFinish(String string) {
public Map<String, Object> orderStatus(JSONObject orderJson) {
JSONObject result = new JSONObject();
try {
JSONObject orderJson = JSONObject.parseObject(string);
String ext_order_id = orderJson.getString("ext_order_id");
String ext_order_id = orderJson.getString("workorder_id");
// JSONArray array = JSONArray.parseArray(string);
WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder");
//TODO: 表未维护
WQLObject wo = WQLObject.getWQLObject("PDM_produce_workOrder");
JSONObject map = new JSONObject();
map.put("produceorder_id", ext_order_id);
map.put("order_status", "04");
@@ -214,6 +251,37 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
@Override
public void feedDevQty(List<JSONObject> param) {
WQLObject deviceTab = WQLObject.getWQLObject("pdm_bi_device");
if (CollectionUtils.isEmpty(param)){
return;
}
for (JSONObject item : param) {
String deviceCode = item.getString("device_code");
String qty = item.getString("qty");
deviceTab.update(MapOf.of("deviceinstor_qty",qty),"device_code = '"+deviceCode+"'");
}
}
@Override
public void feedcachelineVe(JSONObject param) {
WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position");
//{""cacheline_code":"xxx","param":"01_zj001,02_zj002,...""}
if (param == null|| StringUtils.isEmpty(param.getString("cacheline_code")) || StringUtils.isEmpty(param.getString("param"))){
return;
}
String cachelineCode = param.getString("cacheline_code");
String cacheVehicle = param.getString("param");
String[] collect = cacheVehicle.split(",");
for (String positionVehicle : collect) {
String[] s = positionVehicle.split("_");
positionTab.update(MapOf.of("position_code",s[0],"Vehicle_code",s[1]),"cacheline_code = '"+cachelineCode+"'");
}
//更新缓存线及缓存线载具表对应关系
cacheLineHandService.cacheLineMaterSync(param.getString("cacheline_code"));
}
@Override
public Map<String, Object> feedOrderRealQty(String string) {
JSONObject result = new JSONObject();

View File

@@ -44,7 +44,7 @@ public class AgvInstService {
WQLObject basePoint = WQLObject.getWQLObject("sch_base_point");
WQLObject cacheLineSearch = WQLObject.getWQLObject("SCH_cacheLine_region_relation");
try {
String workorder = param.getString("workorder_code");
String workorder = param.getString("workorder_code");//
String point_code = param.getString("point_code");
String quantity = param.getString("quantity");
//1.PDM_produce_workOrder

View File

@@ -3,31 +3,35 @@ package org.nl.wms.ext.acs.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import org.nl.common.anno.Log;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.utils.AcsUtil;
import org.nl.common.utils.MapOf;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
@RequiredArgsConstructor
@Slf4j
public class WmsToAcsServiceImpl implements WmsToAcsService {
public class WmsToAcsServiceImpl implements WmsToAcsService{
@Override
public Map<String, Object> issueTaskToAcs(JSONArray arr) {
JSONArray form = new JSONArray();
for (Object o : arr) {
JSONObject task = (JSONObject) o;
JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id")
, "task_type", task.getString("task_type")
, "acs_task_type", task.getString("acs_task_type")
, "start_point_code", task.getString("point_code1")
, "next_point_code", task.getString("point_code2")
, "return_point_code", task.getString("point_code3")
, "task_group_id", task.getString("task_group_id")
, "priority", task.getString("priority")
, "task_group_id", task.getString("is_send")
, "vehicle_code", task.getString("vehicle_code")
, "agv_system_type", task.getString("agv_system_type")
));
form.add(param);
}

View File

@@ -220,9 +220,9 @@ public class ProduceWorkorderServiceImpl implements ProduceWorkorderService {
if (param == null || param.size()==0){
return;
}
String sql = param.stream().collect(Collectors.joining("','"));
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String sql = param.stream().collect(Collectors.joining("','"));
WQLObject wo = WQLObject.getWQLObject("PDM_produce_workOrder");
wo.update(MapOf.of("workorder_status", WorkerOrderEnum.SEND.getCode()
,"update_id", currentUserId,"update_name"

View File

@@ -14,7 +14,7 @@ public class CachelineVehileMaterialDto implements Serializable{
/**
* 载具库存标识
*/
private String vehmaterial_uuid;
private String vehmaterial_id;
/**
* 缓存线位置编码
*/

View File

@@ -1,6 +1,7 @@
package org.nl.wms.pda.rest;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -12,6 +13,7 @@ import org.nl.common.utils.api.CommonResult;
import org.nl.common.utils.api.RestBusinessTemplate;
import org.nl.common.utils.api.ResultCode;
import org.nl.modules.common.exception.BizCoreException;
import org.nl.wms.pda.dto.MaterialDto;
import org.nl.wms.pda.service.CacheLineHandService;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.PostMapping;
@@ -19,10 +21,12 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* 海亮缓存线手持服务
* 返回数据CommonResult,code,desc,result是因为原有对接文档给前端返回格式要求保留所以就包了一层。
*
* @author gbx
* @since 2023/3/22
@@ -39,47 +43,64 @@ public class CacheLineHandController{
@PostMapping("/materialQuery")
@Log("物料查询")
@ApiOperation("物料查询")
public CommonResult<Object> materialQuery(@RequestBody JSONObject form) {
public CommonResult<List<MaterialDto>> materialQuery(@RequestBody JSONObject form) {
String params = form.getString("search_bar");
//任务类型和任务ID校验instruct_uuid为前端参数命名本来应为task_id
if(StringUtils.isNotEmpty(params)) {
//限制查询参数过短,模糊力度大
int length = params.length();
if(length < 3) {
throw new BizCoreException("您输入的条件匹配的范围太大,请重新输入稍长一点的内容。");
}
}
log.info("海亮缓存线手持服务 [查询物料] 接口被请求, 请求参数-{}", form);
return RestBusinessTemplate.execute(() -> cacheLineHandService.materialQuery(form.getString("search_bar")));
return RestBusinessTemplate.execute(() -> cacheLineHandService.materialQuery(params));
}
@PostMapping("/queryMaterial")
@Log("物料模糊查询")
@ApiOperation("物料模糊查询")
public CommonResult<JSONArray> queryMaterial(@RequestBody JSONObject form) {
log.info("海亮缓存线手持服务 [查询物料] 接口被请求, 请求参数-{}", form);
return RestBusinessTemplate.execute(() -> cacheLineHandService.queryMaterial(form.getString("search_bar")));
}
@PostMapping("/semiMaterialSpecQuery")
@Log("规格下拉框查询")
@ApiOperation("规格下拉框查询")
public CommonResult<Object> semiMaterialSpecQuery(@RequestBody JSONObject form) {
public CommonResult<JSONArray> semiMaterialSpecQuery(@RequestBody JSONObject form) {
log.info("海亮缓存线手持服务 [规格下拉框查询] 接口被请求, 请求参数-{}", form);
return RestBusinessTemplate.execute(() -> cacheLineHandService.semiMaterialSpecQuery(form.getString("form")));
return RestBusinessTemplate.execute(() -> cacheLineHandService.semiMaterialSpecQuery(form.getString("search_bar")));
}
@PostMapping("/workProcedureQuery")
@PostMapping("/workprocedureQuery")
@Log("工序下拉框查询")
@ApiOperation("工序下拉框查询")
public CommonResult<Object> workProcedureQuery(@RequestBody JSONObject form) {
public CommonResult<JSONArray> workProcedureQuery(@RequestBody JSONObject form) {
log.info("海亮缓存线手持服务 [工序下拉框查询] 接口被请求, 请求参数-{}", form);
return RestBusinessTemplate.execute(() -> cacheLineHandService.workProcedureQuery(form.getString("form")));
return RestBusinessTemplate.execute(() -> cacheLineHandService.workProcedureQuery(form.getString("search_bar")));
}
@PostMapping("/deviceQuery")
@Log("缓存线设备下拉框查询")
@ApiOperation("缓存线设备下拉框查询")
public CommonResult<Object> deviceQuery(@RequestBody JSONObject form) {
public CommonResult<JSONArray> deviceQuery(@RequestBody JSONObject form) {
log.info("海亮缓存线手持服务 [缓存线设备下拉框查询] 接口被请求, 请求参数-{}", form);
return RestBusinessTemplate.execute(() -> cacheLineHandService.deviceQuery(form.getString("form")));
return RestBusinessTemplate.execute(() -> cacheLineHandService.deviceQuery(form.getString("search_bar")));
}
@PostMapping("/instStatusQuery")
@Log("指令状态下拉框查询")
@ApiOperation("指令状态下拉框查询")
public CommonResult<Object> instStatusQuery(@RequestBody JSONObject form) {
public CommonResult<JSONArray> instStatusQuery(@RequestBody JSONObject form) {
log.info("海亮缓存线手持服务 [指令状态下拉框查询] 接口被请求, 请求参数-{}", form);
return RestBusinessTemplate.execute(() -> cacheLineHandService.instStatusQuery(form.getString("form")));
return RestBusinessTemplate.execute(() -> cacheLineHandService.instStatusQuery(form.getString("search_bar")));
}
@PostMapping("/instPageQuery")
@Log("任务分页查询")
@ApiOperation("任务分页数据")
public CommonResult<Object> instPageQuery(@RequestBody Map param, Pageable page) {
public CommonResult<Map<String,Object>> instPageQuery(@RequestBody Map<String,String> param, Pageable page) {
log.info("海亮缓存线手持服务 [任务分页查询] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> {
if(null == param) {
@@ -92,22 +113,193 @@ public class CacheLineHandController{
@PostMapping("/cacheLineMaterCheck")
@Log("缓存线物料盘点")
@ApiOperation("缓存线物料盘点")
public CommonResult<Object> cacheLineMaterCheck(@RequestBody JSONObject param) {
public CommonResult<JSONArray> cacheLineMaterCheck(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线物料盘点] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(cacheLineHandService::cacheLineMaterCheck);
return null;
}
@PostMapping("/instOperation")
@Log("任务操作")
@ApiOperation("任务操作")
public CommonResult<Void> instOperation(@RequestBody JSONObject param) {
public CommonResult<String> instOperation(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [任务操作] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> {
//任务类型和任务ID校验instruct_uuid为前端参数命名本来应为task_id
if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("opt_type"))) {
throw new BizCoreException(ResultCode.MISS_PARAMETER);
}
cacheLineHandService.instOperation(param);
return cacheLineHandService.instOperation(param);
});
}
@PostMapping("/cacheLineOutBoxExceptionQuery")
@Log("缓存线出入箱异常-查询")
@ApiOperation("缓存线出入箱异常-查询")
public CommonResult<JSONArray> cacheLineOutBoxExceptionQuery(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线出入箱异常-查询] 接口被请求, 请求参数-{}", param);
//参数校验
if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("position_code"))) {
throw new BizCoreException(ResultCode.MISS_PARAMETER);
}
return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineOutBoxExceptionQuery(param));
}
@PostMapping("/cacheLineOutBoxExceptionConfirm")
@Log("缓存线出入箱异常-确认")
@ApiOperation("缓存线出入箱异常-确认")
public CommonResult<String> cacheLineOutBoxExceptionConfirm(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线出箱异常-确认] 接口被请求, 请求参数-{}", param);
//参数校验
if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("position_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) {
throw new BizCoreException(ResultCode.MISS_PARAMETER);
}
return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineOutBoxExceptionConfirm(param));
}
@PostMapping("/cacheLineMaterInfoQuery")
@Log("缓存线料箱条码查询料箱信息")
@ApiOperation("缓存线料箱条码查询料箱信息")
public CommonResult<JSONArray> cacheLineMaterInfoQuery(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线料箱条码查询料箱信息] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineMaterInfoQuery(param));
}
@PostMapping("/inOutEmptyBox")
@Log("空箱初始化--出入空箱")
@ApiOperation("空箱初始化--出入空箱")
public CommonResult<String> inOutEmptyBox(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [空箱初始化--出入空箱] 接口被请求, 请求参数-{}", param);
//参数校验
if(StringUtils.isEmpty(param.getString("inOut_type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) {
throw new BizCoreException(ResultCode.MISS_PARAMETER);
}
return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutEmptyBox(param));
}
@PostMapping("/inOutExceptionInstQuery")
@Log("缓存线出入箱异常指令查询")
@ApiOperation("缓存线出入箱异常指令查询")
public CommonResult<JSONArray> inOutExceptionInstQuery(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线出入箱异常指令查询] 接口被·请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutExceptionInstQuery(param));
}
@PostMapping("/inOutExceptionInstConfirm")
@Log("缓存线出入箱异常指令确认")
@ApiOperation("缓存线出入箱异常指令确认")
public CommonResult<String> inOutExceptionInstConfirm(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线出入箱异常指令确认] 接口被请求, 请求参数-{}", param);
//参数校验
if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("inOut_type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) {
throw new BizCoreException(ResultCode.MISS_PARAMETER);
}
return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutExceptionInstConfirm(param));
}
@PostMapping("/setfullBox")
@Log("设置满框")
@ApiOperation("设置满框")
public CommonResult<Void> setfullBox(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [设置满框] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.setfullBox(param));
}
@PostMapping("/setEmptyBox")
@Log("设置空框")
@ApiOperation("设置空框")
public CommonResult<Void> setEmptyBox(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [设置空框] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.setEmptyBox(param));
}
@PostMapping("/deleteBox")
@Log("删除箱子")
@ApiOperation("删除箱子")
public CommonResult<Void> deleteBox(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [设置空框] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.deleteBox(param));
}
@PostMapping("/agvInBoxExceptionQuery")
@Log("AGV入箱异常-查询")
@ApiOperation("AGV入箱异常-查询")
public CommonResult<JSONArray> agvInBoxExceptionQuery(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [AGV入箱异常-查询] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.agvInBoxExceptionQuery(param));
}
@PostMapping("/agvInBoxExceptionConfirm")
@Log("AGV入箱异常-确认")
@ApiOperation("AGV入箱异常-确认")
public CommonResult<Void> agvInBoxExceptionConfirm(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [AGV入箱异常-确认] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.agvInBoxExceptionConfirm(param));
}
@PostMapping("/agvOutBoxExceptionQuery")
@Log("AGV出箱异常-查询")
@ApiOperation("AGV出箱异常-查询")
public CommonResult<JSONArray> agvOutBoxExceptionQuery(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [AGV出箱异常-查询] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.agvOutBoxExceptionQuery(param));
}
@PostMapping("/agvOutBoxExceptionConfirm")
@Log("AGV出箱异常-确认")
@ApiOperation("AGV出箱异常-确认")
public CommonResult<Void> agvOutBoxExceptionConfirm(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [AGV出箱异常-确认] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.agvOutBoxExceptionConfirm(param));
}
@PostMapping("/setBlankPos")
@Log("设置缓存线货位为空位置")
@ApiOperation("设置缓存线货位为空位置")
public CommonResult<Void> setBlankPos(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [设置缓存线货位为空位置] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.setBlankPos(param));
}
@PostMapping("/cacheLineExcepOpt")
@Log("缓存线异常处理")
@ApiOperation("缓存线异常处理")
public CommonResult<String> cacheLineExcepOpt(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线异常处理] 接口被请求, 请求参数-{}", param);
//参数校验
if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("opt_type"))) {
throw new BizCoreException(ResultCode.MISS_PARAMETER);
}
return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineExcepOpt(param));
}
@PostMapping("/pourMaterial")
@Log("倒料操作")
@ApiOperation("倒料操作")
public CommonResult<Void> pourMaterial(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [倒料操作] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.pourMaterial(param));
}
@PostMapping("/getCacheLine")
@Log("缓存线下拉框")
@ApiOperation("缓存线下拉框")
public CommonResult<JSONArray> getCacheLine(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线盘点-缓存线下拉框] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.getCacheLine(param));
}
@PostMapping("/getProductArea")
@Log("获取生产区域下拉框")
@ApiOperation("获取生产区域下拉框")
public CommonResult<JSONArray> getProductArea() {
return RestBusinessTemplate.execute(cacheLineHandService::getProductArea);
}
@PostMapping("/getCacheLineMaterialInfo")
@Log("缓存线物料信息盘点")
@ApiOperation("缓存线物料信息盘点")
public CommonResult<JSONArray> getCacheLineMaterialInfo(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [缓存线盘点-缓存线物料信息盘点] 接口被请求, 请求参数-{}", param);
return RestBusinessTemplate.execute(() -> cacheLineHandService.getCacheLineMaterialInfo(param));
}
}

View File

@@ -18,8 +18,9 @@ public interface CacheLineHandService{
/**
* 下拉框列表查询
*
* @Param: form 查询条件
* @return: 下拉框列表
* @return 下拉框列表
* @Param form 查询条件
* @Param type 下拉框类型
* @author gbx
* @date 2023/3/22
*/
@@ -35,6 +36,16 @@ public interface CacheLineHandService{
*/
List<MaterialDto> materialQuery(String param);
/**
* 物料模糊查询
*
* @Param: param 查询条件
* @return: 物料列表
* @author gbx
* @date 2023/3/25
*/
JSONArray queryMaterial(String param);
/**
* 规格下拉框查询
*
@@ -75,6 +86,53 @@ public interface CacheLineHandService{
*/
JSONArray instStatusQuery(String param);
/**
* 任务分页查询
*
* @return 分页列表
* @Param form 任务参数
* @author gbx
* @date 2023/3/23
*/
Map<String,Object> instPageQuery(Map<String,String> param, Pageable page);
/**
* 缓存线位置关系同步
*
* @author gbx
* @date 2023/3/24
*/
void cacheLineMaterSync(String cachelineCode);
/**
* 缓存线料箱条码查询料箱信息
*
* @param param 请求参数
* @return 返回结果
* @author gbx
* @date 2023/3/24
*/
JSONArray cacheLineMaterInfoQuery(JSONObject param);
/**
* 缓存线出入箱异常指令查询
*
* @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码
* @return 返回结果集
* @author gbx
* @date 2023/3/24
*/
JSONArray inOutExceptionInstQuery(JSONObject param);
/**
* 缓存线出入箱异常指令确认
*
* @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码
* @author gbx
* @date 2023/3/24
*/
String inOutExceptionInstConfirm(JSONObject param);
/**
* 任务操作
*
@@ -83,192 +141,148 @@ public interface CacheLineHandService{
* @author gbx
* @date 2023/3/23
*/
void instOperation(JSONObject param);
String instOperation(JSONObject param);
/**
* 任务分页查询
*
* @Param: form 任务参数
* @return: 分页列表
* @author gbx
* @date 2023/3/23
*/
Map<String,Object> instPageQuery(Map<String,String> param, Pageable page);
/**
* 缓存线盘点
* 缓存线出箱异常-确认
*
* @param param 查询参数
* @return String 处理结果
* @author gbx
* @date 2023/3/24
*/
Object cacheLineMaterCheck();
/**
* 缓存线料箱条码查询料箱信息
*
* @param param
* @return
* @author gbx
* @date 2023/3/24
*/
Object cachelineMaterInfoQuery(JSONObject param);
String cacheLineOutBoxExceptionConfirm(JSONObject param);
/**
* 空箱初始化--出入空箱
*
* @param param 查询参数 inOut_type:1 入空箱 2 出空箱 vehicle_code:载具编码
* @return
* @author gbx
* @date 2023/3/24
*/
Object inOutEmptyBox(JSONObject param);
String inOutEmptyBox(JSONObject param);
/**
* 缓存线出入箱异常指令查询
* 设置满框
*
* @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码
* @return
* @param param 查询参数
* @author gbx
* @date 2023/3/24
*/
Object inOutExceptionInstQuery(JSONObject param);
/**
* 缓存线出入箱异常指令确认
*
* @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码
* @return
* @author gbx
* @date 2023/3/24
*/
Object inOutExceptionInstConfirm(JSONObject param);
/**
* 设置满匡
*
* @param param
* @return
* @author gbx
* @date 2023/3/24
*/
Object setfullBox(JSONObject param);
void setfullBox(JSONObject param);
/**
* 设置空框
*
* @param param
* @return
* @param param 查询参数
* @author gbx
* @date 2023/3/24
*/
Object setEmptyBox(JSONObject param);
void setEmptyBox(JSONObject param);
/**
* AGV入箱异常-查询
*
* @param param
* @return
* @param param 查询参数
* @return 返回结果集
* @author gbx
* @date 2023/3/24
*/
Object agvInBoxExceptionQuery(JSONObject param);
JSONArray agvInBoxExceptionQuery(JSONObject param);
/**
* AGV入箱异常-确认
*
* @param param
* @return
* @param param 查询参数
* @author gbx
* @date 2023/3/24
*/
Object agvInBoxExceptionConfirm(JSONObject param);
void agvInBoxExceptionConfirm(JSONObject param);
/**
* AGV出箱异常-查询
*
* @param param
* @return
* @param param 查询参数
* @return 返回结果集
* @author gbx
* @date 2023/3/24
*/
Object agvOutBoxExceptionQuery(JSONObject param);
JSONArray agvOutBoxExceptionQuery(JSONObject param);
/**
* AGV出箱异常-确认
*
* @param param
* @return
* @param param 查询参数
* @author gbx
* @date 2023/3/24
*/
Object agvOutBoxExceptionConfirm(JSONObject param);
/**
* 缓存线出箱异常-查询
*
* @param param
* @return
* @author gbx
* @date 2023/3/24
*/
Object cacheLineOutBoxExceptionQuery(String account_uuid, JSONObject param);
/**
* 缓存线出箱异常-确认
*
* @param param
* @return
* @author gbx
* @date 2023/3/24
*/
Object cacheLineOutBoxExceptionConfirm(
String account_uuid, JSONObject param);
void agvOutBoxExceptionConfirm(JSONObject param);
/**
* 设置缓存线货位为空位置
*
* @param param
* @return
* @param param 查询参数
* @author gbx
* @date 2023/3/24
*/
Object setBlankPos(JSONObject param);
void setBlankPos(JSONObject param);
/**
* @param param
* @return
* 缓存线出入箱异常-查询
*
* @param param 查询参数
* @return 返回结果集
* @author gbx
* @date 2023/3/24
*/
Object cacheLineOutBoxExceptionQuery(
JSONObject param);
/**
* @param param
* @return
* @author gbx
* @date 2023/3/24
*/
Object cacheLineOutBoxExceptionConfirm(
JSONObject param);
JSONArray cacheLineOutBoxExceptionQuery(JSONObject param);
/**
* 缓存线异常处理
*
* @param param
* @return
* @param param 查询参数
* @return String 处理结果
* @author gbx
* @date 2023/3/24
*/
Object cacheLineExcepOpt(JSONObject param);
String cacheLineExcepOpt(JSONObject param);
/**
* 倒料操作
*
* @param param
* @return
* @param param 查询参数
* @author gbx
* @date 2023/3/24
*/
Object pourMaterial(JSONObject param);
void pourMaterial(JSONObject param);
/**
* 缓存线下拉框
*
* @param param
* @return
*/
JSONArray getCacheLine(JSONObject param);
/**
* 缓存线物料信息盘点
*
* @param param
* @return
*/
JSONArray getCacheLineMaterialInfo(JSONObject param);
/**
* 获取生产区域下拉框
*
* @return
*/
JSONArray getProductArea();
/**
* 删除箱子
*
* @param param
*/
void deleteBox(JSONObject param);
}

View File

@@ -15,6 +15,16 @@
#################################################
输入.flag TYPEAS s_string
输入.condition TYPEAS s_string
输入.cacheLine_code TYPEAS s_string
输入.product_area TYPEAS s_string
输入.status TYPEAS s_string
输入.inst_num TYPEAS s_string
输入.start_point TYPEAS s_string
输入.end_point TYPEAS s_string
输入.start_date TYPEAS s_string
输入.end_date TYPEAS s_string
输入.task_id TYPEAS s_string
[临时表]
@@ -49,7 +59,7 @@
WHERE
is_delete = '0'
OPTION 输入.condition <> ""
material_spec LIKE CONCAT ( '%', 输入.condition, '%' )
material_spec LIKE CONCAT ('%', 输入.condition, '%')
ENDOPTION
GROUP BY material_spec
ENDSELECT
@@ -59,7 +69,7 @@
IF 输入.flag = "2"
QUERY
SELECT
workprocedure_id value,
workprocedure_id `value`,
workprocedure_name text,
workprocedure_code
FROM
@@ -67,8 +77,8 @@
WHERE
is_used = '1'
OPTION 输入.condition <> ""
workprocedure_code LIKE CONCAT ( '%', 输入.condition, '%' )
OR workprocedure_name LIKE CONCAT ( '%', 输入.condition, '%' )
workprocedure_code LIKE CONCAT ('%', 输入.condition, '%')
OR workprocedure_name LIKE CONCAT ('%', 输入.condition, '%')
ENDOPTION
ENDSELECT
ENDQUERY
@@ -77,14 +87,14 @@
IF 输入.flag = "3"
QUERY
SELECT
dict_id value,
dict_id `value`,
label text
FROM
sys_dict
WHERE
CODE = 'task_status'
OPTION 输入.condition <> ""
label LIKE CONCAT ( '%', 输入.condition, '%' )
label LIKE CONCAT ('%', 输入.condition, '%')
ENDOPTION
ORDER BY dict_sort
ENDSELECT
@@ -94,14 +104,14 @@
IF 输入.flag = "4"
QUERY
SELECT
device_code value,
device_code `value`,
device_name text
FROM
`pdm_bi_device`
WHERE
is_delete = '0'
OPTION 输入.condition <> ""
device_name LIKE CONCAT ( '%', 输入.condition, '%' )
device_name LIKE CONCAT ('%', 输入.condition, '%')
ENDOPTION
ORDER BY device_code DESC
ENDSELECT
@@ -111,22 +121,159 @@
IF 输入.flag = "5"
QUERY
SELECT
mb.material_id,
mb.material_code,
mb.material_spec,
mb.material_name,
class.class_name
MB.MATERIAL_ID,
MB.MATERIAL_CODE,
MB.MATERIAL_SPEC,
MB.MATERIAL_NAME,
CLASS.CLASS_NAME
FROM
md_me_materialbase mb
LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id
MD_ME_MATERIALBASE MB
LEFT JOIN MD_PB_CLASSSTANDARD CLASS ON CLASS.CLASS_ID = MB.MATERIAL_TYPE_ID
WHERE
mb.is_delete = '0'
MB.IS_DELETE = '0'
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "6"
QUERY
SELECT
mb.material_id,
mb.material_code,
mb.material_spec,
mb.material_name,
class.class_name
FROM
md_me_materialbase mb
LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id
WHERE
mb.is_delete = '0'
ORDER BY
mb.material_id desc
LIMIT 1000
OPTION 输入.condition <> ""
mb.material_name LIKE CONCAT ('%', 输入.condition, '%')
OR mb.material_code LIKE CONCAT ('%', 输入.condition, '%')
OR mb.material_spec LIKE CONCAT ('%', 输入.condition, '%')
OR class.class_name LIKE CONCAT ('%', 输入.condition, '%')
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "7"
QUERY
SELECT
p.point_code as value,
p.point_name as text
FROM
sch_base_point p
WHERE
p.region_code = 'A1_HCX'
OPTION 输入.product_area <> ""
p.product_area = 输入.product_area
ENDOPTION
ORDER BY
p.point_code
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "8"
QUERY
SELECT
sch_cacheline_position.cacheLine_code as wcsdevice_code,
sch_cacheline_position.position_code,
sch_cacheline_position.position_name,
sch_cacheline_position.vehicle_code,
sch_cacheline_position.layer_num,
sch_cacheline_position.positionorder_no as seat_order_num,
sch_cacheline_vehilematerial.workprocedure_code,
sch_cacheline_vehilematerial.workprocedure_name,
sch_cacheline_vehilematerial.material_uuid,
sch_cacheline_vehilematerial.material_code,
sch_cacheline_vehilematerial.material_name,
sch_cacheline_vehilematerial.material_spec,
sch_cacheline_vehilematerial.quantity,
sch_cacheline_vehilematerial.weight,
IF(length(sch_cacheline_position.vehicle_code) > 0, IFNULL(sch_cacheline_vehilematerial.vehicle_status, 4), 5) AS vehicle_status
FROM
sch_cacheline_position
LEFT JOIN sch_cacheline_vehilematerial ON sch_cacheline_position.vehicle_code = sch_cacheline_vehilematerial.vehicle_code
WHERE
1 = 1
OPTION 输入.product_area <> ""
sch_cacheline_position.product_area = 输入.product_area
ENDOPTION
OPTION 输入.cacheLine_code <> ""
sch_cacheline_position.cacheLine_code = 输入.cacheLine_code
ENDOPTION
ORDER BY
sch_cacheline_position.cacheLine_code
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "9"
QUERY
SELECT
d.value,
d.label as text
FROM
sys_dict d
WHERE
code = 'product_area'
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "10"
PAGEQUERY
SELECT
task.task_id as instruct_uuid,
task.task_code as instructoperate_num,
task.task_name as mes_no,
task.vehicle_code as invehicle_code,
task.vehicle_code2 as outvehicle_code,
task.create_time,
dict.label as status_name,
mater.material_code as processmaterial_code,
point1.point_name as startpoint_code,
point2.point_name as nextpoint_code,
point3.point_name as nextpoint_code2
FROM
sch_base_task task
left join sch_base_point point1 on task.point_code1 = point1.point_code
left join sch_base_point point2 on task.point_code2 = point2.point_code
left join sch_base_point point3 on task.point_code3 = point3.point_code
left join md_me_materialbase mater on task.material_id = mater.material_id
left join sys_dict dict on dict.`value` = task.task_status
and dict.`code` = 'task_status'
WHERE task.is_delete = '0'
OPTION 输入.status <> ""
find_in_set(task.task_status,输入.status)
ENDOPTION
OPTION 输入.inst_num <> ""
(task.task_code like CONCAT ('%', 输入.inst_num, '%'))
ENDOPTION
OPTION 输入.vehicle_code <> ""
(task.vehicle_code like CONCAT ('%', 输入.vehicle_code, '%'))
ENDOPTION
OPTION 输入.start_point <> ""
(task.point_code1 like CONCAT ('%', 输入.start_point, '%'))
ENDOPTION
OPTION 输入.task_id <> ""
(task.task_id = 输入.task_id )
ENDOPTION
OPTION 输入.end_point <> ""
(task.point_code2 like CONCAT ('%', 输入.end_point, '%'))
ENDOPTION
OPTION 输入.start_date <> ""
task.create_time >= 输入.start_date
ENDOPTION
OPTION 输入.end_date <> ""
task.create_time <= 输入.end_date
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF

View File

@@ -16,6 +16,8 @@ import lombok.extern.slf4j.Slf4j;
*/
@Slf4j
public abstract class AbstractAcsTask {
private static final String OPT_NAME = "acs回调#";
public abstract void updateTaskStatus(JSONObject taskObj,String status);

View File

@@ -1,5 +1,6 @@
package org.nl.wms.sch.rest;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -79,5 +80,12 @@ public class RegionController {
return new ResponseEntity<>(regionService.getPointTypeSelectByCode(region_code), HttpStatus.CREATED);
}
@PostMapping("/getRegionSelect")
@Log("获取区域下拉框")
@ApiOperation("获取区域下拉框")
public ResponseEntity<Object> getRegionSelect(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(regionService.getRegionSelect(whereJson), HttpStatus.CREATED);
}
}

View File

@@ -1,6 +1,7 @@
package org.nl.wms.sch.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.sch.service.dto.RegionDto;
import org.springframework.data.domain.Pageable;
@@ -74,4 +75,11 @@ public interface RegionService {
* @return
*/
JSONArray getPointTypeSelectByCode(String region_code);
/**
* 获取区域类型下拉框
* @param
* @return JSONObject
*/
JSONObject getRegionSelect(JSONObject whereJson);
}

View File

@@ -245,7 +245,7 @@ public class PointServiceImpl implements PointService {
@Override
public JSONArray getPoint(Map wherJson) {
String area_type = (String) wherJson.get("area_type");
JSONArray point_rows = WQLObject.getWQLObject("sch_base_point").query("area_type IN (" + area_type + ") AND is_used = '1' AND is_delete = '0' order by point_code").getResultJSONArray(0);
JSONArray point_rows = WQLObject.getWQLObject("sch_base_point").query("region_code = '"+area_type+"' and is_used = '1' and is_delete = '0'").getResultJSONArray(0);
return point_rows;
}

View File

@@ -166,4 +166,38 @@ public class RegionServiceImpl implements RegionService {
return res;
}
@Override
public JSONObject getRegionSelect(JSONObject whereJson) {
String stor_id = whereJson.getString("stor_id");
JSONArray prodArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value",stor_id).process().getResultJSONArray(0);
JSONArray new_ja = new JSONArray();
for (int i = 0; i < prodArr.size(); i++) {
JSONObject json = prodArr.getJSONObject(i);
JSONObject jsonMst = new JSONObject();
jsonMst.put("value",json.getString("value"));
jsonMst.put("label",json.getString("label"));
// 查询子类
JSONArray DtlArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "3").addParam("product_area", json.getString("value")).process().getResultJSONArray(0);
if (DtlArr.size() > 0) {
JSONArray sect_ja = new JSONArray();
for (int j = 0; j < DtlArr.size(); j++) {
JSONObject json2 = DtlArr.getJSONObject(j);
JSONObject sect_cas = new JSONObject();
sect_cas.put("value", json2.getString("region_code"));
sect_cas.put("label", json2.getString("region_name"));
sect_ja.add(sect_cas);
}
jsonMst.put("children", sect_ja);
}
new_ja.add(jsonMst);
}
JSONObject jo = new JSONObject();
jo.put("content", new_ja);
return jo;
}
}

View File

@@ -17,9 +17,13 @@ import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.basedata.master.service.ClassstandardService;
import org.nl.wms.basedata.master.service.dto.ClassstandardDto;
import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.nl.wms.ext.acs.service.impl.AcsToWmsServiceImpl;
import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.TaskService;
import org.nl.wms.sch.service.dto.TaskDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -36,11 +40,13 @@ import java.util.Map;
* @date 2021-08-19
**/
@Service
@RequiredArgsConstructor
@Slf4j
public class TaskServiceImpl implements TaskService {
private final ClassstandardService classstandardService;
@Autowired
private ClassstandardService classstandardService;
@Autowired
private AcsToWmsService acsToWmsService;
@Override
public Map<String, Object> queryAll(Map form, Pageable page) {
@@ -176,55 +182,35 @@ public class TaskServiceImpl implements TaskService {
@Override
public void operation(Map<String, Object> map) {
WmsToAcsServiceImpl wms = new WmsToAcsServiceImpl();
String task_id = MapUtil.getStr(map, "task_id");
String method_name = MapUtil.getStr(map, "method_name");
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
if (taskObj.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) throw new BadRequestException("任务已完成!");
// 任务处理类
String processing_class = taskObj.getString("handle_class");
String message = "";
// 根据任务类型获取对应的任务操作类
try {
Class<?> clz = Class.forName(processing_class);
Object obj = clz.newInstance();
// 调用每个任务类的method_name()强制结束方法
Method m;
JSONObject result;
if (method_name.equals("immediateNotifyAcs")) { // 立即下发不需要参数
m = obj.getClass().getMethod(method_name);
result = (JSONObject) m.invoke(obj);
} else {
m = obj.getClass().getMethod(method_name, String.class);
result = (JSONObject) m.invoke(obj, task_id);
}
if (ObjectUtil.isEmpty(result)) return;
JSONArray arr = result.getJSONArray("errArr");
WQLObject wo = WQLObject.getWQLObject("sch_base_task");
if (ObjectUtil.isNotEmpty(arr)) {
for (int i = 0; i < arr.size(); i++) {
JSONObject json = arr.getJSONObject(i);
JSONObject param = new JSONObject();
param.put("task_id", json.getString("task_id"));
param.put("remark", json.getString("message"));
wo.update(param);
}
throw new BadRequestException("任务操作失败!");
} else {
JSONObject param = new JSONObject();
param.put("task_id", task_id);
param.put("remark", "操作成功");
wo.update(param);
}
} catch (InvocationTargetException e) {
if (ObjectUtil.isNull(e.getTargetException().getMessage())) {
message = e.getTargetException().toString();
} else {
message = e.getTargetException().getMessage();
}
throw new BadRequestException(message);
} catch (Exception e) {
e.printStackTrace();
throw new BadRequestException("任务操作失败!");
switch (method_name) { // forceFinish, cancel
case "immediateNotifyAcs":
JSONArray array = new JSONArray();
array.add(taskObj);
wms.issueTaskToAcs(array);
break;
case "forceFinish":
JSONArray finish = new JSONArray();
JSONObject res = new JSONObject();
res.put("task_id", task_id);
res.put("task_status", "2");
finish.add(res);
acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(finish));
break;
case "cancel":
JSONArray cancel = new JSONArray();
JSONObject res2 = new JSONObject();
res2.put("task_id", task_id);
res2.put("task_status", "1");
cancel.add(res2);
acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel));
break;
default: break;
}
}

View File

@@ -14,7 +14,7 @@ import org.nl.modules.system.util.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.HashMap;
@@ -24,6 +24,7 @@ import java.util.Map;
* 专机任务
*/
@Slf4j
@Service
public class SpeMachineryTask extends AbstractAcsTask {
private final Map<String,SpeStatusHandler > SpeHandles= new HashMap<>();
private static String OPT_NAME = "ACS回调# ";
@@ -52,8 +53,8 @@ public class SpeMachineryTask extends AbstractAcsTask {
@Override
public String createTask(JSONObject form) {
String start_point_code = form.getString("start_point_code");
String next_point_code = form.getString("next_point_code");
String start_point_code = form.getString("point_code1");
String next_point_code = form.getString("point_code2");
String vehicle_code = form.getString("vehicle_code");
String type = form.getString("type");
if (StrUtil.isEmpty(start_point_code)) {
@@ -67,7 +68,6 @@ public class SpeMachineryTask extends AbstractAcsTask {
}
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = new JSONObject();
task.put("taskdtl_id", taskdtl_id);
task.put("task_id", taskdtl_id);
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("task_type", type);
@@ -116,8 +116,6 @@ public class SpeMachineryTask extends AbstractAcsTask {
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
break;
case STATUS_RUNDING:
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
//到专机:更新设备上料位物料数量
@@ -146,8 +144,6 @@ public class SpeMachineryTask extends AbstractAcsTask {
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
break;
case STATUS_RUNDING:
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:

View File

@@ -38,13 +38,14 @@ public class TaskScheduleService {
private ReentrantLock lock = new ReentrantLock();
private final WmsToAcsService wmsToAcsService;
@Scheduled(cron = "0/10 * * * * ?")
@Scheduled(cron = "0/30 * * * * ?")
public void taskPublish(){
boolean islock = lock.tryLock();
try {
if (islock){
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
JSONArray all = taskTable.query("task_type < '" + StatusEnum.TASK_PUBLISH + "'").getResultJSONArray(0);
//查询所有自动下发的任务
JSONArray all = taskTable.query("is_auto_issue = '1' and task_type < '" + StatusEnum.TASK_PUBLISH + "'").getResultJSONArray(0);
//分区域不同区域调用不同acs接口
log.info("TaskScheduleService#taskPublish all_task:{}",all.size());
Map<String, List<Object>> areaCollent = all.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("product_area")));
@@ -65,8 +66,10 @@ public class TaskScheduleService {
String taskGroupId = IdUtil.getStringId();
JSONObject task = (JSONObject) o;
String taskId = task.getString("task_id");
task.put("is_send","1");
if (taskGroupMap.get(taskId) != null){
task.put("task_group_id",taskGroupMap.get(taskId));
task.put("is_send","0");
continue;
}
String start = task.getString("point_code1");
@@ -96,10 +99,15 @@ public class TaskScheduleService {
String waitingTaskId = waitingTask.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(","));
String MergeId = Merge.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(","));
log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId);
//下发任务:一次暂时下发十条同一个区域任务不超过10条
JSONArray form = new JSONArray();
Merge.addAll(notMerge);
JSONArray jsonArray = new JSONArray(Merge);
//批量更新任务状态is_send,task_group_id
for (Object task : Merge) {
JSONObject task1 = (JSONObject) task;
task1.put("task_type",StatusEnum.TASK_PUBLISH.getCode());
taskTable.update(task1,"task_id = '"+task1.getString("task_id")+"'");
}
//缓存线任务待确认是否生成多个
wmsToAcsService.issueTaskToAcs(jsonArray);
}
}

View File

@@ -16,6 +16,7 @@
输入.flag TYPEAS s_string
输入.region_code TYPEAS s_string
输入.product_area TYPEAS s_string
输入.value TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
@@ -57,3 +58,35 @@
ENDSELECT
ENDPAGEQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
*
FROM
sys_dict
WHERE
code = 'product_area'
OPTION 输入.value <> ""
value = 输入.value
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
*
FROM
sch_base_region
WHERE
1=1
OPTION 输入.product_area <> ""
product_area = 输入.product_area
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -61,7 +61,7 @@
FROM
sch_base_task task
LEFT JOIN md_pb_classstandard md ON task.task_type = md.class_code
LEFT JOIN sys_dict_detail dict ON dict.`value` = task.task_status AND dict.`name` = 'task_status'
LEFT JOIN SYS_DICT DICT ON DICT.`VALUE` = TASK.TASK_STATUS AND DICT.`CODE` = 'TASK_STATUS'
LEFT JOIN SCH_BASE_Region reg1 ON reg1.region_code = (
SELECT p1.region_code FROM SCH_BASE_Point p1 WHERE p1.point_code = task.point_code1
)

View File

@@ -0,0 +1,204 @@
package org.nl.wms.st.in.rest;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.anno.Log;
import org.nl.wms.st.in.service.ProductInService;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequiredArgsConstructor
@Api(tags = "成品入库")
@RequestMapping("/api/in/productIn")
@Slf4j
public class ProductInController {
private final ProductInService productInService;
@GetMapping
@Log("查询入库单据")
@ApiOperation("查询入库单据")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(productInService.pageQuery(whereJson, page), HttpStatus.OK);
}
@Log("删除出入库单")
@ApiOperation("删除出入库单")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
productInService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/getBillDtl")
@Log("查询入库单来源")
@ApiOperation("查询入库单来源")
public ResponseEntity<Object> getBillDtl(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(productInService.getBillDtl(whereJson, page), HttpStatus.OK);
}
@PostMapping()
@Log("新增入库单")
@ApiOperation("新增入库单")
public ResponseEntity<Object> insertDtl(@RequestBody JSONObject whereJson) {
productInService.insertDtl(whereJson);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改入库单")
@ApiOperation("修改入库单")
public ResponseEntity<Object> update(@RequestBody JSONObject whereJson) {
productInService.update(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/queryStor")
@Log("查询仓库")
@ApiOperation("查询仓库")
public ResponseEntity<Object> queryStor() {
return new ResponseEntity<>(productInService.queryStor(), HttpStatus.OK);
}
@PostMapping("/getIODtl")
@Log("查询出入库单明细")
@ApiOperation("查询出入库单明细")
public ResponseEntity<Object> getIODtl(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(productInService.getIODtl(whereJson), HttpStatus.OK);
}
@PostMapping("/commit")
@Log("出入单提交")
@ApiOperation("出入单提交")
public ResponseEntity<Object> commit(@RequestBody Map whereJson) {
productInService.commit(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/getDisDtl")
@Log("查询入库分配明细")
@ApiOperation("查询入库分配明细")
public ResponseEntity<Object> getDisDtl(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(productInService.getDisDtl(whereJson), HttpStatus.OK);
}
@PostMapping("/divStruct")
@Log("分配货位")
@ApiOperation("分配货位")
public ResponseEntity<Object> divStruct(@RequestBody Map whereJson) {
productInService.divStruct(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/unDivStruct")
@Log("取消分配货位")
@ApiOperation("取消分配货位")
public ResponseEntity<Object> unDivStruct(@RequestBody Map whereJson) {
productInService.unDivStruct(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/divPoint")
@Log("设置起点")
@ApiOperation("设置起点")
public ResponseEntity<Object> divPoint(@RequestBody Map whereJson) {
productInService.divPoint(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/queryTask")
@Log("查询任务")
@ApiOperation("查询任务")
public ResponseEntity<Object> queryTask(@RequestBody Map whereJson) {
return new ResponseEntity<>(productInService.queryTask(whereJson), HttpStatus.OK);
}
@PostMapping("/delDis")
@Log("删除分配")
@ApiOperation("删除分配")
public ResponseEntity<Object> delDis(@RequestBody JSONObject whereJson) {
productInService.delDis(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/queryBoxMater")
@Log("查询箱内子卷")
@ApiOperation("查询箱内子卷")
public ResponseEntity<Object> queryBoxMater(@RequestBody JSONArray whereJson) {
return new ResponseEntity<>(productInService.queryBoxMater(whereJson), HttpStatus.OK);
}
@PostMapping("/updateTask")
@Log("变更任务")
@ApiOperation("变更任务")
public ResponseEntity<Object> updateTask(@RequestBody Map whereJson) {
productInService.updateTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/delTask")
@Log("删除任务")
@ApiOperation("删除任务")
public ResponseEntity<Object> delTask(@RequestBody Map whereJson) {
productInService.delTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/reIssueTask")
@Log("下发")
@ApiOperation("下发")
public ResponseEntity<Object> reIssueTask(@RequestBody Map whereJson) {
productInService.reIssueTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/confirmTask")
@Log("完成任务")
@ApiOperation("完成任务")
public ResponseEntity<Object> confirmTask(@RequestBody Map whereJson) {
productInService.confirmTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/cancelTask")
@Log("取消完成任务")
@ApiOperation("取消完成任务")
public ResponseEntity<Object> cancelTask(@RequestBody Map whereJson) {
productInService.cancelTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/confirm")
@Log("完成单据")
@ApiOperation("完成单据")
public ResponseEntity<Object> confirm(@RequestBody Map whereJson) {
productInService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/backConfirm")
@Log("完成入库负单")
@ApiOperation("完成入库负单")
public ResponseEntity<Object> backConfirm(@RequestBody Map whereJson) {
productInService.backConfirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/autoDis")
@Log("自动分配")
@ApiOperation("自动分配")
public ResponseEntity<Object> autoDis(@RequestBody JSONObject whereJson) {
productInService.autoDis(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}

View File

@@ -0,0 +1,91 @@
package org.nl.wms.st.in.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.data.domain.Pageable;
import java.util.Map;
public interface ProductInService {
/**
* 查询数据分页
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> pageQuery(Map whereJson, Pageable page);
Map<String, Object> getBillDtl(Map whereJson,Pageable page);
/**
* 新增单据
* @param whereJson /
* @return iostorinv_id
*/
String insertDtl (JSONObject whereJson);
/**
* 删除单据
* @param ids /
*/
void deleteAll(Long[] ids);
void delDis(JSONObject whereJson);
JSONArray queryBoxMater(JSONArray rows);
/**
* 修改单据
* @param whereJson /
*/
void update(JSONObject whereJson);
void commit(Map whereJson);
/**
* 查询出入库单明细
* @param whereJson /
* @return JSONArray
*/
JSONArray getIODtl(JSONObject whereJson);
void divStruct(Map whereJson);
void unDivStruct(Map whereJson);
void divPoint(Map whereJson);
void updateTask(Map whereJson);
void delTask(Map whereJson);
void reIssueTask(Map whereJson);
void confirmTask(Map whereJson);
void cancelTask(Map whereJson);
void confirm(Map whereJson);
void backConfirm(Map whereJson);
/**
* 查询入库分配明细
* @param whereJson /
* @return JSONArray
*/
JSONArray getDisDtl(JSONObject whereJson);
JSONArray queryTask(Map whereJson);
JSONObject autoDis(JSONObject whereJson);
JSONObject autoDisMove(JSONObject whereJson);
/**
* 查询仓库
* @return JSONArray
*/
JSONArray queryStor();
}

View File

@@ -0,0 +1,134 @@
[交易说明]
交易名: 成品入库分页查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.stor_id TYPEAS s_string
输入.begin_time TYPEAS s_string
输入.end_time TYPEAS s_string
输入.bill_status TYPEAS s_string
输入.bill_type TYPEAS s_string
输入.bill_code TYPEAS s_string
输入.iostorinvdtl_id TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
PAGEQUERY
SELECT
*
FROM
ST_IVT_IOStorInv
WHERE
io_type = '0'
AND is_delete = '0'
OPTION 输入.stor_id <> ""
stor_id = 输入.stor_id
ENDOPTION
OPTION 输入.begin_time <> ""
input_time <= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
input_time >= 输入.end_time
ENDOPTION
OPTION 输入.bill_status <> ""
bill_status = 输入.bill_status
ENDOPTION
OPTION 输入.bill_type <> ""
bill_type = 输入.bill_type
ENDOPTION
OPTION 输入.bill_code <> ""
bill_code LIKE 输入.bill_code
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
dtl.*,
mater.material_code,
mater.material_name,
mater.material_spec
FROM
ST_IVT_IOStorInvDtl dtl
LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dtl.iostorinv_id
LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id
WHERE
mst.io_type = '0'
AND mst.is_delete = '0'
OPTION 输入.bill_code <> ""
mst.bill_code = 输入.bill_code
ENDOPTION
order by dtl.seq_no ASC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
dis.*,
mater.material_code,
mater.material_name,
mater.material_spec,
point.point_code
FROM
ST_IVT_IOStorInvDis dis
LEFT JOIN sch_base_point point ON point.point_id = dis.point_id
LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id
WHERE
IFNULL(dis.task_id,'') = ''
OPTION 输入.iostorinvdtl_id <> ""
dis.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
order by dis.seq_no ASC
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -73,6 +73,16 @@ spring:
password: ${REDIS_PWD:}
#连接超时时间
timeout: 5000
redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置
login:
# 登录缓存

View File

@@ -0,0 +1,201 @@
server:
port: 8011
#配置数据源
spring:
data:
elasticsearch:
repositories:
enabled: true
client:
reactive:
#endpoints: 172.31.185.110:9200,172.31.154.9:9200 #内网
# endpoints: 47.96.133.178:8200 #外网
endpoints: http://47.96.133.178:8200 #外网
elasticsearch:
rest:
#uris: 172.31.185.110:9200,172.31.154.9:9200 #内网
# uris: 47.96.133.178:8200 #外网
uris: http://47.96.133.178:8200 #外网
username: elastic
password: 123456
datasource:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
#url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
username: ${DB_USER:shenhua}
#password: ${DB_PWD:P@ssw0rd}
#password: ${DB_PWD:root}
#password: ${DB_PWD:Root.123456}
password: ${DB_PWD:123456789}
# 初始连接数
initial-size: 5
# 最小连接数
min-idle: 15
# 最大连接数
max-active: 30
# 是否自动回收超时连接
remove-abandoned: true
# 超时时间(以秒数为单位)
remove-abandoned-timeout: 180
# 获取连接超时时间
max-wait: 3000
# 连接有效性检测时间
time-between-eviction-runs-millis: 60000
# 连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
# 连接在池中最大生存的时间
max-evictable-idle-time-millis: 900000
# 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除
test-while-idle: true
# 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个
test-on-borrow: true
# 是否在归还到池中前进行检验
test-on-return: false
# 检测连接是否有效
validation-query: select 1
# 配置监控统计
webStatFilter:
enabled: true
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: false
filters:
DruidFilter,stat
redis:
#数据库索引
database: ${REDIS_DB:1}
#host: ${REDIS_HOST:127.0.0.1}
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
password: ${REDIS_PWD:}
#连接超时时间
timeout: 5000
redisson:
config: |
threads: 4
nettyThreads: 4
singleServerConfig:
connectionMinimumIdleSize: 8
connectionPoolSize: 8
address: redis://127.0.0.1:6379
idleConnectionTimeout: 10000
timeout: 3000
# 登录相关配置
login:
# 登录缓存
cache-enable: true
# 是否限制单用户登录
single-login: false
# 验证码
login-code:
# 验证码类型配置 查看 LoginProperties 类
code-type: arithmetic
# 登录图形验证码有效时间/分钟
expiration: 2
# 验证码高度
width: 111
# 验证码宽度
heigth: 36
# 内容长度
length: 2
# 字体名称,为空则使用默认字体
font-name:
# 字体大小
font-size: 25
#jwt
jwt:
header: Authorization
# 令牌前缀
token-start-with: Bearer
# 必须使用最少88位的Base64对该令牌进行编码
base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
# 令牌过期时间 此处单位/毫秒 默认4小时可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
token-validity-in-seconds: 14400000
# 在线用户key
online-key: online-token-
# 验证码
code-key: code-key-
# token 续期检查时间范围默认30分钟单位毫秒在token即将过期的一段时间内用户操作了则给用户的token续期
detect: 1800000
# 续期时间范围默认1小时单位毫秒
renew: 3600000
#是否允许生成代码生产环境设置为false
generator:
enabled: true
#是否开启 swagger-ui
swagger:
enabled: true
# IP 本地解析
ip:
local-parsing: true
# 文件存储路径
file:
mac:
path: ~/file/
avatar: ~/avatar/
linux:
path: /home/eladmin/file/
avatar: /home/eladmin/avatar/
windows:
path: C:\eladmin\file\
avatar: C:\eladmin\avatar\
# 文件大小 /M
maxSize: 100
avatarMaxSize: 5
sa-token:
# token 名称 (同时也是cookie名称)
token-name: Authorization
# token 有效期单位s 默认30天, -1代表永不过期
timeout: 2592000
# token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# token风格
token-style: random-128
# 是否输出操作日志
is-log: false
jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq
# token 前缀
token-prefix:
cookie:
# 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com
domain:
#jetcache:
# defaultCacheType: LOCAL
# statIntervalMinutes: 15
# areaInCacheName: false
# hiddenPackages: com.yb
# local:
# default:
# type: caffeine
# limit: 100
# keyConvertor: fastjson
# expireAfterWriteInMillis: 60000
# remote:
# default:
# type: redis.lettuce
# keyConvertor: fastjson
# valueEncoder: kryo
# valueDecoder: kryo
# poolConfig:
# minIdle: 5
# maxIdle: 200
# maxTotal: 1000
# uri:
# - redis://127.0.0.1:6379
es:
index: mes_log

View File

@@ -43,7 +43,7 @@ rsa:
private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
logging:
file:
path: E:\logs\nlwms\
path: D:\logs\nlwms\
demo:
monitor:
server-url: https://www.demo-monitor.com