rev 更新工单和打印机驱动

This commit is contained in:
zhoujj
2024-12-20 16:04:34 +08:00
parent 92eab4db8f
commit 94a1a69ee1
8 changed files with 405 additions and 104 deletions

View File

@@ -49,7 +49,18 @@
<artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient -->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
<scope>compile</scope>
</dependency>
<!-- 控制台高亮-->
<dependency>
<groupId>org.fusesource.jansi</groupId>
@@ -69,6 +80,23 @@
<artifactId>ojdbc5</artifactId>
<version>11.2.0.4</version>
</dependency>
<dependency>
<groupId>com.github.magese</groupId>
<artifactId>ik-analyzer</artifactId>
<version>${lucene.version}</version>
</dependency>
<!-- 获取系统信息 -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>5.0.1</version>
</dependency>
<!-- Java图形验证码 -->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
<!-- dynamic-datasource -->
<!-- https://onew.me/logback/2018/09/17/logback_win.html-->
<dependency>

View File

@@ -153,8 +153,8 @@ public class CartonLabelingMachineDeviceDriver extends AbstractOpcDeviceDriver i
status = this.itemProtocol.getStatus();
error = this.itemProtocol.getError();
move = this.itemProtocol.getMove();
weight=this.itemProtocol.getWeight();
if(mode != last_mode){
weight = this.itemProtocol.getWeight();
if (mode != last_mode) {
requireSucess = false;
}
} catch (Exception var17) {
@@ -179,8 +179,114 @@ public class CartonLabelingMachineDeviceDriver extends AbstractOpcDeviceDriver i
if (mode == 8 && move == 1 && !requireSucess) {
//TODO:将贴标信息下发,并反馈200
JSONObject template= ticketsMapper.template();
JSONObject template = ticketsMapper.template();
String jsonString = template.toString();
Tickets tickets = ticketsMapper.ticket();
//客户
String customer = tickets.getCustomer();
//纸箱装瓶数量
String carton_qty = tickets.getCarton_qty();
//计划数量
String planned_quantity = tickets.getPlanned_quantity();
//晶科每罐重量
String bottle_weight=null;
Integer bottle_weight1=0;
//当前纸箱完成数量
String fcarton_number = tickets.getFcarton_number();
Integer fcarton_number1 = Integer.parseInt(fcarton_number);
Integer planned_quantity1 = Integer.parseInt(planned_quantity);
Integer carton_qty1=Integer.parseInt(carton_qty);
// Float carton_qty1 = Float.parseFloat(carton_qty);
//总纸箱数
Integer sum_carton1 = (planned_quantity1+carton_qty1-1)/carton_qty1;
//总纸箱数(Integer)
//纸箱号
String carton_number = tickets.getCarton_number();
//瓶盖号
String bottle_number = tickets.getBottle_number();
//物料条码(瓶盖数据去掉后四位)
String material_number = null;
//纸箱前18位
String first_number = null;
//纸箱后2位
String last_number = null;
String zx1= "";
String zx2= "";
Integer last_number1 = 0;
//当前箱数
Integer real_carton = fcarton_number1;
if (customer.contains("晶科")) {
bottle_weight=tickets.getBottle_weight();
//
String last_number5="";
bottle_weight1=Integer.parseInt(bottle_weight);
//物料条码(瓶盖数据去掉后四位)
material_number = bottle_number.substring(0, 19);
first_number = carton_number.substring(0, 18);
zx1=carton_number.substring(18, 20);
zx2=carton_number.substring(20, 31);
last_number = carton_number.substring(31, 33);
last_number1 = Integer.parseInt(last_number);
last_number1 = last_number1 - fcarton_number1;
log.info("当前纸箱尾数{}",last_number1);
if (last_number1 > 9) {
last_number5 = String.valueOf(last_number1);
} else {
last_number5 = "0" + String.valueOf(last_number1);
}
last_number=last_number5;
}
//晶澳纸箱数据
String janumber = "";
if (customer.contains("晶澳")) {
//纸箱前16位
first_number = carton_number.substring(0, 16);
//纸箱后3位
last_number = carton_number.substring(16, 19);
if (fcarton_number1 == 0) {
Integer sum_number = sum_carton1 * carton_qty1;
Integer last1_number1 = carton_qty1 - (sum_number - planned_quantity1);
// Integer last1_number1 = Integer.valueOf(String.valueOf(last1_number));
for (Integer i = 0; i < last1_number1; i++) {
Integer last_number2 = 0;
last_number2 = Integer.parseInt(last_number);
String last_number3 = String.valueOf(last_number2);
if (last_number2 > 100) {
last_number2 = (last_number2 - carton_qty1*1) + i+2;
last_number3 = String.valueOf(last_number2);
last_number3 = last_number3 + String.valueOf(last_number2) + ",2;";
janumber=janumber+first_number+last_number3;
} else if (last_number2 > 10) {
last_number2 = (last_number2 - carton_qty1*1) + i+2;
last_number3 = last_number3 + "0" + String.valueOf(last_number2) + ",2;";
janumber=janumber+first_number+last_number3;
} else if (last_number2 > 0) {
last_number2 = (last_number2 - carton_qty1*1) + i+2;
last_number3 = last_number3 + "00" + String.valueOf(last_number2) + ",2;";
janumber=janumber+first_number+last_number3;
}
}
} else {
for (Integer i = 0; i < carton_qty1; i++) {
Integer last_number2 = Integer.parseInt(last_number);
last_number2=(sum_carton1-real_carton-1)*10+i+1;
String last_number3 = String.valueOf(last_number2);
if (last_number2 > 100) {
last_number3 = last_number3 + String.valueOf(last_number2) + ",2;";
janumber=janumber+first_number+last_number3;
}else if (last_number2 > 10) {
last_number3 = last_number3 + "0" + String.valueOf(last_number2) + ",2;";
janumber=janumber+first_number+last_number3;
} else if (last_number2 > 0) {
last_number3 = last_number3 + "00" + String.valueOf(last_number2) + ",2;";
janumber=janumber+first_number+last_number3;
}
}
}
}
// String sum_carton1=String.valueOf(sum_carton);
// String real_carton1=String.valueOf(real_carton);
ObjectMapper objectMapper = new ObjectMapper();
// 解析外部 JSON 字符串,获取 "template" 字段的值
JsonNode rootNode = objectMapper.readTree(jsonString);
@@ -197,29 +303,74 @@ public class CartonLabelingMachineDeviceDriver extends AbstractOpcDeviceDriver i
for (int i = 0; i < printElements.size(); i++) {
JSONObject printElement = printElements.getJSONObject(i);
JSONObject options = printElement.getJSONObject("options");
if(options.containsKey("testData")){
if(options.get("testData").equals("date")){
if (options.containsKey("testData")) {
if (options.get("testData").equals("date")) {
LocalDate currentDate = LocalDate.now();
options.put("title","日期: "+currentDate);
printElement.put("options",options);
options.put("title", "日期: " + currentDate);
printElement.put("options", options);
}
if(options.get("testData").equals("weight")){
options.put("title","重量: "+weight+"kg");
printElement.put("options",options);
if (options.get("testData").equals("weight")) {
options.put("title", "重量: " + weight + "kg");
printElement.put("options", options);
}
if(options.get("testData").equals("time")){
if (options.get("testData").equals("number")) {
real_carton=real_carton+1;
options.put("title", sum_carton1 + "——" + real_carton);
printElement.put("options", options);
}
if (options.get("testData").equals("纸箱号")) {
log.info("纸箱号{}{}", first_number, last_number);
String number="";
if(fcarton_number1==0){
number = first_number + zx1+zx2+last_number;
}else{
number = first_number +bottle_weight1*carton_qty1 +zx2+last_number;
}
options.put("title", number);
options.put("testData", number);
printElement.put("options", options);
}
if (options.get("testData").equals("晶澳纸箱号")) {
log.info("晶澳纸箱号{}{}",janumber);
String number = janumber;
options.put("testData", number);
printElement.put("options", options);
}
if (options.get("testData").equals("物料号")) {
log.info("物料号{}", material_number);
options.put("title", material_number);
options.put("testData", material_number);
printElement.put("options", options);
}
if (options.get("testData").equals("time")) {
LocalTime currentTime = LocalTime.now();
options.put("title","时间: "+ currentTime.getHour() + ":" + currentTime.getMinute() + ":" + currentTime.getSecond());
printElement.put("options",options);
String minute="";
String second="";
if(currentTime.getMinute()<10){
minute="0"+currentTime.getMinute();
}else{
minute=String.valueOf(currentTime.getMinute());
}
if(currentTime.getSecond()<10){
second="0"+currentTime.getSecond();
}else{
second=String.valueOf(currentTime.getSecond());
}
options.put("title", "时间: " + currentTime.getHour() + ":" + minute + ":" + second);
printElement.put("options", options);
}
}else{
} else {
continue;
}
}
jsonObject.put("type", 2);
requireSucess=true;
requireSucess = true;
log.info("纸箱打印数据: " + jsonObject.toString());
SendPrintSocket.sendPrint(jsonObject.toString());
Integer fcarton_number2 = fcarton_number1 + 1;
String fcarton_number3 = String.valueOf(fcarton_number2);
tickets.setFcarton_number(fcarton_number3);
ticketsMapper.updateById(tickets);
SendPrintSocket.sendPrint(jsonObject.toString());
Map map = new HashMap();
map.put("to_command", 200);
this.writing(map);
@@ -228,70 +379,98 @@ public class CartonLabelingMachineDeviceDriver extends AbstractOpcDeviceDriver i
}
if (mode == 7 && move == 1 && !requireSucess) {
//TODO:将贴标信息下发,并反馈200
JSONObject template= ticketsMapper.template1();
Tickets tickets=ticketsMapper.ticket();
String bottle_number=tickets.getBottle_number();
String fbottle_number=tickets.getFbottle_number();
Integer fbottle_number1=Integer.parseInt(fbottle_number);
String psletters = bottle_number.substring(0,18);
String psdigits = bottle_number.substring(18,23);
Integer psdigits1=Integer.parseInt(psdigits)-fbottle_number1;
String jsonString = template.toString();
ObjectMapper objectMapper = new ObjectMapper();
// 解析外部 JSON 字符串,获取 "template" 字段的值
JsonNode rootNode = objectMapper.readTree(jsonString);
String templateJson = rootNode.get("template").asText();
// 解析嵌套的 "template" 字符串为 JSON 对象
JsonNode templateNode = objectMapper.readTree(templateJson);
// 输出 panels 数据
JSONObject jsonObject = JSONObject.parseObject(templateNode.toString());
// 获取 panels 数组
JSONArray panels = jsonObject.getJSONArray("panels");
JSONObject panel = panels.getJSONObject(0);
// 获取 printElements 数组
JSONArray printElements = panel.getJSONArray("printElements");
for (int i = 0; i < printElements.size(); i++) {
JSONObject printElement = printElements.getJSONObject(i);
JSONObject options = printElement.getJSONObject("options");
if(options.containsKey("testData")){
if(options.get("title").equals("二维码")){
String number1=psletters+psdigits1;
options.put("testData",number1);
printElement.put("options",options);
}
else if(options.get("testData").equals("瓶号")){
String number1=psletters+psdigits1;
options.put("title",number1);
printElement.put("options",options);
}
}else{
continue;
JSONObject template = ticketsMapper.template1();
Tickets tickets = ticketsMapper.ticket();
String customer = tickets.getCustomer();
String bottle_number = tickets.getBottle_number();
String fbottle_number = tickets.getFbottle_number();
Integer fbottle_number1 = Integer.parseInt(fbottle_number);
String plan_qty=tickets.getPlanned_quantity();
Integer plan_qty1=Integer.parseInt(plan_qty);
String psletters = null;
String psdigits = null;
Integer psdigits1 = 0;
if (customer.contains("晶科")) {
psletters = bottle_number.substring(0, 18);
psdigits = bottle_number.substring(18, 23);
psdigits1 = Integer.parseInt(psdigits) - fbottle_number1;
}
if (customer.contains("晶澳")) {
psletters = bottle_number.substring(0, bottle_number.length()-5);
psdigits = bottle_number.substring(bottle_number.length()-5, bottle_number.length()-2);
if (Integer.parseInt(psdigits) >= 100) {
psdigits1 = Integer.parseInt(psdigits) - fbottle_number1-plan_qty1;
psdigits = String.valueOf(psdigits1);
} else if (Integer.parseInt(psdigits) >= 10) {
psdigits1 = Integer.parseInt(psdigits) - fbottle_number1-plan_qty1;
psdigits = "0" + String.valueOf(psdigits1);
} else if (Integer.parseInt(psdigits) >= 0) {
psdigits1 = Integer.parseInt(psdigits) - fbottle_number1-plan_qty1;
psdigits = "00" + String.valueOf(psdigits1);
}
}
jsonObject.put("type", 1);
requireSucess=true;
fbottle_number1=fbottle_number1+1;
String fbottle_number2=String.valueOf(fbottle_number1);
// 输出 panels 数据
SendPrintSocket.sendPrint(jsonObject.toString());
log.info("瓶盖打印数据: " + jsonObject.toString());
tickets.setFbottle_number(fbottle_number2);
ticketsMapper.updateById(tickets);
Map map = new HashMap();
map.put("to_command", 200);
map.put("to_message","");
this.writing(map);
} else {
message = "无请求";
String jsonString = template.toString();
ObjectMapper objectMapper = new ObjectMapper();
// 解析外部 JSON 字符串,获取 "template" 字段的值
JsonNode rootNode = objectMapper.readTree(jsonString);
String templateJson = rootNode.get("template").asText();
// 解析嵌套的 "template" 字符串为 JSON 对象
JsonNode templateNode = objectMapper.readTree(templateJson);
// 输出 panels 数据
JSONObject jsonObject = JSONObject.parseObject(templateNode.toString());
// 获取 panels 数组
JSONArray panels = jsonObject.getJSONArray("panels");
JSONObject panel = panels.getJSONObject(0);
// 获取 printElements 数组
JSONArray printElements = panel.getJSONArray("printElements");
for (int i = 0; i < printElements.size(); i++) {
JSONObject printElement = printElements.getJSONObject(i);
JSONObject options = printElement.getJSONObject("options");
if (options.containsKey("testData")) {
if (options.get("title").equals("晶科二维码")) {
String number1 = psletters + psdigits1;
options.put("testData", number1);
options.put("title", "");
printElement.put("options", options);
} else if (options.get("testData").equals("瓶号")) {
String number1 = psletters + psdigits1;
options.put("title", number1);
printElement.put("options", options);
} else if (options.get("testData").equals("晶澳瓶号")) {
String number1 = psletters + psdigits;
options.put("testData", number1 + ",2");
printElement.put("options", options);
}
} else {
continue;
}
}
jsonObject.put("type", 1);
requireSucess = true;
// 输出 panels 数据
SendPrintSocket.sendPrint(jsonObject.toString());
log.info("瓶盖打印数据: " + jsonObject.toString());
fbottle_number1 = fbottle_number1 + 1;
String fbottle_number2 = String.valueOf(fbottle_number1);
tickets.setFbottle_number(fbottle_number2);
ticketsMapper.updateById(tickets);
Map map = new HashMap();
map.put("to_command", 200);
map.put("to_message", "");
this.writing(map);
} else {
message = "无请求";
}
}
last_mode = mode;
last_error = error;
last_move = move;
last_task = task;
last_weight = weight;
}
last_mode = mode;
last_error = error;
last_move = move;
last_task = task;
last_weight = weight;
}
public boolean exe_error() {

View File

@@ -17,6 +17,7 @@ package org.nl.common.mnt.websocket;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.springframework.stereotype.Component;
import javax.websocket.*;
@@ -100,6 +101,9 @@ public class SendPrintSocket {
ex.printStackTrace();
}
}
// else {
// throw new BadRequestException("当前打印系统未连接");
// }
}
}

View File

@@ -49,6 +49,10 @@ public class Tickets {
* 计划数量
*/
private String planned_quantity;
/**
* 晶科每罐重量
*/
private String bottle_weight;
/**
* 计划开始时间
*/

View File

@@ -50,4 +50,6 @@ public class TicketsDto {
private String fbatch_number;
private String fcarton_number;
private String bottle_weight;
}

View File

@@ -68,7 +68,7 @@ public class TicketsServiceImpl extends ServiceImpl<TicketsMapper, Tickets> impl
.eq("is_delete","1");
wrapper.gt(ObjectUtil.isNotEmpty(param.get("start_time")),"start_time",param.get("start_time"))
.le(ObjectUtil.isNotEmpty(param.get("end_time")),"end_time",param.get("end_time"));
wrapper.orderByAsc("create_time");
wrapper.orderByDesc("create_time");
Page<Tickets> page1 = this.page(new Page<>(page.getPage() + 1, page.getSize()), wrapper);
return page1;
}
@@ -100,6 +100,14 @@ public class TicketsServiceImpl extends ServiceImpl<TicketsMapper, Tickets> impl
String small_model=(String)param.get("small_model");
String bottle_board=(String)param.get("bottle_board");
String carton_board=(String)param.get("carton_board");
if(customer.contains("晶科")){
if(bottle_number.length()!=23){
throw new BadRequestException("瓶盖号不对");
}
if(carton_number.length()!=33){
throw new BadRequestException("纸箱号不对");
}
}
Tickets tickets = BeanUtil.copyProperties(param, Tickets.class);
// DateTime parse = DateUtil.parse(tickets.getStart_time());
// DateTime startTime = parse.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")));
@@ -116,33 +124,26 @@ public class TicketsServiceImpl extends ServiceImpl<TicketsMapper, Tickets> impl
tickets.setFbottle_number("0");
tickets.setFcarton_number("0");
ticketsMapper.insert(tickets);
// if(StrUtil.isNotBlank(device_code)){
// Device device = deviceAppService.findDeviceByCode(device_code);
// if(ObjectUtil.isEmpty(device))throw new BadRequestException("请在系统参数中添加设备");
// if(device.getDeviceDriver() instanceof PrimaryDeviceConveyorDeviceDriver){
// PrimaryDeviceConveyorDeviceDriver primary = (PrimaryDeviceConveyorDeviceDriver) device.getDeviceDriver();
// Map<String, Object> map = new LinkedHashMap<>();
// map.put("to_order_No", ticket_id);
// map.put("to_command",100);
// primary.writing(map);
// log.info("工单下发成功工单号{}",ticket_id);
// }
// }
}
}
@Override
public void submits(Tickets entity) {
Tickets tickets=ticketsMapper.selectById(entity.getTicket_id());
Tickets tickets1=ticketsMapper.ticket();
if(entity.getTicket_status().equals("1")){
throw new BadRequestException("当前工单已经下发");
}
if(tickets1!=null){
throw new BadRequestException("当前已经有正在生产的工单请先结束在下发");
}
Device device = deviceAppService.findDeviceByCode("ZPLC");
if(device.getDeviceDriver() instanceof PrimaryDeviceConveyorDeviceDriver) {
PrimaryDeviceConveyorDeviceDriver primary = (PrimaryDeviceConveyorDeviceDriver) device.getDeviceDriver();
Map<String, Object> map = new LinkedHashMap<>();
map.put("to_order_No", entity.getTicket_id());
map.put("to_ice",entity.getIs_ice());
if(StrUtil.isBlank(entity.getBottle_number())){
map.put("to_qty",entity.getPlanned_quantity());
if(StrUtil.isBlank(entity.getBottle_board())){
map.put("is_printbottle",0);
}else{
map.put("is_printbottle",1);
@@ -161,6 +162,15 @@ public class TicketsServiceImpl extends ServiceImpl<TicketsMapper, Tickets> impl
if(!entity.getTicket_status().equals("1")){
throw new BadRequestException("当前工单状态不是已开工");
}
Device device = deviceAppService.findDeviceByCode("ZPLC");
if(device.getDeviceDriver() instanceof PrimaryDeviceConveyorDeviceDriver) {
PrimaryDeviceConveyorDeviceDriver primary = (PrimaryDeviceConveyorDeviceDriver) device.getDeviceDriver();
Map<String, Object> map = new LinkedHashMap<>();
map.put("to_order_No",0);
map.put("to_command",101);
primary.writing(map);
log.info("工单完成");
}
Tickets tickets=ticketsMapper.selectById(entity.getTicket_id());
tickets.setTicket_status("2");
tickets.setActual_end_time(DateUtil.now());