add:设备运行记录

This commit is contained in:
zhangzhiqiang
2023-08-25 15:43:30 +08:00
parent 25c51f7c6c
commit 7b215e061f
16 changed files with 204 additions and 655 deletions

View File

@@ -57,10 +57,10 @@ public class CodeGenerator {
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://192.168.46.5:3306/hl_one_mes_test?serverTimezone=GMT&setUnicode=true&characterEncoding=utf8");
dsc.setUrl("jdbc:mysql://localhost:3306/hl_one_mes?serverTimezone=GMT&setUnicode=true&characterEncoding=utf8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setPassword("942464Yy");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();

View File

@@ -0,0 +1,16 @@
package org.nl.wms.device_manage.service.deviceRecord;
import org.nl.wms.device_manage.service.deviceRecord.dao.PdmBiDevicerunstatusrecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 设备运行状态表 服务类
* </p>
*
* @author generator
* @since 2023-08-25
*/
public interface IPdmBiDevicerunstatusrecordService extends IService<PdmBiDevicerunstatusrecord> {
}

View File

@@ -0,0 +1,59 @@
package org.nl.wms.device_manage.service.deviceRecord.dao;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 设备运行状态表
* </p>
*
* @author generator
* @since 2023-08-25
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("pdm_bi_devicerunstatusrecord")
public class PdmBiDevicerunstatusrecord implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 记录标识
*/
private Long record_id;
/**
* 设备标识
*/
private String device_code;
/**
* 故障标识
*/
private String err_status_id;
/**
* 状态类型
*/
private String status_type;
/**
* 开始时间
*/
private String start_time;
/**
* 结束时间
*/
private String end_time;
@TableId(value = "order_num", type = IdType.AUTO)
private Long order_num;
}

View File

@@ -0,0 +1,22 @@
package org.nl.wms.device_manage.service.deviceRecord.dao.mapper;
import org.nl.wms.device_manage.service.deviceRecord.dao.PdmBiDevicerunstatusrecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
/**
* <p>
* 设备运行状态表 Mapper 接口
* </p>
*
* @author generator
* @since 2023-08-25
*/
public interface PdmBiDevicerunstatusrecordMapper extends BaseMapper<PdmBiDevicerunstatusrecord> {
List<PdmBiDevicerunstatusrecord> allDeviceStatus();
List<Map> errorTop(String date);
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.device_manage.service.deviceRecord.dao.mapper.PdmBiDevicerunstatusrecordMapper">
<select id="allDeviceStatus" resultType="org.nl.wms.device_manage.service.deviceRecord.dao.PdmBiDevicerunstatusrecord">
select *
from
(select * from pdm_bi_devicerunstatusrecord order by order_num desc limit 99999999 )
as a GROUP BY a.device_code
</select>
<select id="errorTop"
resultType="java.util.Map">
select COUNT(device_code) AS err_num,MAX(device_code) AS device_name
from pdm_bi_devicerunstatusrecord where start_time > #{date} and status_type = '5' GROUP BY
device_code
ORDER BY err_num desc
LIMIT 10;
</select>
</mapper>

View File

@@ -0,0 +1,20 @@
package org.nl.wms.device_manage.service.deviceRecord.impl;
import org.nl.wms.device_manage.service.deviceRecord.dao.PdmBiDevicerunstatusrecord;
import org.nl.wms.device_manage.service.deviceRecord.dao.mapper.PdmBiDevicerunstatusrecordMapper;
import org.nl.wms.device_manage.service.deviceRecord.IPdmBiDevicerunstatusrecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 设备运行状态表 服务实现类
* </p>
*
* @author generator
* @since 2023-08-25
*/
@Service
public class PdmBiDevicerunstatusrecordServiceImpl extends ServiceImpl<PdmBiDevicerunstatusrecordMapper, PdmBiDevicerunstatusrecord> implements IPdmBiDevicerunstatusrecordService {
}

View File

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.ext_manage.bigScreen.service.AgvBigScreenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@@ -22,7 +23,8 @@ import org.springframework.web.bind.annotation.*;
@CrossOrigin
public class AgvBigScreenController {
private final AgvBigScreenService agvBigScreenService;
@Autowired
private AgvBigScreenService agvBigScreenService;
@PostMapping("/getTask")
//("查询任务")

View File

@@ -1,12 +1,8 @@
package org.nl.wms.ext_manage.bigScreen.rest;
import cn.dev33.satoken.annotation.SaIgnore;
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.wms.ext_manage.bigScreen.service.DeviceScreenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
@@ -14,14 +10,11 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//@RestController
@RequiredArgsConstructor
//@Api(tags = "设备监控大屏")
//@RequestMapping("/api/deviceScreen")
//@SaIgnore
//@Slf4j
@RestController
@RequestMapping("/api/deviceScreen")
public class DeviceScreenController {
private final DeviceScreenService deviceScreenService;
@Autowired
private DeviceScreenService deviceScreenService;
@PostMapping("/deviceStatus")
//("设备实时状态")

View File

@@ -22,105 +22,13 @@ public class AgvBigScreenServiceImpl implements AgvBigScreenService {
@Override
public JSONObject getTask(JSONObject whereJson) {
JSONObject result = new JSONObject();
try {
JSONObject param = new JSONObject();
// 1.获取总任务数
String today = DateUtil.today();
HashMap<String, String> map = new HashMap<>();
map.put("flag", "1");
map.put("today", "%"+today+"%");
JSONObject jsonAll = WQL.getWO("AGVBIGSCREEN01").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonAll)) {
param.put("all_task_number",jsonAll.getString("all_task_number"));
} else {
param.put("all_task_number","0");
}
// 2.获取已执行任务数 状态 = 99
map.put("flag", "2");
JSONObject jsonFinish = WQL.getWO("AGVBIGSCREEN01").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonFinish)) {
param.put("finish_task_number",jsonFinish.getString("finish_task_number"));
} else {
param.put("finish_task_number","0");
}
// 3.获取取消的任务数 是否删除 = 1
map.put("flag", "3");
JSONObject jsonCancel = WQL.getWO("AGVBIGSCREEN01").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonCancel)) {
param.put("cancel_task_number",jsonCancel.getString("cancel_task_number"));
} else {
param.put("cancel_task_number","0");
}
// 4.获取未执行任务数 状态 <> 99
map.put("flag", "4");
JSONObject jsonNotFinish = WQL.getWO("AGVBIGSCREEN01").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonNotFinish)) {
param.put("not_finish_task_number",jsonNotFinish.getString("not_finish_task_number"));
} else {
param.put("not_finish_task_number","0");
}
result.put("code", "1");
result.put("desc", "查询成功");
result.put("srb", param);
} catch (Exception e) {
result.put("code", "0");
result.put("desc", "查询失败:"+e.getMessage());
}
return result;
}
@Override
public JSONObject getAgvMsg(JSONObject whereJson) {
JSONObject result = new JSONObject();
try {
WQLObject agvTab = WQLObject.getWQLObject("DS_AGV_AgvStatus");
JSONObject srb = new JSONObject();
JSONArray errorArr = new JSONArray();
JSONArray agv_info = new JSONArray();
for (int i = 1; i <= 7; i++) {
JSONObject json = new JSONObject();
String agv_code = String.valueOf(i);
JSONObject jsonAgv = agvTab.query("agv_code = '" + agv_code + "'").uniqueResult(0);
// 1.车号
json.put("agv_code", agv_code);
// 2.任务: 0为无任务、1为有任务
json.put("agv_statetype", jsonAgv.getString("agv_statetype"));
// 3.电量
json.put("agv_power", jsonAgv.getString("agv_power"));
// 4.预警: 0为正常1为报警
String error_status = jsonAgv.getString("error_status");
if (StrUtil.equals(error_status,"1")) {
// 只要有一辆车有报警信息 状态则为1
srb.put("error_status", "1");
// 5.预警信息
errorArr.add(jsonAgv.getString("error_info"));
}
// 6.agv名称
json.put("agv_name", jsonAgv.getString("agv_name"));
// 7.x坐标
json.put("x_coordinate", jsonAgv.getString("x_coordinate"));
// 8.y坐标
json.put("y_coordinate", jsonAgv.getString("y_coordinate"));
// 9.方向类型
json.put("direction_type", jsonAgv.getString("direction_type"));
agv_info.add(json);
}
srb.put("agv_info_arr", agv_info);
srb.put("agv_error_arr", errorArr);
result.put("srb", srb);
result.put("code", "1");
result.put("desc", "查询成功");
} catch (Exception e) {
result.put("code", "0");
result.put("desc", "查询失败:"+e.getMessage());
}
return result;
}

View File

@@ -7,71 +7,65 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.StatusEnum;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.MapOf;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.device_manage.service.deviceRecord.dao.PdmBiDevicerunstatusrecord;
import org.nl.wms.device_manage.service.deviceRecord.dao.mapper.PdmBiDevicerunstatusrecordMapper;
import org.nl.wms.ext_manage.bigScreen.DeviceUtils;
import org.nl.wms.ext_manage.bigScreen.SwitchOnOff;
import org.nl.wms.ext_manage.bigScreen.service.DeviceScreenService;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@Slf4j
public class DeviceScreenServiceImpl implements DeviceScreenService {
@Autowired
private IPdmBiDeviceService pdmBiDeviceService;
@Autowired
private IPdmProduceWorkorderService workorderService;
@Resource
private PdmBiDevicerunstatusrecordMapper devicerunstatusrecordMapper;
@Override
public JSONObject deviceStatus(JSONObject param) {
if (SwitchOnOff.type == 1) {
return DeviceUtils.deviceStatus(param);
}
//正常运行:有工单正在工作的;暂未生产:有工单没有在工作的;空闲设备:没有工单的,没故障的;故障设备:状态为故障的
JSONArray device_rows = WQLObject.getWQLObject("PDM_BI_Device").query("is_active = '1' AND is_delete = '0'").getResultJSONArray(0);
List<PdmBiDevice> device_rows = pdmBiDeviceService.list(new QueryWrapper<PdmBiDevice>().eq("is_delete", false).eq("is_used", true));
int total_num = device_rows.size();
//查询故障设备
JSONArray err_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "7").process().getResultJSONArray(0);
int err_device = err_rows.size();
//查询运行设备
JSONArray run_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "8").process().getResultJSONArray(0);
int run_device = run_rows.size();
//查询有工单,没有故障的设备
JSONArray task_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "9").process().getResultJSONArray(0);
//查询暂未生产设备
int prepare_device = task_rows.size() - run_device;
if (prepare_device < 0) {
prepare_device = 0;
}
//空闲设备
int free_device = total_num - task_rows.size() - err_device;
List<PdmBiDevicerunstatusrecord> list = devicerunstatusrecordMapper.allDeviceStatus();
Map<String, List<PdmBiDevicerunstatusrecord>> collect = list.stream().collect(Collectors.groupingBy(PdmBiDevicerunstatusrecord::getStatus_type));
List<PdmProduceWorkorder> runningWorkOrder = workorderService.list(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_status", WorkerOrderEnum.PRODUCTING.getCode()));
JSONArray result = new JSONArray();
JSONObject run = new JSONObject();
run.put("name", "正常运行");
run.put("value", run_device);
result.add(run);
JSONObject pre = new JSONObject();
pre.put("name", "暂未生产");
pre.put("value", prepare_device);
result.add(pre);
JSONObject free = new JSONObject();
free.put("name", "空闲设备");
free.put("value", free_device);
result.add(free);
JSONObject err = new JSONObject();
err.put("name", "故障设备");
err.put("value", err_device);
result.add(err);
result.add(MapOf.of("name", "正常运行","value", collect.get(StatusEnum.DEVICE_STATUS_RUNING.getCode()).size()));
result.add(MapOf.of("name", "暂未生产","value", (runningWorkOrder.size() - collect.get(StatusEnum.DEVICE_STATUS_RUNING.getCode()).size())<0?0:(runningWorkOrder.size() - collect.get(StatusEnum.DEVICE_STATUS_RUNING.getCode()).size())));
result.add(MapOf.of("name", "空闲设备","value", total_num - runningWorkOrder.size() - collect.get(StatusEnum.DEVICE_STATUS_ERROR.getCode()).size()));
result.add(MapOf.of("name", "故障设备","value", collect.get(StatusEnum.DEVICE_STATUS_ERROR.getCode()).size()));
JSONObject jo = new JSONObject();
jo.put("ja", result);
jo.put("total_num", total_num);
@@ -86,7 +80,6 @@ public class DeviceScreenServiceImpl implements DeviceScreenService {
public JSONObject oeeAndTeep(JSONObject param) {
JSONObject oee = new JSONObject();
JSONObject teep = new JSONObject();
//value1:过去一个月value2目标value3实际
oee.put("value1", "78.0");
oee.put("value2", "76.0");
@@ -106,7 +99,8 @@ public class DeviceScreenServiceImpl implements DeviceScreenService {
@Override
public JSONObject queryDeviceByWork(JSONObject param) {
JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "1").process().getResultJSONArray(0);
//WQL.getWO("QDEVICE_SCREEN").addParam("flag", "1").process().getResultJSONArray(0)
JSONArray result = new JSONArray();
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
@@ -119,12 +113,10 @@ public class DeviceScreenServiceImpl implements DeviceScreenService {
if (SwitchOnOff.type == 1) {
return DeviceUtils.deviceErrorNum(param);
}
String today = DateUtil.today() + "%";
JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "2").addParam("today", today).process().getResultJSONArray(0);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", result);
returnjo.put("result", devicerunstatusrecordMapper.errorTop(DateUtil.today()));
return returnjo;
}

View File

@@ -5,17 +5,19 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext_manage.bigScreen.DeviceUtils;
import org.nl.wms.ext_manage.bigScreen.OrderDto;
import org.nl.wms.ext_manage.bigScreen.SwitchOnOff;
import org.nl.wms.ext_manage.bigScreen.WordOrderUtils;
import org.nl.wms.ext_manage.bigScreen.test.service.BigTestService;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@@ -29,9 +31,12 @@ import java.util.List;
* @createDate: 2023/1/10
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class BigTestServiceImpl implements BigTestService {
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Override
public void save(JSONObject jsonObject) {
JSONObject oneInfo = jsonObject.getJSONObject("oneInfo");
@@ -698,7 +703,6 @@ public class BigTestServiceImpl implements BigTestService {
e.printStackTrace();
}
//物料表
WQLObject wo_material = WQLObject.getWQLObject("md_me_materialbase");
// 调用用 hutool 方法读取数据 调用第一个sheet白班数据
ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0);
// 从第1行开始获取数据 excelReader.read的结果是一个2纬的list外层是行内层是行对应的所有列
@@ -719,8 +723,11 @@ public class BigTestServiceImpl implements BigTestService {
if (j == 1) {
String material_code = String.valueOf(list.get(j));
orderDto.setMaterial_code(material_code);
JSONObject jsonObject = wo_material.query("material_code = '" + material_code + "'").uniqueResult(0);
orderDto.setMaterial_spec(jsonObject.getString("material_spec"));
MdMeMaterialbase one = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_code", material_code));
if (one==null){
throw new BadRequestException("当前物料编码不存在:"+material_code);
}
orderDto.setMaterial_spec(one.getMaterial_spec());
}
if (j == 2) {
Integer plan_qty = 0;

View File

@@ -1,109 +0,0 @@
[交易说明]
交易名: AGV监控中心查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.today TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
QUERY
SELECT
count(task.task_id) AS all_task_number
FROM
SCH_BASE_Task task
WHERE
1 = 1
OPTION 输入.today <> ""
task.create_time like 输入.today
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
count(task.task_id) AS finish_task_number
FROM
SCH_BASE_Task task
WHERE
task.task_status = '99'
OPTION 输入.today <> ""
task.create_time like 输入.today
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
count(task.task_id) AS cancel_task_number
FROM
SCH_BASE_Task task
WHERE
task.is_delete = '1'
OPTION 输入.today <> ""
task.create_time like 输入.today
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "4"
QUERY
SELECT
count(task.task_id) AS not_finish_task_number
FROM
SCH_BASE_Task task
WHERE
task.task_status <> '99'
OPTION 输入.today <> ""
task.create_time like 输入.today
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -1,383 +0,0 @@
[交易说明]
交易名: bom查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.workprocedure TYPEAS s_string
输入.begin_time TYPEAS s_string
输入.end_time TYPEAS s_string
输入.now_time TYPEAS s_string
输入.produce_date TYPEAS s_string
输入.end_produce_date TYPEAS s_string
输入.begin_produce_date TYPEAS s_string
输入.worksection_type_scode TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
QUERY
SELECT
sum( shiftorder.real_qty ) AS real_qty,
sum( shiftorder.plan_qty ) AS plan_qty ,
convert(sum( shiftorder.real_qty )/sum( shiftorder.plan_qty ),DECIMAL(10,2))*100 as finish_rate
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87'
where
shiftorder.is_delete='0'
and shiftorder.order_status<>'00'
OPTION 输入.worksection_type_scode <> ""
workprocedure.worksection_type_scode = 输入.worksection_type_scode
ENDOPTION
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
shiftorder.produceorder_code,
shiftorder.plan_qty,
shiftorder.real_qty,
(shiftorder.plan_qty - shiftorder.real_qty) AS gap_qty,
material.material_code,
material.material_name,
material.material_spec,
CONVERT ( ( shiftorder.real_qty / shiftorder.plan_qty ), DECIMAL ( 10, 3 ) ) * 100 AS finish_rate
FROM
mps_bd_produceshiftorder shiftorder
left join md_me_materialbase material on material.material_id =shiftorder.material_id
where
shiftorder.is_delete='0'
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
sum( shiftorder.real_qty ) AS real_qty,
sum( shiftorder.plan_qty ) AS plan_qty,
CONVERT ( sum( shiftorder.real_qty ) / sum( shiftorder.plan_qty ), DECIMAL ( 10, 3 ) ) * 100 AS finish_rate
FROM
mps_bd_produceshiftorder shiftorder
RIGHT JOIN (
SELECT
route.material_id,
dtl.workprocedure_id
FROM
PDM_BI_ProductProcessRoute route
LEFT JOIN PDM_BI_ProductProcessRouteDtl dtl ON route.productprocess_id = dtl.productprocess_id
WHERE
route.material_id IN ( SELECT DISTINCT shiftorder.material_id FROM mps_bd_produceshiftorder shiftorder )
AND dtl.nextworkprocedure_id = '1535144552481034240'
) a ON a.material_id = shiftorder.material_id
AND a.workprocedure_id = shiftorder.workprocedure_id
where
1=1
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "4"
QUERY
SELECT
count(*) as count
FROM
mps_bd_produceshiftorder shiftorder
where
shiftorder.is_delete='0'
and shiftorder.order_status<>'00'
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "5"
QUERY
SELECT
count(*) as count
FROM
mps_bd_produceshiftorder shiftorder
where
shiftorder.realproduceend_date > shiftorder.planproduceend_date
and shiftorder.order_status<>'00'
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "7"
QUERY
SELECT
sum( real_qty ) AS real_qty,
sum( plan_qty ) AS plan_qty,
CONVERT ( sum( shiftorder.real_qty ) / sum( shiftorder.plan_qty ), DECIMAL ( 10, 3 ) ) * 100 AS finish_rate
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON workprocedure.workprocedure_id = shiftorder.workprocedure_id
WHERE
shiftorder.is_delete='0'
and shiftorder.order_status<>'00'
and workprocedure.workprocedure_code IN ( '07', '06', '02' )
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "8"
QUERY
SELECT
workprocedure.worksection_type_scode,
sum( real_qty ) AS real_qty,
sum( plan_qty ) AS plan_qty,
shiftorder.produce_date as date,
CONVERT ( sum( shiftorder.real_qty ) / sum( shiftorder.plan_qty ), DECIMAL ( 10, 3 ) ) * 100 AS finish_rate
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87'
WHERE
shiftorder.is_delete='0'
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
GROUP BY worksection_type_scode,shiftorder.produce_date
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "9"
QUERY
SELECT
sum( real_qty ) AS real_qty
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87'
WHERE
shiftorder.is_delete='0'
and workprocedure.workprocedure_code IN ( '07', '06', '02' )
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
GROUP BY worksection_type_scode
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "10"
QUERY
SELECT
shiftorder.material_id,
material.material_code,
material.material_name,
material.material_spec,
sum( real_qty ) AS real_qty
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
left join md_me_materialbase material on material.material_id =shiftorder.material_id
WHERE
shiftorder.is_delete='0'
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
GROUP BY
shiftorder.material_id,
material.material_code,
material.material_name,
material.material_spec
ORDER BY real_qty desc
LIMIT 0,10
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "11"
QUERY
SELECT
shiftorder.produceorder_code,
shiftorder.material_id,
material.material_code,
material.material_name,
material.material_spec,
shiftorder. real_qty,
shiftorder.plan_qty,
shiftorder.plan_qty -shiftorder. real_qty as gap_qty,
shiftorder.produce_date as date
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87'
left join md_me_materialbase material on material.material_id =shiftorder.material_id
WHERE
shiftorder.is_delete='0'
and shiftorder.order_status<>'00'
and workprocedure.workprocedure_code IN ( '07', '06', '02' )
and shiftorder. real_qty < shiftorder.plan_qty
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "12"
QUERY
SELECT
shiftorder.material_id,
material.material_code,
material.material_name,
material.material_spec,
sum( real_qty ) AS real_qty
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
left join md_me_materialbase material on material.material_id =shiftorder.material_id
WHERE
shiftorder.is_delete='0'
OPTION 输入.end_produce_date <> ""
shiftorder.produce_date <= 输入.end_produce_date
ENDOPTION
OPTION 输入.begin_produce_date <> ""
shiftorder.produce_date >= 输入.begin_produce_date
ENDOPTION
GROUP BY
shiftorder.material_id,
material.material_code,
material.material_spec,
material.material_name
ORDER BY real_qty desc
LIMIT 0,9
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "13"
QUERY
SELECT
sum( real_qty ) AS real_qty
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
left join md_me_materialbase material on material.material_id =shiftorder.material_id
WHERE
shiftorder.is_delete='0'
OPTION 输入.end_produce_date <> ""
shiftorder.produce_date <= 输入.end_produce_date
ENDOPTION
OPTION 输入.begin_produce_date <> ""
shiftorder.produce_date >= 输入.begin_produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "14"
QUERY
SELECT
sum( shiftorder.real_qty ) AS real_qty,
sum( shiftorder.plan_qty ) AS plan_qty ,
convert(sum( shiftorder.real_qty )/sum( shiftorder.plan_qty ),DECIMAL(10,2))*100 as finish_rate
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87'
where
shiftorder.is_delete='0'
OPTION 输入.worksection_type_scode <> ""
workprocedure.worksection_type_scode = 输入.worksection_type_scode
ENDOPTION
OPTION 输入.end_produce_date <> ""
shiftorder.produce_date <= 输入.end_produce_date
ENDOPTION
OPTION 输入.begin_produce_date <> ""
shiftorder.produce_date >= 输入.begin_produce_date
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "15"
QUERY
SELECT
sum( real_qty ) AS real_qty,
sum( plan_qty ) AS plan_qty,
CONVERT ( sum( shiftorder.real_qty ) / sum( shiftorder.plan_qty ), DECIMAL ( 10, 3 ) ) * 100 AS finish_rate
FROM
mps_bd_produceshiftorder shiftorder
LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id
LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87'
WHERE
shiftorder.is_delete='0'
OPTION 输入.produce_date <> ""
shiftorder.produce_date = 输入.produce_date
ENDOPTION
OPTION 输入.worksection_type_scode <> ""
workprocedure.worksection_type_scode = 输入.worksection_type_scode
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -38,7 +38,6 @@ import java.util.Map;
public class ProduceshiftorderController{
private final ProduceshiftorderService produceshiftorderService;
private final IPdmProduceWorkorderService iPdmProduceWorkorderService;
private final IPdmBiDeviceService pdmBiDeviceService;
@PostMapping("/getDevice")

View File

@@ -29,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -64,18 +65,21 @@ public class EngraveCallService {
if (param.size()==0){
throw new BadRequestException("请求参数不能为空");
}
String struct_code = null;
StIvtStructivtBcp stIvtStructivt = iStIvtStructivtBcpService.getOne(new QueryWrapper<StIvtStructivtBcp>()
.eq("struct_code", param.getJSONObject(0).getString("struct_code")));
BigDecimal unit_weight = stIvtStructivt.getUnit_weight();
if (unit_weight==null){
throw new BadRequestException("当前半成品货位库存没有物料单重");
}
List<String> kzDevice= new ArrayList<>();
Map<String, String> map = new HashMap<>();
for (Object o : param) {
JSONObject item = JSONObject.parseObject(JSON.toJSONString(o));
struct_code = item.getString("struct_code");//货位;
kzDevice.add(item.getString("device_code"));
map.put(item.getString("device_code"),item.getString("weight"));
map.put(item.getString("device_code"),String.valueOf(item.getBigDecimal("qty").multiply(unit_weight).intValue()));
}
kzDevice.remove("A1_KZ_14");
StIvtStructivtBcp stIvtStructivt = iStIvtStructivtBcpService.getOne(new QueryWrapper<StIvtStructivtBcp>()
.eq("struct_code", struct_code));
// if (!CollectionUtils.isEmpty(kzDevice)){
// List<PdmProduceWorkorder> workorders = workorderService.list(new QueryWrapper<PdmProduceWorkorder>()
// .eq("workprocedure_id", ENGRAVE_WORKPRODURE)