rev:数字孪生接口、贴标捆扎预警
This commit is contained in:
@@ -29,4 +29,11 @@ public class LmsToBigScreenController {
|
|||||||
return new ResponseEntity<>(LmsToBigScreenService.getDeviceInfo(jo), HttpStatus.OK);
|
return new ResponseEntity<>(LmsToBigScreenService.getDeviceInfo(jo), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/getStructInfo")
|
||||||
|
@Log("数字孪生请求LMS获取设备信息")
|
||||||
|
@ApiOperation("数字孪生请求LMS获取设备信息")
|
||||||
|
public ResponseEntity<Object> getStructInfo(@RequestBody JSONObject jo) {
|
||||||
|
return new ResponseEntity<>(LmsToBigScreenService.getStructInfo(jo), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package org.nl.wms.ext.szls.service;
|
package org.nl.wms.ext.szls.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
|
||||||
public interface LmsToBigScreenService {
|
public interface LmsToBigScreenService {
|
||||||
|
|
||||||
JSONObject getDeviceInfo(JSONObject jo);
|
JSONObject getDeviceInfo(JSONObject jo);
|
||||||
|
|
||||||
|
JSONArray getStructInfo(JSONObject jo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +1,90 @@
|
|||||||
package org.nl.wms.ext.szls.service.impl;
|
package org.nl.wms.ext.szls.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpRequest;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
import org.nl.modules.common.exception.BadRequestException;
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
|
import org.nl.modules.wql.WQL;
|
||||||
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
import org.nl.modules.wql.util.SpringContextHolder;
|
import org.nl.modules.wql.util.SpringContextHolder;
|
||||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||||
|
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||||
import org.nl.wms.ext.szls.service.LmsToBigScreenService;
|
import org.nl.wms.ext.szls.service.LmsToBigScreenService;
|
||||||
|
import org.nl.wms.sch.tasks.URLEnum;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class LmsToBigScreenServiceImpl implements LmsToBigScreenService {
|
public class LmsToBigScreenServiceImpl implements LmsToBigScreenService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private final WmsToAcsService wmsToAcsService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject getDeviceInfo(JSONObject jo) {
|
public JSONObject getDeviceInfo(JSONObject jo) {
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
for (URLEnum url : URLEnum.values()) {
|
||||||
|
String product_area = url.getProduct_area();
|
||||||
|
JSONArray rows = WQLObject.getWQLObject("em_bi_monitordevice").query("send_szls = '1' AND plant_code = '" + product_area + "'").getResultJSONArray(0);
|
||||||
|
JSONObject device_info = wmsToAcsService.getPointStatus(rows);
|
||||||
|
json.put(product_area, device_info.getJSONArray("data"));
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
@Override
|
||||||
|
public JSONArray getStructInfo(JSONObject jo) {
|
||||||
|
JSONArray rows = WQLObject.getWQLObject("st_ivt_structattr").query("sect_code = 'ZC01'").getResultJSONArray(0);
|
||||||
|
JSONArray data = new JSONArray();
|
||||||
|
for (int i = 0; i < rows.size(); i++) {
|
||||||
|
JSONObject row = rows.getJSONObject(i);
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
String struct_code = row.getString("struct_code");
|
||||||
|
json.put("struct_code", struct_code);
|
||||||
|
String storagevehicle_code = row.getString("storagevehicle_code");
|
||||||
|
if (StrUtil.isNotEmpty(storagevehicle_code)) {
|
||||||
|
json.put("storagevehicle_code", storagevehicle_code);
|
||||||
|
String struct_id = row.getString("struct_id");
|
||||||
|
JSONArray array = WQL
|
||||||
|
.getWO("QST_STRUCTATTR")
|
||||||
|
.addParamMap(MapOf.of("struct_id", struct_id, "flag", "1"))
|
||||||
|
.process()
|
||||||
|
.getResultJSONArray(0);
|
||||||
|
// 计算合计
|
||||||
|
JSONObject object = array.getJSONObject(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(object.getString("net_weight"))) {
|
||||||
|
BigDecimal container_weight = array.stream().map(info -> ((JSONObject) info).getBigDecimal("net_weight")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
json.put("container_weight", container_weight);
|
||||||
|
json.put("product_description", object.getString("product_description"));
|
||||||
|
json.put("sale_order_name", object.getString("sale_order_name"));
|
||||||
|
json.put("quanlity_in_box", object.getString("quanlity_in_box"));
|
||||||
|
json.put("box_weight", object.getString("box_weight"));
|
||||||
|
JSONArray detail = new JSONArray();
|
||||||
|
for (int j = 0; i < array.size(); i++) {
|
||||||
|
JSONObject dtl = array.getJSONObject(j);
|
||||||
|
String container_name = dtl.getString("container_name");
|
||||||
|
String net_weight = dtl.getString("net_weight");
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("container_name", container_name);
|
||||||
|
jsonObject.put("net_weight", net_weight);
|
||||||
|
detail.add(jsonObject);
|
||||||
|
}
|
||||||
|
json.put("detail", detail);
|
||||||
|
}
|
||||||
|
data.add(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,6 +129,11 @@ public class InServiceImpl implements InService {
|
|||||||
throw new BadRequestException("起点不能为空!");
|
throw new BadRequestException("起点不能为空!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSONObject task1 = WQLObject.getWQLObject("SCH_BASE_Task").query("(point_code2 = '" + point_code + "' OR point_code1 = '" + point_code + "' ) AND task_status < '07' AND is_delete = '0'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isNotEmpty(task1)) {
|
||||||
|
throw new BadRequestException("点位:" + point_code + "存在未完成的任务!");
|
||||||
|
}
|
||||||
|
|
||||||
//如果查询到给ACS下发一个输送线任务
|
//如果查询到给ACS下发一个输送线任务
|
||||||
JSONObject form = new JSONObject();
|
JSONObject form = new JSONObject();
|
||||||
form.put("point_code1", point_code);
|
form.put("point_code1", point_code);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import org.nl.modules.wql.WQL;
|
|||||||
import org.nl.modules.wql.core.bean.WQLObject;
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
import org.nl.modules.wql.core.content.HttpContext;
|
import org.nl.modules.wql.core.content.HttpContext;
|
||||||
import org.nl.modules.wql.util.SpringContextHolder;
|
import org.nl.modules.wql.util.SpringContextHolder;
|
||||||
|
import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl;
|
||||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||||
import org.nl.wms.pda.st.service.CoolInService;
|
import org.nl.wms.pda.st.service.CoolInService;
|
||||||
import org.nl.wms.pda.task.service.PdaTaskService;
|
import org.nl.wms.pda.task.service.PdaTaskService;
|
||||||
@@ -41,6 +42,13 @@ public class PdaTaskServiceImpl implements PdaTaskService {
|
|||||||
JSONObject map = new JSONObject();
|
JSONObject map = new JSONObject();
|
||||||
map.put("flag", "1");
|
map.put("flag", "1");
|
||||||
if (ObjectUtil.isNotEmpty(search)) map.put("search", "%" + search + "%");
|
if (ObjectUtil.isNotEmpty(search)) map.put("search", "%" + search + "%");
|
||||||
|
//获取人员对应的区域
|
||||||
|
UserAreaServiceImpl userAreaService = new UserAreaServiceImpl();
|
||||||
|
String in_area_id = userAreaService.getInArea();
|
||||||
|
if (ObjectUtil.isNotEmpty(in_area_id)) {
|
||||||
|
map.put("in_area_id", in_area_id);
|
||||||
|
}
|
||||||
|
|
||||||
JSONArray resultJSONArray = WQL.getWO("PDA_TASK").addParamMap(map).process().getResultJSONArray(0);
|
JSONArray resultJSONArray = WQL.getWO("PDA_TASK").addParamMap(map).process().getResultJSONArray(0);
|
||||||
|
|
||||||
JSONObject jo = new JSONObject();
|
JSONObject jo = new JSONObject();
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#################################################
|
#################################################
|
||||||
输入.flag TYPEAS s_string
|
输入.flag TYPEAS s_string
|
||||||
输入.search TYPEAS s_string
|
输入.search TYPEAS s_string
|
||||||
|
输入.in_area_id TYPEAS f_string
|
||||||
|
|
||||||
|
|
||||||
[临时表]
|
[临时表]
|
||||||
@@ -42,45 +43,55 @@
|
|||||||
IF 输入.flag = "1"
|
IF 输入.flag = "1"
|
||||||
QUERY
|
QUERY
|
||||||
SELECT
|
SELECT
|
||||||
task_code,
|
*
|
||||||
vehicle_code,
|
FROM
|
||||||
point_code1,
|
|
||||||
point_code2,
|
|
||||||
point_code3,
|
|
||||||
point_code4,
|
|
||||||
(
|
(
|
||||||
CASE task_status
|
SELECT
|
||||||
WHEN '01' THEN '生成'
|
task_code,
|
||||||
WHEN '02' THEN '确定起点'
|
vehicle_code,
|
||||||
WHEN '03' THEN '确定终点'
|
point_code1,
|
||||||
WHEN '04' THEN '起点和终点确定'
|
point_code2,
|
||||||
WHEN '05' THEN '下发'
|
point_code3,
|
||||||
WHEN '06' THEN '执行中'
|
point_code4,
|
||||||
END
|
(
|
||||||
) AS task_status,
|
CASE task_status
|
||||||
class.class_name AS task_type,
|
WHEN '01' THEN '生成'
|
||||||
car_no,
|
WHEN '02' THEN '确定起点'
|
||||||
task.create_time,
|
WHEN '03' THEN '确定终点'
|
||||||
vehicle_code2,
|
WHEN '04' THEN '起点和终点确定'
|
||||||
material_code
|
WHEN '05' THEN '下发'
|
||||||
FROM
|
WHEN '06' THEN '执行中'
|
||||||
SCH_BASE_Task task
|
END
|
||||||
LEFT JOIN md_pb_classstandard class ON class.class_code = task.task_type
|
) AS task_status,
|
||||||
WHERE
|
class.class_name AS task_type,
|
||||||
task.is_delete = '0'
|
car_no,
|
||||||
AND task_status <> '07'
|
task.create_time,
|
||||||
|
vehicle_code2,
|
||||||
OPTION 输入.search <> ""
|
material_code,
|
||||||
(vehicle_code like 输入.search or
|
case when task.task_type like '0105%' then 'LK' ELSE task.product_area end AS final_product_area
|
||||||
vehicle_code2 like 输入.search or
|
FROM
|
||||||
point_code1 like 输入.search or
|
SCH_BASE_Task task
|
||||||
point_code2 like 输入.search or
|
LEFT JOIN md_pb_classstandard class ON class.class_code = task.task_type
|
||||||
point_code3 like 输入.search or
|
WHERE
|
||||||
point_code4 like 输入.search or
|
task.is_delete = '0'
|
||||||
task_code like 输入.search or
|
AND task_status <> '07'
|
||||||
car_no like 输入.search)
|
|
||||||
ENDOPTION
|
|
||||||
|
|
||||||
|
OPTION 输入.search <> ""
|
||||||
|
(vehicle_code like 输入.search or
|
||||||
|
vehicle_code2 like 输入.search or
|
||||||
|
point_code1 like 输入.search or
|
||||||
|
point_code2 like 输入.search or
|
||||||
|
point_code3 like 输入.search or
|
||||||
|
point_code4 like 输入.search or
|
||||||
|
task_code like 输入.search or
|
||||||
|
car_no like 输入.search)
|
||||||
|
ENDOPTION
|
||||||
|
) a
|
||||||
|
WHERE
|
||||||
|
1=1
|
||||||
|
OPTION 输入.in_area_id <> ""
|
||||||
|
a.final_product_area IN 输入.in_area_id
|
||||||
|
ENDOPTION
|
||||||
ENDSELECT
|
ENDSELECT
|
||||||
ENDQUERY
|
ENDQUERY
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
package org.nl.wms.sch.manage;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.http.HttpRequest;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.modules.wql.core.bean.WQLObject;
|
||||||
|
import org.nl.modules.wql.util.SpringContextHolder;
|
||||||
|
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class AutoQueryConRem {
|
||||||
|
public void run() {
|
||||||
|
//查询立库贴标、捆扎机剩余材料是否低于下限
|
||||||
|
JSONArray rows = new JSONArray();
|
||||||
|
//捆扎米数
|
||||||
|
String lash_num_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("lash_num_up").getValue();
|
||||||
|
//捆扎下限
|
||||||
|
String lash_num_down = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("lash_num_down").getValue();
|
||||||
|
if (Double.parseDouble(lash_num_down) >= Double.parseDouble(lash_num_up)){
|
||||||
|
JSONObject jo = new JSONObject();
|
||||||
|
jo.put("device_code","NKZ01");
|
||||||
|
jo.put("device_name","一楼入库北区捆扎位1");
|
||||||
|
jo.put("param_name","lash_num_up");
|
||||||
|
rows.add(jo);
|
||||||
|
}
|
||||||
|
//标签纸数量
|
||||||
|
String label_num_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("label_num_up").getValue();
|
||||||
|
//标签纸下限
|
||||||
|
String label_num_down = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("lash_num_down").getValue();
|
||||||
|
if (Double.parseDouble(label_num_down) >= Double.parseDouble(label_num_up)){
|
||||||
|
JSONObject jo = new JSONObject();
|
||||||
|
jo.put("device_code","NTB01");
|
||||||
|
jo.put("device_name","一楼入库北区贴标位1");
|
||||||
|
jo.put("param_name","label_num_up");
|
||||||
|
rows.add(jo);
|
||||||
|
}
|
||||||
|
this.sendInfo(rows);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sendInfo(JSONArray send_rows) {
|
||||||
|
WQLObject wo = WQLObject.getWQLObject("em_bi_devicestatus");
|
||||||
|
for (int i = 0; i < send_rows.size(); i++) {
|
||||||
|
JSONObject row = send_rows.getJSONObject(i);
|
||||||
|
String device_code = row.getString("device_code");
|
||||||
|
JSONObject device_jo = wo.query("device_code = '" + device_code + "'").uniqueResult(0);
|
||||||
|
if (ObjectUtil.isEmpty(device_jo) || ObjectUtil.isEmpty(device_jo.getString("upload_user"))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String upload_user = device_jo.getString("upload_user");
|
||||||
|
String[] split = upload_user.split(",");
|
||||||
|
JSONArray UserList = new JSONArray();
|
||||||
|
if (split.length > 0) {
|
||||||
|
for (String s : split) {
|
||||||
|
JSONObject jo = new JSONObject();
|
||||||
|
jo.put("User", s);
|
||||||
|
UserList.add(jo);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String Message = row.getString("device_name")+"消耗材料已低于下限,请及时更换。并将系统对应的:"+row.getString("param_name"+"进行维护!");
|
||||||
|
JSONObject jo = new JSONObject();
|
||||||
|
jo.put("SendType", "L");
|
||||||
|
jo.put("Title", "捆扎、贴标预警信息");
|
||||||
|
jo.put("WarnType", "string");
|
||||||
|
jo.put("MessageType", "P");
|
||||||
|
jo.put("UserList", UserList);
|
||||||
|
jo.put("Message", Message);
|
||||||
|
|
||||||
|
String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("FEISHU_URL").getValue();
|
||||||
|
String api = "/FeiShuNoticesWebApi/CommunalApi";
|
||||||
|
url = url + api;
|
||||||
|
try {
|
||||||
|
String resultMsg = HttpRequest.post(url)
|
||||||
|
.body(String.valueOf(jo))
|
||||||
|
.execute().body();
|
||||||
|
log.info("飞书输入参数为" + jo);
|
||||||
|
log.info("飞书输出参数为:-------------------" + resultMsg);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.info(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -358,6 +358,7 @@ public class CutConveyorTask extends AbstractAcsTask {
|
|||||||
throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!");
|
throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!");
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
//查询该载具号是否存在未完成的任务
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
|
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
|
||||||
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
|
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogFormVisible1 = false">取 消</el-button>
|
<el-button @click="dialogFormVisible1 = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="unlock">解 绑</el-button>
|
<el-button type="primary" @click="unlock" v-permission="permission.confirm" >解 绑</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
@@ -122,6 +122,9 @@ export default {
|
|||||||
point_code: '',
|
point_code: '',
|
||||||
vehicle_code: ''
|
vehicle_code: ''
|
||||||
},
|
},
|
||||||
|
permission: {
|
||||||
|
confirm: ['admin', 'sendout:unlock']
|
||||||
|
},
|
||||||
allStructMsg: [],
|
allStructMsg: [],
|
||||||
msgTop: '200px',
|
msgTop: '200px',
|
||||||
msgLeft: '200px',
|
msgLeft: '200px',
|
||||||
|
|||||||
Reference in New Issue
Block a user