|
@@ -19,6 +19,7 @@ import com.zkqy.amichi.jd.domain.JdProductionOrder;
|
|
|
import com.zkqy.amichi.jd.domain.MaterialRetentionLogVo;
|
|
|
import com.zkqy.amichi.mapper.*;
|
|
|
import com.zkqy.amichi.utils.WarehouseEntryNumberGenerator;
|
|
|
+import com.zkqy.common.core.domain.R;
|
|
|
import com.zkqy.common.utils.DateUtils;
|
|
|
import com.zkqy.common.utils.StringUtils;
|
|
|
import com.zkqy.execution.produce.dispersed.entity.BpmExecuteNodeLog;
|
|
@@ -81,6 +82,11 @@ public class StationInformationServiceImpl implements IStationInformationService
|
|
|
@Autowired
|
|
|
private RingScanInformationProdOrderScanningMapper prodOrderScanningMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private PlanTaskDetailsMapper planTaskDetailsMapper;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
String aaa="scan@&GWM-001&SMSB001";
|
|
@@ -212,8 +218,7 @@ public class StationInformationServiceImpl implements IStationInformationService
|
|
|
//拿到工位id
|
|
|
StationInformation stationInformation1 = stationInformationsTwo.get(0);
|
|
|
return "工位:"+stationInformation1.getStationName()+" 班组:"+stationInformation1.getTeamName();
|
|
|
- }
|
|
|
- else{
|
|
|
+ } else{
|
|
|
//产品扫描逻辑
|
|
|
String[] content = contentString.split("&");
|
|
|
StationInformation stationInformation=new StationInformation();
|
|
@@ -617,14 +622,273 @@ public class StationInformationServiceImpl implements IStationInformationService
|
|
|
//第一次扫码记录订单扫描记录信息
|
|
|
int i = ringScanInformationFirstMapper.insertRingScanInformationFirst(ringScanInformationFirst);
|
|
|
}
|
|
|
- //先查生产订单日志表没有在查询在新增
|
|
|
+ //先查生产订单日志表没有在新增
|
|
|
+ RingScanInformationProdOrderScanning prodOrderScanning=new RingScanInformationProdOrderScanning();
|
|
|
+ prodOrderScanning.setOrderNumber(ringScanInformation.getOrderNumber());
|
|
|
+ prodOrderScanning.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ List<RingScanInformationProdOrderScanning> ringScanInformationProdOrderScannings =
|
|
|
+ prodOrderScanningMapper.selectRingScanInformationProdOrderScanningList(prodOrderScanning);
|
|
|
+ if(ringScanInformationProdOrderScannings.size()<0){
|
|
|
+ //看看这个生产订单包装节点Or检验
|
|
|
+ String query="{\n" +
|
|
|
+ " \"FormId\": \"PRD_MO\",\n" +
|
|
|
+ " \"FieldKeys\": \"FMaterialId.FNumber\",\n" +
|
|
|
+ " \"FilterString\": [{\"Left\":\"\",\"FieldName\":\"FBillNo\",\"Compare\":\"67\",\"Value\":\""+ringScanInformation.getProductionOrderNumber()+"\",\"Right\":\"\",\"Logic\":0}],\n" +
|
|
|
+ " \"OrderString\": \"\",\n" +
|
|
|
+ " \"TopRowCount\": 0,\n" +
|
|
|
+ " \"StartRow\": 0,\n" +
|
|
|
+ " \"Limit\": 2000,\n" +
|
|
|
+ " \"SubSystemId\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ Map<String, Object> prodListQuery = JSON.parseObject(query, Map.class);
|
|
|
+ String prodListQueryJson = null;
|
|
|
+ try {
|
|
|
+ prodListQueryJson = api.billQuery(JSON.toJSONString(prodListQuery));
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ List<Map> prodListQueryJsonList = JSON.parseArray(prodListQueryJson, Map.class);
|
|
|
+ //如果ERP存在这个生产订单
|
|
|
+ if(prodListQueryJsonList.size()>0){
|
|
|
+ //[{"FMaterialId.FNumber":"1010040050034","FQty":2.0000000000}]
|
|
|
+ //生产订单日志记录
|
|
|
+ prodOrderScanning.setTotalQuantity(prodListQueryJsonList.get(0).get("FQty").toString());//数量
|
|
|
+ if(prodListQueryJsonList.get(0).get("FMaterialId.FNumber").toString().startsWith("1")){
|
|
|
+ prodOrderScanning.setToPackagingorinspection("1");//到包装
|
|
|
+ }else if(prodListQueryJsonList.get(0).get("FMaterialId.FNumber").toString().startsWith("2")){
|
|
|
+ prodOrderScanning.setToPackagingorinspection("2");//到检验
|
|
|
+ }else {
|
|
|
+ prodOrderScanning.setToPackagingorinspection("0");//其他
|
|
|
+ }
|
|
|
+ int i = prodOrderScanningMapper.insertRingScanInformationProdOrderScanning(prodOrderScanning);
|
|
|
+ if(i>0){
|
|
|
+ System.out.println("新增生产订单日志信息成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //插入扫描日志信息
|
|
|
+ int i2 = ringScanInformationMapper.insertRingScanInformation(ringScanInformation);
|
|
|
+
|
|
|
+ if(i2>0){
|
|
|
+ //最后一个节点判定逻辑
|
|
|
+ RingScanInformationProdOrderScanning prodOrderScanning=new RingScanInformationProdOrderScanning();
|
|
|
+ prodOrderScanning.setOrderNumber(ringScanInformation.getOrderNumber());
|
|
|
+ prodOrderScanning.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ List<RingScanInformationProdOrderScanning> ringScanInformationProdOrderScannings =
|
|
|
+ prodOrderScanningMapper.selectRingScanInformationProdOrderScanningList(prodOrderScanning);
|
|
|
+ if(ringScanInformationProdOrderScannings.size()>0){
|
|
|
+ String toPackagingorinspection = ringScanInformationProdOrderScannings.get(0).getToPackagingorinspection();
|
|
|
+ if(toPackagingorinspection.equals("1")){//更新包装数量
|
|
|
+ String toPackagingorinspection1 = ringScanInformationProdOrderScannings.get(0).getPackingQuantity();
|
|
|
+ Double d=Double.valueOf(toPackagingorinspection1)+1;
|
|
|
+ ringScanInformationProdOrderScannings.get(0).setPackingQuantity(d.toString());
|
|
|
+ int i = prodOrderScanningMapper.updateRingScanInformationProdOrderScanning(ringScanInformationProdOrderScannings.get(0));
|
|
|
+ System.out.println("包装节点更新成功");
|
|
|
+ String rk = this.rk(prodOrderScanning);
|
|
|
+ System.out.println(rk);
|
|
|
+ }else {//更新检验数量
|
|
|
+ String toPackagingorinspection1 = ringScanInformationProdOrderScannings.get(0).getInspectionQuantity();
|
|
|
+ Double d=Double.valueOf(toPackagingorinspection1)+1;
|
|
|
+ ringScanInformationProdOrderScannings.get(0).setInspectionQuantity(d.toString());
|
|
|
+ int i = prodOrderScanningMapper.updateRingScanInformationProdOrderScanning(ringScanInformationProdOrderScannings.get(0));
|
|
|
+ System.out.println("检验节点更新成功");
|
|
|
+ String rk = this.rk(prodOrderScanning);
|
|
|
+ System.out.println(rk);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "扫描成功";
|
|
|
+ }else {
|
|
|
+ return "扫描失败";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "扫描成功";
|
|
|
+ }
|
|
|
+
|
|
|
+ private String rk(RingScanInformationProdOrderScanning prodOrderScanning) {
|
|
|
+ return "dddd";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 手持扫描实现
|
|
|
+ * @param contentString
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String stationProductScanningTwo(String contentString) {
|
|
|
+ //扫描人员码信息
|
|
|
+ if(contentString.contains("scan@")){
|
|
|
+ //扫描标记替换为空
|
|
|
+ String replace = contentString.replace("scan@", "");
|
|
|
+ //首先把内容拆分下
|
|
|
+ String[] content = replace.split("&");
|
|
|
+ //人员信息
|
|
|
+ String personneString = content[0];
|
|
|
+ //更改当前人员的扫码信息
|
|
|
+ String[] personneList = personneString.split("#");
|
|
|
+ //设备编码信息
|
|
|
+ String sbMacAddress= content[1];
|
|
|
+ //更改当前工位码的设备信息
|
|
|
+ StationInformation stationInformation = new StationInformation();
|
|
|
+ stationInformation.setDeviceNumber(sbMacAddress);//设备编号
|
|
|
+ List<StationInformation> stationInformations = stationInformationMapper.selectStationInformationListByDEviceNumber(stationInformation);
|
|
|
+ if (stationInformations.size()>0){
|
|
|
+ //重置以前的绑定(手持机在哪我就把那变成空)
|
|
|
+ stationInformationMapper.updateStationInformationDeviceNameAndBluetoothName(stationInformation);
|
|
|
+ }
|
|
|
+ stationInformation.setPersonnelId(personneList[0]);//员工id
|
|
|
+ stationInformation.setPersonnelName(personneList[1]);//员工姓名
|
|
|
+ int i = stationInformationMapper.updateStationInformationByUseIdAndUserName(stationInformation);
|
|
|
+ if(i>0){
|
|
|
+ System.out.println("工位:"+stationInformations.get(0).getStationName()+"人员:"+stationInformations.get(0).getPersonnelName());
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //产品编码&mac地址
|
|
|
+ String[] content = contentString.split("&");
|
|
|
+ //产品编码
|
|
|
+ String s1 = content[0];
|
|
|
+ //mac地址
|
|
|
+ String s2 = content[1];
|
|
|
+
|
|
|
+ //1、判断扫的是不是厂内流转卡
|
|
|
+ /*boolean fjqyD = stationProductScanningRingVo.getContentInformation().contains("D");
|
|
|
+ boolean fjqyZ = stationProductScanningRingVo.getContentInformation().contains("Z");
|
|
|
+ if(!fjqyD||!fjqyZ){return "请扫描相关二维码";}*/
|
|
|
+
|
|
|
+ //2、扫描间距判断
|
|
|
+ /* RingScanInformation ringScanInformationQuery=new RingScanInformation();
|
|
|
+ ringScanInformationQuery.setDeviceNumber(split[1]);//设备Mac地址
|
|
|
+ RingScanInformation ringScanInformations = ringScanInformationMapper.selectRingScanInformationListDateTimeMax(ringScanInformationQuery);
|
|
|
+ if(ringScanInformations!=null){
|
|
|
+ //拿到上次扫描的时间
|
|
|
+ LocalDateTime scanningTime1 = ringScanInformations.getScanningTime();
|
|
|
+ //拿到当前系统时间
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ //计算两次时间的时间差
|
|
|
+ Duration duration = Duration.between(scanningTime1, now);
|
|
|
+ boolean isTwoMinutesPassed = duration.toMinutes() < 1;
|
|
|
+ //判断两次时间是否大于
|
|
|
+ if (isTwoMinutesPassed) {
|
|
|
+ return "同一设备,两分钟之内不能重复扫描";
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ //扫码内容
|
|
|
+ RingScanInformation ringScanInformation=new RingScanInformation();
|
|
|
+ //扫描内容
|
|
|
+ ringScanInformation.setContentInformation(s1);
|
|
|
+ //当前时间
|
|
|
+ ringScanInformation.setScanningTime(LocalDateTime.now());
|
|
|
+ //mac地址
|
|
|
+ ringScanInformation.setDeviceNumber(s2);//mac地址
|
|
|
+
|
|
|
+ //4、查询当前机器绑定的工位信息和人信息
|
|
|
+ StationInformation terminalInformation=new StationInformation();
|
|
|
+ terminalInformation.setDeviceNumber(s2);//mac地址
|
|
|
+ List<StationInformation> stationInformations =
|
|
|
+ stationInformationMapper.selectStationInformationListByDEviceNumber(terminalInformation);
|
|
|
+ if(stationInformations.size()>0){
|
|
|
+ ringScanInformation.setPersonnelName(stationInformations.get(0).getPersonnelName());
|
|
|
+ ringScanInformation.setProcess(stationInformations.get(0).getProcessId()); //人员id
|
|
|
+ ringScanInformation.setProcessName(stationInformations.get(0).getProcessName()); //人员姓名
|
|
|
+ ringScanInformation.setStationId(stationInformations.get(0).getId().toString()); //工位id
|
|
|
+ ringScanInformation.setStationName(stationInformations.get(0).getStationName());//工位名称
|
|
|
+ }
|
|
|
+ String nativeNumber="";
|
|
|
+ if(s1.contains("Z")){nativeNumber = s1.replace("Z", "");}
|
|
|
+ if(s1.contains("D")){nativeNumber=s1.replace("D","");}
|
|
|
+ if(StringUtils.isNotNull(nativeNumber)&&nativeNumber!=""){
|
|
|
+ //取值真实的扫描内容
|
|
|
+ ringScanInformation.setNativeNumbering(nativeNumber);
|
|
|
+ }else {
|
|
|
+ //扫描内容---直接就是产品码
|
|
|
+ ringScanInformation.setNativeNumbering(s1);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //根据扫描内容拿到生产订单号和订单号
|
|
|
+ String queryStringOrderNumberAndProductionOrderNumber="{\n" +
|
|
|
+ " \"FormId\": \"PRD_MO\",\n" +
|
|
|
+ " \"FieldKeys\": \"FSaleOrderNo,FBillNo\",\n" +
|
|
|
+ " \"FilterString\": [{\"Left\":\"\",\"FieldName\":\"FSerialNo\",\"Compare\":\"17\",\"Value\":\""+ringScanInformation.getNativeNumbering()+"\",\"Right\":\"\",\"Logic\":0}],\n" +
|
|
|
+ " \"OrderString\": \"\",\n" +
|
|
|
+ " \"TopRowCount\": 0,\n" +
|
|
|
+ " \"StartRow\": 0,\n" +
|
|
|
+ " \"Limit\": 2000,\n" +
|
|
|
+ " \"SubSystemId\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ Map<String, Object> map = JSON.parseObject(queryStringOrderNumberAndProductionOrderNumber, Map.class);
|
|
|
+ K3CloudApi api = new K3CloudApi();
|
|
|
+ String resultJson = null;
|
|
|
+ try {
|
|
|
+ resultJson = api.billQuery(JSON.toJSONString(map));
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断内不为空
|
|
|
+ if(resultJson!=""&resultJson!="[]"){
|
|
|
+ List<JdProductionOrder> jdProductionOrders = JSON.parseArray(resultJson, JdProductionOrder.class);
|
|
|
+ if(jdProductionOrders.size()>0){
|
|
|
+ //需求单据号
|
|
|
+ ringScanInformation.setOrderNumber(jdProductionOrders.get(0).getDemandDocument());
|
|
|
+ //生产订单号
|
|
|
+ ringScanInformation.setProductionOrderNumber(jdProductionOrders.get(0).getDocumentNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(StringUtils.isNotNull(ringScanInformation.getOrderNumber())){
|
|
|
+ //--记录第一扫描(将来第一扫描的单据记录)
|
|
|
+ RingScanInformationFirst ringScanInformationFirst=new RingScanInformationFirst();
|
|
|
+ ringScanInformationFirst.setOrderNumber(ringScanInformation.getOrderNumber());
|
|
|
+ List<RingScanInformationFirst> ringScanInformationFirsts = ringScanInformationFirstMapper.selectRingScanInformationFirstList(ringScanInformationFirst);
|
|
|
+ //订单扫描记录
|
|
|
+ if(ringScanInformationFirsts.size()<=0){
|
|
|
+ ringScanInformationFirst.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ ringScanInformationFirst.setStatus("1");
|
|
|
+ ringScanInformationFirst.setStartTime(LocalDateTime.now());//开始时间
|
|
|
+ //查询这个订单的总数量是多少
|
|
|
+ String sa="{\n" +
|
|
|
+ " \"FormId\": \"SAL_SaleOrder\",\n" +
|
|
|
+ " \"FieldKeys\": \"FBillNo,FQty\",\n" +
|
|
|
+ " \"FilterString\": [{\"Left\":\"\",\"FieldName\":\"FBillNo\",\"Compare\":\"17\",\"Value\":\""+ringScanInformation.getOrderNumber()+"\",\"Right\":\"\",\"Logic\":0}],\n" +
|
|
|
+ " \"OrderString\": \"\",\n" +
|
|
|
+ " \"TopRowCount\": 0,\n" +
|
|
|
+ " \"StartRow\": 0,\n" +
|
|
|
+ " \"Limit\": 2000,\n" +
|
|
|
+ " \"SubSystemId\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ Map<String, Object> mapTotal = JSON.parseObject(sa, Map.class);
|
|
|
+ String resultJsonTotal = null;
|
|
|
+ try {
|
|
|
+ resultJsonTotal = api.billQuery(JSON.toJSONString(mapTotal));
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ List<Map> mapListTotal = JSON.parseArray(resultJsonTotal, Map.class);
|
|
|
+ if(mapListTotal.size()<=0){
|
|
|
+ return "扫码失败订单已关闭";
|
|
|
+ }
|
|
|
+ Double totalAmount = mapListTotal.stream()
|
|
|
+ .filter(map1 -> map1.containsKey("FQty")) // 确保 map 中包含 "amount" 字段
|
|
|
+ .mapToDouble(map1 -> ((Number) map1.get("FQty")).doubleValue()) // 将 "amount" 字段转换为 double
|
|
|
+ .sum(); // 求和
|
|
|
+
|
|
|
+ ringScanInformationFirst.setTotalQuantity(String.valueOf(totalAmount.intValue()));
|
|
|
+ //第一次扫码记录订单扫描记录信息
|
|
|
+ int i = ringScanInformationFirstMapper.insertRingScanInformationFirst(ringScanInformationFirst);
|
|
|
+ }
|
|
|
+ //先查生产订单日志表没有在新增
|
|
|
RingScanInformationProdOrderScanning prodOrderScanning=new RingScanInformationProdOrderScanning();
|
|
|
prodOrderScanning.setOrderNumber(ringScanInformation.getOrderNumber());
|
|
|
prodOrderScanning.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
List<RingScanInformationProdOrderScanning> ringScanInformationProdOrderScannings =
|
|
|
prodOrderScanningMapper.selectRingScanInformationProdOrderScanningList(prodOrderScanning);
|
|
|
if(ringScanInformationProdOrderScannings.size()<0){
|
|
|
- //看看这个生产订单包装节点Or
|
|
|
+ //看看这个生产订单包装节点Or检验
|
|
|
String query="{\n" +
|
|
|
" \"FormId\": \"PRD_MO\",\n" +
|
|
|
" \"FieldKeys\": \"FMaterialId.FNumber\",\n" +
|
|
@@ -651,7 +915,7 @@ public class StationInformationServiceImpl implements IStationInformationService
|
|
|
if(prodListQueryJsonList.get(0).get("FMaterialId.FNumber").toString().startsWith("1")){
|
|
|
prodOrderScanning.setToPackagingorinspection("1");//到包装
|
|
|
}else if(prodListQueryJsonList.get(0).get("FMaterialId.FNumber").toString().startsWith("2")){
|
|
|
- prodOrderScanning.setToPackagingorinspection("2");//到入库
|
|
|
+ prodOrderScanning.setToPackagingorinspection("2");//到检验
|
|
|
}else {
|
|
|
prodOrderScanning.setToPackagingorinspection("0");//其他
|
|
|
}
|
|
@@ -662,7 +926,10 @@ public class StationInformationServiceImpl implements IStationInformationService
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ //插入扫描日志信息
|
|
|
int i2 = ringScanInformationMapper.insertRingScanInformation(ringScanInformation);
|
|
|
+
|
|
|
if(i2>0){
|
|
|
//最后一个节点判定逻辑
|
|
|
RingScanInformationProdOrderScanning prodOrderScanning=new RingScanInformationProdOrderScanning();
|
|
@@ -671,11 +938,23 @@ public class StationInformationServiceImpl implements IStationInformationService
|
|
|
List<RingScanInformationProdOrderScanning> ringScanInformationProdOrderScannings =
|
|
|
prodOrderScanningMapper.selectRingScanInformationProdOrderScanningList(prodOrderScanning);
|
|
|
if(ringScanInformationProdOrderScannings.size()>0){
|
|
|
- //得到
|
|
|
String toPackagingorinspection = ringScanInformationProdOrderScannings.get(0).getToPackagingorinspection();
|
|
|
- if(toPackagingorinspection.equals("1")){//判断完是到包装还是到检验
|
|
|
- //更新检验或者入库数量
|
|
|
- //
|
|
|
+ if(toPackagingorinspection.equals("1")){//更新包装数量
|
|
|
+ String toPackagingorinspection1 = ringScanInformationProdOrderScannings.get(0).getPackingQuantity();
|
|
|
+ Double d=Double.valueOf(toPackagingorinspection1)+1;
|
|
|
+ ringScanInformationProdOrderScannings.get(0).setPackingQuantity(d.toString());
|
|
|
+ int i = prodOrderScanningMapper.updateRingScanInformationProdOrderScanning(ringScanInformationProdOrderScannings.get(0));
|
|
|
+ System.out.println("包装节点更新成功");
|
|
|
+ String rk = this.rk(prodOrderScanning);
|
|
|
+ System.out.println(rk);
|
|
|
+ }else {//更新检验数量
|
|
|
+ String toPackagingorinspection1 = ringScanInformationProdOrderScannings.get(0).getInspectionQuantity();
|
|
|
+ Double d=Double.valueOf(toPackagingorinspection1)+1;
|
|
|
+ ringScanInformationProdOrderScannings.get(0).setInspectionQuantity(d.toString());
|
|
|
+ int i = prodOrderScanningMapper.updateRingScanInformationProdOrderScanning(ringScanInformationProdOrderScannings.get(0));
|
|
|
+ System.out.println("检验节点更新成功");
|
|
|
+ String rk = this.rk(prodOrderScanning);
|
|
|
+ System.out.println(rk);
|
|
|
}
|
|
|
}
|
|
|
return "扫描成功";
|
|
@@ -684,7 +963,307 @@ public class StationInformationServiceImpl implements IStationInformationService
|
|
|
}
|
|
|
}
|
|
|
return "扫描成功";
|
|
|
- };
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public String stationProductScanningTwo2(String contentString) {
|
|
|
+ //扫描人员码信息
|
|
|
+ if(contentString.contains("scan@")){
|
|
|
+ //扫描标记替换为空
|
|
|
+ String replace = contentString.replace("scan@", "");
|
|
|
+ //首先把内容拆分下
|
|
|
+ String[] content = replace.split("&");
|
|
|
+ //人员信息
|
|
|
+ String personneString = content[0];
|
|
|
+ //更改当前人员的扫码信息
|
|
|
+ String[] personneList = personneString.split("#");
|
|
|
+ //设备编码信息
|
|
|
+ String sbMacAddress= content[1];
|
|
|
+ //更改当前工位码的设备信息
|
|
|
+ StationInformation stationInformation = new StationInformation();
|
|
|
+ stationInformation.setDeviceNumber(sbMacAddress);//设备编号
|
|
|
+ List<StationInformation> stationInformations = stationInformationMapper.selectStationInformationListByDEviceNumber(stationInformation);
|
|
|
+
|
|
|
+ if (stationInformations.size()>0){
|
|
|
+ //重置以前的绑定(手持机在哪我就把那变成空)
|
|
|
+ stationInformationMapper.updateStationInformationDeviceNameAndBluetoothName(stationInformation);
|
|
|
+ }
|
|
|
+ stationInformation.setPersonnelId(personneList[0]);//员工id
|
|
|
+ stationInformation.setPersonnelName(personneList[1]);//员工姓名
|
|
|
+ int i = stationInformationMapper.updateStationInformationByUseIdAndUserName(stationInformation);
|
|
|
+ if(i>0){
|
|
|
+ System.out.println("手持设备绑定成功");
|
|
|
+ }
|
|
|
+ StationInformation stationInformation2 = new StationInformation();
|
|
|
+ stationInformation2.setPersonnelId(personneList[0]);//设备编号
|
|
|
+ List<StationInformation> stationInformations1 = stationInformationMapper.selectStationInformationList(stationInformation2);
|
|
|
+ System.out.println("工位:"+stationInformations1.get(0).getStationName()+"人员:"+stationInformations1.get(0).getPersonnelName());
|
|
|
+ return "工位:"+stationInformations1.get(0).getStationName()+",人员:"+stationInformations1.get(0).getPersonnelName()+"-手持设备绑定成功";
|
|
|
+ }else {
|
|
|
+ //产品编码&mac地址
|
|
|
+ String[] content = contentString.split("&");
|
|
|
+ //产品编码
|
|
|
+ String s1 = content[0];
|
|
|
+ //mac地址
|
|
|
+ String s2 = content[1];
|
|
|
+
|
|
|
+ //1、判断扫的是不是厂内流转卡
|
|
|
+ /*boolean fjqyD = stationProductScanningRingVo.getContentInformation().contains("D");
|
|
|
+ boolean fjqyZ = stationProductScanningRingVo.getContentInformation().contains("Z");
|
|
|
+ if(!fjqyD||!fjqyZ){return "请扫描相关二维码";}*/
|
|
|
+
|
|
|
+ //2、扫描间距判断
|
|
|
+ /* RingScanInformation ringScanInformationQuery=new RingScanInformation();
|
|
|
+ ringScanInformationQuery.setDeviceNumber(split[1]);//设备Mac地址
|
|
|
+ RingScanInformation ringScanInformations = ringScanInformationMapper.selectRingScanInformationListDateTimeMax(ringScanInformationQuery);
|
|
|
+ if(ringScanInformations!=null){
|
|
|
+ //拿到上次扫描的时间
|
|
|
+ LocalDateTime scanningTime1 = ringScanInformations.getScanningTime();
|
|
|
+ //拿到当前系统时间
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ //计算两次时间的时间差
|
|
|
+ Duration duration = Duration.between(scanningTime1, now);
|
|
|
+ boolean isTwoMinutesPassed = duration.toMinutes() < 1;
|
|
|
+ //判断两次时间是否大于
|
|
|
+ if (isTwoMinutesPassed) {
|
|
|
+ return "同一设备,两分钟之内不能重复扫描";
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ //扫码内容
|
|
|
+ RingScanInformation ringScanInformation=new RingScanInformation();
|
|
|
+ //扫描内容
|
|
|
+ ringScanInformation.setContentInformation(s1);
|
|
|
+ //当前时间
|
|
|
+ ringScanInformation.setScanningTime(LocalDateTime.now());
|
|
|
+ //mac地址
|
|
|
+ ringScanInformation.setDeviceNumber(s2);//mac地址
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //4、查询当前机器绑定的工位信息和人信息
|
|
|
+ StationInformation terminalInformation=new StationInformation();
|
|
|
+ terminalInformation.setDeviceNumber(s2);//mac地址
|
|
|
+ List<StationInformation> stationInformations =
|
|
|
+ stationInformationMapper.selectStationInformationListByDEviceNumber(terminalInformation);
|
|
|
+ if(stationInformations.size()>0){
|
|
|
+ ringScanInformation.setPersonnelName(stationInformations.get(0).getPersonnelName());//人员姓名
|
|
|
+ ringScanInformation.setProcess(stationInformations.get(0).getProcessId()); //工序id
|
|
|
+ ringScanInformation.setProcessName(stationInformations.get(0).getProcessName()); //工序名称
|
|
|
+ ringScanInformation.setStationId(stationInformations.get(0).getId().toString()); //工位id
|
|
|
+ ringScanInformation.setStationName(stationInformations.get(0).getStationName());//工位名称
|
|
|
+ }else {//当前没有绑定Mac地址直接返回
|
|
|
+ return "当前手持机未绑定工位人员信息-请先扫描人员码信息";
|
|
|
+ }
|
|
|
+
|
|
|
+ //验证重复扫描
|
|
|
+ RingScanInformation prodOrderScanning=new RingScanInformation();
|
|
|
+ prodOrderScanning.setContentInformation(s1);
|
|
|
+ prodOrderScanning.setProcessName(ringScanInformation.getProcessName());
|
|
|
+ List<RingScanInformation> ringScanInformations = ringScanInformationMapper.selectRingScanInformationList(prodOrderScanning);
|
|
|
+ if(ringScanInformations.size()>0){
|
|
|
+ return "工位:"+stationInformations.get(0).getStationName()+","+"人员:"+stationInformations.get(0).getPersonnelName()+"-"+"当前产品工序以扫描,不能重复扫描";
|
|
|
+ }
|
|
|
+ String nativeNumber="";
|
|
|
+ if(s1.contains("Z")){nativeNumber = s1.replace("Z", "");}
|
|
|
+ if(s1.contains("D")){nativeNumber=s1.replace("D","");}
|
|
|
+ if(StringUtils.isNotNull(nativeNumber)&&nativeNumber!=""){
|
|
|
+ //取值真实的扫描内容
|
|
|
+ ringScanInformation.setNativeNumbering(nativeNumber);
|
|
|
+ }else {
|
|
|
+ //扫描内容---直接就是产品码
|
|
|
+ ringScanInformation.setNativeNumbering(s1);
|
|
|
+ }
|
|
|
+ //根据扫描内容拿到生产订单号和订单号--查询流转卡序列号
|
|
|
+ ProductionCardFlow productionCardFlow=new ProductionCardFlow();
|
|
|
+ productionCardFlow.setSerialNumber(ringScanInformation.getNativeNumbering());//流转卡序列号
|
|
|
+ List<ProductionCardFlow> productionCardFlows = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow);
|
|
|
+ if(productionCardFlows.size()>0){
|
|
|
+ ProductionCardFlow productionCardFlow1 = productionCardFlows.get(0);
|
|
|
+ //需求单据号
|
|
|
+ ringScanInformation.setOrderNumber(productionCardFlow1.getProductionOrderListId());
|
|
|
+ //生产订单号
|
|
|
+ ringScanInformation.setProductionOrderNumber(productionCardFlow1.getDemandDocumentNumber());
|
|
|
+ }else {
|
|
|
+ System.out.println("erp未同步当前流转卡序列号");
|
|
|
+ return "请先同步-ERP数据";
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询生产订单日志里有没有这个生产订单有就不添加了
|
|
|
+ RingScanInformationFirst ringScanInformationFirst=new RingScanInformationFirst();
|
|
|
+ ringScanInformationFirst.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ List<RingScanInformationFirst> ringScanInformationFirsts = ringScanInformationFirstMapper.selectRingScanInformationFirstList(ringScanInformationFirst);
|
|
|
+ if(ringScanInformationFirsts.size()<=0){
|
|
|
+ RingScanInformationFirst ringScanInformationFirst1=new RingScanInformationFirst();
|
|
|
+ ringScanInformationFirst1.setOrderNumber(ringScanInformation.getOrderNumber());//订单号
|
|
|
+ ringScanInformationFirst1.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());//生产订单号
|
|
|
+ ringScanInformationFirst1.setStatus("1");
|
|
|
+ ringScanInformationFirst1.setStartTime(LocalDateTime.now());//开始时间
|
|
|
+
|
|
|
+ //有多少个序列号就是有多少台
|
|
|
+ ProductionCardFlow productionCardFlow2=new ProductionCardFlow();
|
|
|
+ productionCardFlow2.setProductionOrderListId(ringScanInformation.getOrderNumber());//订单号
|
|
|
+ List<ProductionCardFlow> productionCardFlows2 = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow2);
|
|
|
+ ringScanInformationFirst1.setTotalQuantity(String.valueOf(productionCardFlows2.size()));//订单的总数
|
|
|
+
|
|
|
+ //判断当前生产订单 到包装还是检验
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setDemandDocument(ringScanInformation.getProductionOrderNumber());
|
|
|
+ List<PlanTaskDetails> planTaskDetails1 = planTaskDetailsService.selectPlanTaskDetailsList(planTaskDetails);
|
|
|
+
|
|
|
+ Double v = Double.parseDouble(planTaskDetails1.get(0).getQuantity());
|
|
|
+ Integer i1 = v.intValue();
|
|
|
+ ringScanInformationFirst1.setProductionOrderTotalQuantity(i1.toString());//生产订单的总数
|
|
|
+
|
|
|
+ if(planTaskDetails1.size()>0){
|
|
|
+ PlanTaskDetails planTaskDetails2 = planTaskDetails1.get(0);
|
|
|
+ String materialId = planTaskDetails2.getMaterialId();
|
|
|
+ if(materialId.startsWith("1")){//更新包装数量
|
|
|
+ ringScanInformationFirst1.setPackingOrInspection("1");//包装
|
|
|
+ }else if(materialId.startsWith("102")) {
|
|
|
+ ringScanInformationFirst1.setPackingOrInspection("2"); //检验
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //扫一次产品记录一次
|
|
|
+ int i = ringScanInformationFirstMapper.insertRingScanInformationFirst(ringScanInformationFirst1);
|
|
|
+
|
|
|
+ //有可能订单数量就是一台,我扫一回订单就结束掉了
|
|
|
+
|
|
|
+ }else {
|
|
|
+ //更新包装或者检验的数量
|
|
|
+ //拿到老的包装数量
|
|
|
+ RingScanInformationFirst ringScanInformationFirst1=new RingScanInformationFirst();
|
|
|
+ ringScanInformationFirst1.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ List<RingScanInformationFirst> ringScanInformationFirsts1 = ringScanInformationFirstMapper.selectRingScanInformationFirstList(ringScanInformationFirst1);
|
|
|
+ RingScanInformationFirst ringScanInformationFirstNumber = ringScanInformationFirsts1.get(0);
|
|
|
+
|
|
|
+ //判断当前生产订单 到包装还是检验
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setDemandDocument(ringScanInformation.getProductionOrderNumber());
|
|
|
+ List<PlanTaskDetails> planTaskDetails1 = planTaskDetailsService.selectPlanTaskDetailsList(planTaskDetails);
|
|
|
+ if(planTaskDetails1.size()>0){
|
|
|
+ PlanTaskDetails planTaskDetails2 = planTaskDetails1.get(0);
|
|
|
+ String materialId = planTaskDetails2.getMaterialId();
|
|
|
+ if(materialId.startsWith("1")&&ringScanInformation.getProcessName().equals("包装")){//1卡头并且当前工序未包装,扫描信息为,更新包装数量
|
|
|
+ RingScanInformationFirst newRingScanInformationFirst = getRingScanInformationFirst(ringScanInformationFirstNumber.getPackingQuantity(), ringScanInformation,"1");
|
|
|
+ ringScanInformationFirstMapper.updateRingScanInformationFirstByproductionOrderNumber(newRingScanInformationFirst);
|
|
|
+ this.generateWarehouseWarrant(ringScanInformation.getProductionOrderNumber());
|
|
|
+ }else if(materialId.startsWith("102")&&ringScanInformation.getProcessName().equals("检验")) {
|
|
|
+ RingScanInformationFirst newRingScanInformationFirst = getRingScanInformationFirst(ringScanInformationFirstNumber.getInspectionQuantity(), ringScanInformation,"2");
|
|
|
+ ringScanInformationFirstMapper.updateRingScanInformationFirstByproductionOrderNumber(newRingScanInformationFirst);
|
|
|
+ this.generateWarehouseWarrant(ringScanInformation.getProductionOrderNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //插入扫描日志前判定当前销售订单是否变为生成完成
|
|
|
+
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setStatus("1");//状态
|
|
|
+ planTaskDetails.setDemandDocument(ringScanInformation.getProductionOrderNumber());//生产订单
|
|
|
+ List<PlanTaskDetails> planTaskDetails1 = planTaskDetailsMapper.selectPlanTaskDetailsList(planTaskDetails);
|
|
|
+ if(planTaskDetails1.size()<=0){
|
|
|
+ //生产订单状态
|
|
|
+ RingScanInformationFirst ringScanInformationFirst1=new RingScanInformationFirst();
|
|
|
+ ringScanInformationFirst1.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ ringScanInformationFirst1.setStatus("2");
|
|
|
+ ringScanInformationFirstMapper.updateRingScanInformationFirstByproductionOrderNumber(ringScanInformationFirst1);
|
|
|
+ }
|
|
|
+ ProductionPlanningManagement productionPlanningManagement=new ProductionPlanningManagement();
|
|
|
+ productionPlanningManagement.setOrderNumber(ringScanInformation.getOrderNumber());
|
|
|
+ List<ProductionPlanningManagement> productionPlanningManagements = productionPlanningManagementMapper
|
|
|
+ .selectProductionPlanningManagementList(productionPlanningManagement);
|
|
|
+ if(productionPlanningManagements.size()>0){
|
|
|
+ ProductionPlanningManagement productionPlanningManagement1 = productionPlanningManagements.get(0);
|
|
|
+ //订单号
|
|
|
+ PlanTaskDetails planTaskDetailsTwo=new PlanTaskDetails();
|
|
|
+ planTaskDetailsTwo.setPlanId(productionPlanningManagement1.getId());//生产订单
|
|
|
+ planTaskDetailsTwo.setStatus("1");
|
|
|
+ List<PlanTaskDetails> planTaskDetailsPlan = planTaskDetailsMapper.selectPlanTaskDetailsList(planTaskDetailsTwo);
|
|
|
+ if(planTaskDetailsPlan.size()<=0){
|
|
|
+ PlanTaskDetails planTaskDetails2=new PlanTaskDetails();
|
|
|
+ planTaskDetails2.setDemandDocument(ringScanInformation.getProductionOrderNumber());//生产订单
|
|
|
+ List<PlanTaskDetails> planTaskDetails2s = planTaskDetailsMapper.selectPlanTaskDetailsList(planTaskDetails2);
|
|
|
+ //改订单状态
|
|
|
+ ProductionPlanningManagement productionPlanningManagementUpdate=new ProductionPlanningManagement();
|
|
|
+ productionPlanningManagementUpdate.setOrderNumber(ringScanInformation.getOrderNumber());
|
|
|
+ productionPlanningManagementUpdate.setTaskStatus("3");
|
|
|
+ productionPlanningManagementUpdate.setId(planTaskDetails2s.get(0).getPlanId());
|
|
|
+ productionPlanningManagementMapper.updateProductionPlanningManagement(productionPlanningManagementUpdate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //插入扫描日志信息
|
|
|
+ int i2 = ringScanInformationMapper.insertRingScanInformation(ringScanInformation);
|
|
|
+ return "工位:"+ringScanInformation.getStationName()+","+"人员:"+ringScanInformation.getPersonnelName()+"-"+"流转卡扫描成功";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新包装还是更新检验
|
|
|
+ * @param ringScanInformationFirstNumber
|
|
|
+ * @param ringScanInformation
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static RingScanInformationFirst getRingScanInformationFirst(String ringScanInformationFirstNumber, RingScanInformation ringScanInformation,String type) {
|
|
|
+ if(type.equals("1")){
|
|
|
+ String inspectionQuantity = ringScanInformationFirstNumber;
|
|
|
+ Double newInspectionQuantity = Double.parseDouble(inspectionQuantity) + 1;
|
|
|
+ Integer i1 = newInspectionQuantity.intValue();
|
|
|
+ RingScanInformationFirst newRingScanInformationFirst = new RingScanInformationFirst();
|
|
|
+ newRingScanInformationFirst.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ newRingScanInformationFirst.setPackingQuantity(i1.toString());
|
|
|
+ return newRingScanInformationFirst;
|
|
|
+ }else {
|
|
|
+ String inspectionQuantity = ringScanInformationFirstNumber;
|
|
|
+ Double newInspectionQuantity = Double.parseDouble(inspectionQuantity) + 1;
|
|
|
+ Integer i2 = newInspectionQuantity.intValue();
|
|
|
+ RingScanInformationFirst newRingScanInformationFirst = new RingScanInformationFirst();
|
|
|
+ newRingScanInformationFirst.setProductionOrderNumber(ringScanInformation.getProductionOrderNumber());
|
|
|
+ newRingScanInformationFirst.setInspectionQuantity(i2.toString());
|
|
|
+ return newRingScanInformationFirst;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public String generateWarehouseWarrant(String productionOrderNumber){
|
|
|
+ RingScanInformationFirst newRingScanInformationFirst = new RingScanInformationFirst();
|
|
|
+ newRingScanInformationFirst.setProductionOrderNumber(productionOrderNumber);;
|
|
|
+ List<RingScanInformationFirst> ringScanInformationFirsts1 = ringScanInformationFirstMapper.selectRingScanInformationFirstList(newRingScanInformationFirst);
|
|
|
+ if (ringScanInformationFirsts1.size()>0){
|
|
|
+ RingScanInformationFirst ringScanInformationFirst = ringScanInformationFirsts1.get(0);
|
|
|
+ String packingOrInspection = ringScanInformationFirst.getPackingOrInspection();
|
|
|
+ if(packingOrInspection.equals("1")){
|
|
|
+ //看包装跟当前生产订单总数量是否相等
|
|
|
+ if(ringScanInformationFirst.getPackingQuantity().equals(ringScanInformationFirst.getProductionOrderTotalQuantity())){
|
|
|
+ //生成入库单
|
|
|
+ System.out.println("包装生成入库单");
|
|
|
+ //改当前生产订单的状态
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setDemandDocument(productionOrderNumber);
|
|
|
+ planTaskDetails.setStatus("2");//生产完成
|
|
|
+ int i = planTaskDetailsMapper.updatePlanTaskDetailsByDemandDocument(planTaskDetails);
|
|
|
+ }
|
|
|
+ }else if(packingOrInspection.equals("2")){
|
|
|
+ //看包装跟当前生产订单总数量是否相等
|
|
|
+ if(ringScanInformationFirst.getInspectionQuantity().equals(ringScanInformationFirst.getProductionOrderTotalQuantity())){
|
|
|
+ //生成入库单
|
|
|
+ System.out.println("包装生成入库单");
|
|
|
+ //改当前生产订单的状态
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setDemandDocument(productionOrderNumber);
|
|
|
+ planTaskDetails.setStatus("2");//生产完成
|
|
|
+ int i = planTaskDetailsMapper.updatePlanTaskDetailsByDemandDocument(planTaskDetails);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "数量够了入库";
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 指环王扫描信息hmc
|