Explorar el Código

Merge branch 'master' of http://47.100.37.243:10080/ZHOU/yunsu

sunyadv hace 5 años
padre
commit
e59cb6aa5b
Se han modificado 19 ficheros con 485 adiciones y 169 borrados
  1. 7 5
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldEquipmentController.java
  2. 108 0
      cloud-model/src/main/java/com/hssx/cloudmodel/entity/MouldDownPacket.java
  3. 2 0
      cloud-model/src/main/java/com/hssx/cloudmodel/entity/vo/MouldEquipmentVO.java
  4. 16 0
      cloud-model/src/main/java/com/hssx/cloudmodel/mapper/MouldDownPacketMapper.java
  5. 16 0
      cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldDownPacketService.java
  6. 1 1
      cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldEquipmentService.java
  7. 20 0
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldDownPacketServiceImpl.java
  8. 52 13
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldEquipmentServiceImpl.java
  9. 73 0
      cloud-model/src/main/java/com/hssx/cloudmodel/util/CRC16Util.java
  10. 1 1
      cloud-model/src/main/java/com/hssx/cloudmodel/util/CodeGenerator.java
  11. 2 2
      cloud-model/src/main/resources/application-prod.properties
  12. 19 0
      cloud-model/src/main/resources/mapper/MouldDownPacketMapper.xml
  13. 2 2
      cloud-model/src/test/java/com/hssx/cloudmodel/CloudModelApplicationTests.java
  14. 2 2
      cloud-socket/.settings/org.eclipse.wst.common.component
  15. 83 98
      cloud-socket/src/com/js/kbt/controller/WeiXinUserInfoController.java
  16. 1 1
      cloud-socket/src/com/js/kbt/mapper/TimeCalibrationRecordMapper.java
  17. 77 41
      cloud-socket/src/com/js/kbt/socket/UserHandler.java
  18. 1 1
      cloud-socket/src/com/js/kbt/util/CRC16Util.java
  19. 2 2
      target/classes/main/resources/application-prod.properties

+ 7 - 5
cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldEquipmentController.java

@@ -71,19 +71,21 @@ public class MouldEquipmentController {
     }
 
     /**
-     * 启用设备
-     * 传参 id 设备id ,isUse 启用传 1
-     * @return
+     * 云平台下行配置数据包接口
+     * lowPowerLimit 低电量报警限值:(1 字节,十六进制)如:1e=31
+     * hotAlarmLimit 热报警限值:(1 字节,十六进制)如:50=80
+     * isUse:0-停止,1-启动
+     * equipmentNo 设备编号(可能是多个或者一个)多个以“,”隔开传  如:"123456"(单个),"123456,456878,123589"(多个)
      */
     @ApiOperation("启用设备")
     @RequestMapping("/use")
     @ResponseBody
-    public HttpRespMsg use(MouldEquipment mouldEquipment,String token) {
+    public HttpRespMsg use(MouldEquipmentVO mouldEquipmentVO,String token) {
         HttpRespMsg msg = new HttpRespMsg();
         QueryWrapper<User> qw = new QueryWrapper<>();
         qw.eq("head_imgurl",token);
         User user = userService.getOne(qw);
-        msg = mouldEquipmentService.isUse(mouldEquipment,user);
+        msg = mouldEquipmentService.isUse(mouldEquipmentVO,user);
         return msg;
     }
 

+ 108 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/entity/MouldDownPacket.java

@@ -0,0 +1,108 @@
+package com.hssx.cloudmodel.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-10-14
+ */
+public class MouldDownPacket extends Model<MouldDownPacket> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 下发数据表主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备编号
+     */
+    @TableField("equipment_no")
+    private String equipmentNo;
+
+    /**
+     * 下发的字符串
+     */
+    @TableField("packet_str")
+    private String packetStr;
+
+    /**
+     * 创建时间
+     */
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    /**
+     * 是否已下发
+     */
+    @TableField("is_use")
+    private Integer isUse;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getEquipmentNo() {
+        return equipmentNo;
+    }
+
+    public void setEquipmentNo(String equipmentNo) {
+        this.equipmentNo = equipmentNo;
+    }
+
+    public String getPacketStr() {
+        return packetStr;
+    }
+
+    public void setPacketStr(String packetStr) {
+        this.packetStr = packetStr;
+    }
+
+    public LocalDateTime getIndate() {
+        return indate;
+    }
+
+    public void setIndate(LocalDateTime indate) {
+        this.indate = indate;
+    }
+
+    public Integer getIsUse() {
+        return isUse;
+    }
+
+    public void setIsUse(Integer isUse) {
+        this.isUse = isUse;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "MouldDownPacket{" +
+        "id=" + id +
+        ", equipmentNo=" + equipmentNo +
+        ", packetStr=" + packetStr +
+        ", indate=" + indate +
+        ", isUse=" + isUse +
+        "}";
+    }
+}

+ 2 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/entity/vo/MouldEquipmentVO.java

@@ -21,6 +21,8 @@ public class MouldEquipmentVO extends MouldEquipment {
     private Integer mouldId;//模具id
     private String alarmBattery;//报警电量
     private String alarmDegree;//报警温度
+    private Integer lowPowerLimit;//最低电量
+    private Integer hotAlarmLimit;//最高温度
     /**
      * 模具编号
      */

+ 16 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/mapper/MouldDownPacketMapper.java

@@ -0,0 +1,16 @@
+package com.hssx.cloudmodel.mapper;
+
+import com.hssx.cloudmodel.entity.MouldDownPacket;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-10-14
+ */
+public interface MouldDownPacketMapper extends BaseMapper<MouldDownPacket> {
+
+}

+ 16 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldDownPacketService.java

@@ -0,0 +1,16 @@
+package com.hssx.cloudmodel.service;
+
+import com.hssx.cloudmodel.entity.MouldDownPacket;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-10-14
+ */
+public interface MouldDownPacketService extends IService<MouldDownPacket> {
+
+}

+ 1 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldEquipmentService.java

@@ -21,7 +21,7 @@ public interface MouldEquipmentService extends IService<MouldEquipment> {
 
     HttpRespMsg addAndUpdateMouldEquipment(MouldEquipment mouldEquipment, User user);
 
-    HttpRespMsg isUse(MouldEquipment mouldEquipment, User user);
+    HttpRespMsg isUse(MouldEquipmentVO mouldEquipment, User user);
 
     HttpRespMsg getList(User user,PageUtil page,Integer companyId,String keyName);
 

+ 20 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldDownPacketServiceImpl.java

@@ -0,0 +1,20 @@
+package com.hssx.cloudmodel.service.impl;
+
+import com.hssx.cloudmodel.entity.MouldDownPacket;
+import com.hssx.cloudmodel.mapper.MouldDownPacketMapper;
+import com.hssx.cloudmodel.service.MouldDownPacketService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2019-10-14
+ */
+@Service
+public class MouldDownPacketServiceImpl extends ServiceImpl<MouldDownPacketMapper, MouldDownPacket> implements MouldDownPacketService {
+
+}

+ 52 - 13
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldEquipmentServiceImpl.java

@@ -61,9 +61,7 @@ public class MouldEquipmentServiceImpl extends ServiceImpl<MouldEquipmentMapper,
     @Resource
     ProjectApproveMapper projectApproveMapper;
     @Resource
-    CustomCompanyMapper customCompanyMapper;
-    @Resource
-    CompanyMapper companyMapper;
+    MouldDownPacketMapper mouldDownPacketMapper;
     @Resource
     ProjectUserMapper projectUserMapper;
 
@@ -97,21 +95,42 @@ public class MouldEquipmentServiceImpl extends ServiceImpl<MouldEquipmentMapper,
     }
 
     @Override
-    public HttpRespMsg isUse(MouldEquipment mouldEquipment, User user) {
+    public HttpRespMsg isUse(MouldEquipmentVO mouldEquipment, User user) {
         HttpRespMsg msg = new HttpRespMsg();
+        //16进制的转化
+        String lowPowerLimitStr = Integer.toHexString(mouldEquipment.getLowPowerLimit());
+        String hotAlarmLimitStr = Integer.toHexString(mouldEquipment.getHotAlarmLimit());
+        String isUseStr = "0"+Integer.toHexString(mouldEquipment.getIsUse());
         //判断是不是超级管理员,是才可操作
         if (user.getParentId() == 0) {
             //修改设备
-            MouldEquipment newMouldEquipment = mouldEquipmentMapper.selectById(mouldEquipment.getId());
-            if (null == newMouldEquipment.getBelongCompanyId()) {
-                msg.setError("该设备没有所属公司,请添加所属公司后再启用");
-                return msg;
+            String[] split = mouldEquipment.getEquipmentNo().split(",");
+            MouldDownPacket packet = null;
+            String setPacketMessage = "";
+            for (String str : split) {
+                packet = mouldDownPacketMapper.selectOne(new QueryWrapper<MouldDownPacket>().eq("equipment_no", str));
+                MouldEquipment equipment = new MouldEquipment();
+                equipment.setIsUse(mouldEquipment.getIsUse());
+                equipment.setEquipmentNo(mouldEquipment.getEquipmentNo());
+                equipment.setHillNumber(mouldEquipment.getLowPowerLimit()+"");
+                equipment.setTemperature(mouldEquipment.getHotAlarmLimit());
+                mouldEquipmentMapper.update(equipment,new QueryWrapper<MouldEquipment>().eq("equipment_no",str));
+                if(packet != null){
+                    //已经存在更新下发数据包
+                    MouldDownPacket mouldDownPacket = new MouldDownPacket();
+                    mouldDownPacket.setId(packet.getId());
+                    setPacketMessage = downProcessMsg(lowPowerLimitStr,hotAlarmLimitStr,isUseStr);                    mouldDownPacket.setPacketStr(setPacketMessage);
+                    mouldDownPacket.setPacketStr(setPacketMessage);
+                    mouldDownPacket.setIsUse(mouldEquipment.getIsUse());
+                    mouldDownPacketMapper.updateById(mouldDownPacket);
+                }else{
+                    MouldDownPacket mouldDownPacket = new MouldDownPacket();
+                    setPacketMessage = downProcessMsg(lowPowerLimitStr,hotAlarmLimitStr,isUseStr);                    mouldDownPacket.setPacketStr(setPacketMessage);
+                    mouldDownPacket.setPacketStr(setPacketMessage);
+                    mouldDownPacket.setIsUse(mouldEquipment.getIsUse());
+                    mouldDownPacketMapper.insert(mouldDownPacket);
+                }
             }
-            newMouldEquipment.setIsUse(mouldEquipment.getIsUse());
-            LocalDateTime now = LocalDateTime.now();
-            newMouldEquipment.setStartTime(now);
-            newMouldEquipment.setEndTime(now.plusYears(newMouldEquipment.getUseLife()));
-            mouldEquipmentMapper.updateById(newMouldEquipment);
         } else {
             msg.setError("对不起,您不是超级管理员,不具备启用设备的权限");
             return msg;
@@ -404,5 +423,25 @@ public class MouldEquipmentServiceImpl extends ServiceImpl<MouldEquipmentMapper,
         }
     }
 
+    // 下行配置数据包
+    private String downProcessMsg(String lowPowerLimit,String hotAlarmLimit,String isUse) {
+        //"23"不解析
+        if("23".equals(lowPowerLimit)){
+            lowPowerLimit="24";
+        }
+        if("23".equals(hotAlarmLimit)){
+            hotAlarmLimit="24";
+        }
+        if("23".equals(isUse)){
+            isUse="24";
+        }
+        String ret = "FA AF 00 07 "+isUse+" 1e 78 "+lowPowerLimit+" "+hotAlarmLimit+" 00 3C";
+        ret = ret.replaceAll(" ", "");
+        String crcCode = CRC16Util.getCRC(ret);
+        System.out.println("ret===>"+ret);
+        String lastPart = (ret + crcCode).replaceAll("23", "24").replaceAll(" ", "");
+        System.out.println("lastPart===>"+lastPart);
+        return lastPart;
+    }
 
 }

+ 73 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/util/CRC16Util.java

@@ -0,0 +1,73 @@
+package com.hssx.cloudmodel.util;
+public class CRC16Util {
+    /**
+     * 计算CRC16校验码
+     *
+     * @param data 需要校验的字符串
+     * @return 校验码
+     */
+    public static String getCRC(String data) {
+        data = data.replace(" ", "");
+        int len = data.length();
+        if (!(len % 2 == 0)) {
+            return "0000";
+        }
+        int num = len / 2;
+        byte[] para = new byte[num];
+        for (int i = 0; i < num; i++) {
+            int value = Integer.valueOf(data.substring(i * 2, 2 * (i + 1)), 16);
+            para[i] = (byte) value;
+        }
+        return getCRC(para);
+    }
+ 
+ 
+    /**
+     * 计算CRC16校验码
+     *
+     * @param bytes 字节数组
+     * @return {@link String} 校验码
+     * @since 1.0
+     */
+    public static String getCRC(byte[] bytes) {
+        //CRC寄存器全为1
+        int CRC = 0x0000ffff;
+        //多项式校验值
+        int POLYNOMIAL = 0x0000a001;
+        int i, j;
+        for (i = 0; i < bytes.length; i++) {
+            CRC ^= ((int) bytes[i] & 0x000000ff);
+            for (j = 0; j < 8; j++) {
+                if ((CRC & 0x00000001) != 0) {
+                    CRC >>= 1;
+                    CRC ^= POLYNOMIAL;
+                } else {
+                    CRC >>= 1;
+                }
+            }
+        }
+        System.out.println("CRC"+CRC);
+        //结果转换为16进制
+        String result = Integer.toHexString(CRC).toUpperCase();
+        System.out.println("result"+result);
+        if (result.length() != 4) {
+            StringBuffer sb = new StringBuffer("0000");
+            result = sb.replace(4 - result.length(), 4, result).toString();
+        }
+//        return result;
+//        交换高低位
+        return result.substring(2, 4) + result.substring(0, 2);//高位在前,低位在后
+    }
+ 
+ 
+    public static void main(String[] args) {
+        //01 03 20 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 8C 45
+        //01 03 00 00 00 08 44 0C
+        //01 03 10 00 8F 02 4E 00 91 02 44 00 92 02 5A 00 8B 02 47 40 D8
+//        System.out.println(getCRC("01 03 20 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF"));
+//        System.out.println(getCRC("01 03 00 00 00 08"));
+//        System.out.println(getCRC("01 03 10 00 8F 02 4E 00 91 02 44 00 92 02 5A 00 8B 02 47"));
+    	String crc = getCRC("FA AF 00 07 01 1e 78 1e 50 00 3C");
+        System.out.println(crc);
+    }
+}

+ 1 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/util/CodeGenerator.java

@@ -204,7 +204,7 @@ public class CodeGenerator {
         //若想要生成的实体类继承某个Controller,则可打开下面注释。写上需要继承的Controller的位置即可
 //        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
         //此处user是表名,多个英文逗号分割
-        strategy.setInclude("mould_history_time");
+        strategy.setInclude("mould_down_packet");
 //        strategy.setExclude();//数据库表全生成
 //        strategy.setInclude(scanner("user").split(","));//表名,多个英文逗号分割
         strategy.setControllerMappingHyphenStyle(true);

+ 2 - 2
cloud-model/src/main/resources/application-prod.properties

@@ -14,9 +14,9 @@ spring.thymeleaf.jackson.date-format=yyyy-MM-dd HH:mm:ss
 # 数据源配置
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 # 云模服务器对应的数据库
-spring.datasource.url=jdbc:mysql://118.190.47.230:3306/cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+#spring.datasource.url=jdbc:mysql://118.190.47.230:3306/cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
 # 我们测试的自己服务器数据库
-#spring.datasource.url=jdbc:mysql://118.190.47.230:3306/new_cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+spring.datasource.url=jdbc:mysql://118.190.47.230:3306/new_cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
 spring.datasource.username=root
 spring.datasource.password=p011430seya1026
 #spring.datasource.druid.test-on-borrow=true

+ 19 - 0
cloud-model/src/main/resources/mapper/MouldDownPacketMapper.xml

@@ -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="com.hssx.cloudmodel.mapper.MouldDownPacketMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.hssx.cloudmodel.entity.MouldDownPacket">
+        <id column="id" property="id" />
+        <result column="equipment_no" property="equipmentNo" />
+        <result column="packet_str" property="packetStr" />
+        <result column="indate" property="indate" />
+        <result column="is_use" property="isUse" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, equipment_no, packet_str, indate, is_use
+    </sql>
+
+</mapper>

+ 2 - 2
cloud-model/src/test/java/com/hssx/cloudmodel/CloudModelApplicationTests.java

@@ -36,8 +36,8 @@ public class CloudModelApplicationTests {
 
         CustomCompany customCompany = new CustomCompany();
         customCompany.setCompanyId(66);
-        customCompany.setCompanyName("123456");
-        customCompanyMapper.update(customCompany,new QueryWrapper<CustomCompany>().eq("company_id",66));
+        customCompany.setCompanyName("123455");
+        customCompanyMapper.update(customCompany,new QueryWrapper<>(customCompany));
 
 //        User user = new User();
 //        user.setUsername("超级管理员");

+ 2 - 2
cloud-socket/.settings/org.eclipse.wst.common.component

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
-    <wb-module deploy-name="JSKBT">
+    <wb-module deploy-name="yscloud">
         <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
         <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
         <property name="java-output-path" value="/JSKBT/build/classes"/>
-        <property name="context-root" value="JSKBT"/>
+        <property name="context-root" value="yscloud"/>
     </wb-module>
 </project-modules>

+ 83 - 98
cloud-socket/src/com/js/kbt/controller/WeiXinUserInfoController.java

@@ -14,6 +14,7 @@ import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
@@ -23,12 +24,14 @@ import com.alibaba.fastjson.JSONObject;
 import com.js.kbt.mapper.MouldDownPacketMapper;
 import com.js.kbt.mapper.TbMouldEquipmentMapper;
 import com.js.kbt.mapper.TbUserMapper;
+import com.js.kbt.mapper.TimeCalibrationRecordMapper;
 import com.js.kbt.model.MouldDownPacket;
 import com.js.kbt.model.MouldDownPacketExample;
 import com.js.kbt.model.TbMouldEquipment;
 import com.js.kbt.model.TbMouldEquipmentExample;
 import com.js.kbt.model.TbUser;
 import com.js.kbt.model.TbUserExample;
+import com.js.kbt.socket.UserHandler;
 import com.js.kbt.util.CRC16Util;
 import com.js.kbt.util.MD5Util;
 import com.js.kbt.util.ProjectConst;
@@ -51,13 +54,11 @@ public class WeiXinUserInfoController {
 	private MouldDownPacketMapper mouldDownPacketMapper;
 	@Resource
 	private TbMouldEquipmentMapper tbMouldEquipmentMapper;
-
-//	@Autowired
-//	private WeiXinPlatformService weiXinPlatformService;
+	
 	Logger log = Logger.getLogger(WeiXinUserInfoController.class);	
-
-	@ResponseBody
+	
 	@RequestMapping("/checkAccountStatus")
+	@ResponseBody
 	public void checkAccountStatus(@RequestParam String openid, HttpServletResponse response) throws IOException{
 		HttpRespMsg msg = new HttpRespMsg();
 		TbUserExample example = new TbUserExample();
@@ -256,100 +257,84 @@ public class WeiXinUserInfoController {
 		return result;
 	}
 	
-	/**
-	 * 云平台下行配置数据包接口
-	 * lowPowerLimit 低电量报警限值:(1 字节,十六进制)如:1e=31
-	 * hotAlarmLimit 热报警限值:(1 字节,十六进制)如:50=80
-	 * isUse:0-停止,1-启动
-	 * equipmentNo 设备编号(可能是多个或者一个)多个以“,”隔开传  如:"123456"(单个),"123456,456878,123589"(多个)
-	 */
-	@RequestMapping("/setPacket")
-	public void bindAccount(HttpServletResponse response,Integer isUse,Integer lowPowerLimit,Integer hotAlarmLimit,String equipmentNo) {
-		HttpRespMsg msg = new HttpRespMsg();
-		//16进制的转化
-		String lowPowerLimitStr = Integer.toHexString(lowPowerLimit);
-		String hotAlarmLimitStr = Integer.toHexString(hotAlarmLimit);
-		String isUseStr = "0"+Integer.toHexString(isUse);
-		System.out.println("lowPowerLimit"+lowPowerLimit+"hotAlarmLimit"+hotAlarmLimit);
-		String setPacketMessage = "";
-		MouldDownPacket mouldDownPacket = new MouldDownPacket();
-		MouldDownPacketExample exp = new MouldDownPacketExample();
-		TbMouldEquipmentExample tExp = new TbMouldEquipmentExample();
-		String[] split = equipmentNo.split(",");
-		for (String string : split) {
-			System.out.println("进来了"+string);
-			exp.createCriteria().andEquipmentNoEqualTo(string);
-			tExp.createCriteria().andEquipmentNoEqualTo(string);
-			TbMouldEquipment equipment = tbMouldEquipmentMapper.selectByExample(tExp).get(0);
-			equipment.setIsUse(isUse);
-			equipment.setHillNumber(lowPowerLimit+"%");
-			equipment.setTemperature(hotAlarmLimit);
-			//更新云模盒的报警温度和电量
-			tbMouldEquipmentMapper.updateByPrimaryKey(equipment);
-			List<MouldDownPacket> list = mouldDownPacketMapper.selectByExample(exp);
-			if(list.size()>0){
-				mouldDownPacket = list.get(0);
-				setPacketMessage = downProcessMsg(lowPowerLimitStr,hotAlarmLimitStr,isUseStr);
-				mouldDownPacket.setPacketStr(setPacketMessage);
-				mouldDownPacket.setIsUse(isUse);
-				mouldDownPacketMapper.updateByPrimaryKey(mouldDownPacket);
-			}else{
-				setPacketMessage = downProcessMsg(lowPowerLimitStr,hotAlarmLimitStr,isUseStr);
-				mouldDownPacket.setEquipmentNo(equipmentNo);
-				mouldDownPacket.setPacketStr(setPacketMessage);
-				mouldDownPacket.setIsUse(isUse);
-				mouldDownPacketMapper.insertSelective(mouldDownPacket);
-			}
-			exp.clear();
-			tExp.clear();
-		}
-		msg.data = setPacketMessage;
-		response.setContentType("application/json");
-		response.setCharacterEncoding("UTF-8");
-		try {
-			response.getWriter().println(msg.toJSONStr());
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
+//	/**
+//	 * 云平台下行配置数据包接口
+//	 * lowPowerLimit 低电量报警限值:(1 字节,十六进制)如:1e=31
+//	 * hotAlarmLimit 热报警限值:(1 字节,十六进制)如:50=80
+//	 * isUse:0-停止,1-启动
+//	 * equipmentNo 设备编号(可能是多个或者一个)多个以“,”隔开传  如:"123456"(单个),"123456,456878,123589"(多个)
+//	 */
+//	@RequestMapping(value = "/userInfo", method = {RequestMethod.POST,RequestMethod.GET})
+//	public void bindAccount(HttpServletResponse response,Integer isUse,Integer lowPowerLimit,Integer hotAlarmLimit,String equipmentNo) {
+//		HttpRespMsg msg = new HttpRespMsg();
+//		//16进制的转化
+//		String lowPowerLimitStr = Integer.toHexString(lowPowerLimit);
+//		String hotAlarmLimitStr = Integer.toHexString(hotAlarmLimit);
+//		String isUseStr = "0"+Integer.toHexString(isUse);
+//		System.out.println("lowPowerLimit"+lowPowerLimit+"hotAlarmLimit"+hotAlarmLimit);
+//		String setPacketMessage = "";
+//		MouldDownPacket mouldDownPacket = new MouldDownPacket();
+//		MouldDownPacketExample exp = new MouldDownPacketExample();
+//		TbMouldEquipmentExample tExp = new TbMouldEquipmentExample();
+//		String[] split = equipmentNo.split(",");
+//		for (String string : split) {
+//			System.out.println("进来了"+string);
+//			exp.createCriteria().andEquipmentNoEqualTo(string);
+//			tExp.createCriteria().andEquipmentNoEqualTo(string);
+//			TbMouldEquipment equipment = tbMouldEquipmentMapper.selectByExample(tExp).get(0);
+//			equipment.setIsUse(isUse);
+//			equipment.setHillNumber(lowPowerLimit+"");
+//			equipment.setTemperature(hotAlarmLimit);
+//			//更新云模盒的报警温度和电量
+//			tbMouldEquipmentMapper.updateByPrimaryKey(equipment);
+//			List<MouldDownPacket> list = mouldDownPacketMapper.selectByExample(exp);
+//			if(list.size()>0){
+//				mouldDownPacket = list.get(0);
+//				setPacketMessage = downProcessMsg(lowPowerLimitStr,hotAlarmLimitStr,isUseStr);
+//				mouldDownPacket.setPacketStr(setPacketMessage);
+//				mouldDownPacket.setIsUse(isUse);
+//				mouldDownPacketMapper.updateByPrimaryKey(mouldDownPacket);
+//			}else{
+//				setPacketMessage = downProcessMsg(lowPowerLimitStr,hotAlarmLimitStr,isUseStr);
+//				mouldDownPacket.setEquipmentNo(equipmentNo);
+//				mouldDownPacket.setPacketStr(setPacketMessage);
+//				mouldDownPacket.setIsUse(isUse);
+//				mouldDownPacketMapper.insertSelective(mouldDownPacket);
+//			}
+//			exp.clear();
+//			tExp.clear();
+//		}
+//		msg.data = setPacketMessage;
+//		response.setContentType("application/json");
+//		response.setCharacterEncoding("UTF-8");
+//		try {
+//			response.getWriter().println(msg.toJSONStr());
+//		} catch (IOException e) {
+//			e.printStackTrace();
+//		}
+//	}
 	
-	// 下行配置数据包
-		private String downProcessMsg(String lowPowerLimit,String hotAlarmLimit,String isUse) {
-			//"23"不解析
-			if("23".equals(lowPowerLimit)){
-				lowPowerLimit="24";
-			}
-			if("23".equals(hotAlarmLimit)){
-				hotAlarmLimit="24";
-			}
-			if("23".equals(isUse)){
-				isUse="24";
-			}
-			String ret = "FA AF 00 07 "+isUse+" 1e 78 "+lowPowerLimit+" "+hotAlarmLimit+" 00 3C";
-			ret = ret.replaceAll(" ", "");
-			String crcCode = CRC16Util.getCRC(ret);
-			System.out.println("ret===>"+ret);
-			String lastPart = (ret + crcCode).replaceAll("23", "24").replaceAll(" ", "");
-			System.out.println("lastPart===>"+lastPart);
-			return lastPart;
-		}
-		
-		/**
-		 * 低位在前的16进制解析
-		 * 
-		 * @param rHex
-		 * @return
-		 */
-		public static int reverseParseHex(String rHex) {
-			int size = rHex.length() / 2;
-			StringBuilder sb = new StringBuilder();
-			for (int i = 0; i < size; i++) {
-				sb.append(rHex.substring((size - i - 1) * 2, (size - i) * 2));
-			}
-			String str = sb.toString();
-			System.out.println("str"+str);
-			return Integer.parseInt(str, 16);
-		}
+//	// 下行配置数据包
+//		private String downProcessMsg(String lowPowerLimit,String hotAlarmLimit,String isUse) {
+//			//"23"不解析
+//			if("23".equals(lowPowerLimit)){
+//				lowPowerLimit="24";
+//			}
+//			if("23".equals(hotAlarmLimit)){
+//				hotAlarmLimit="24";
+//			}
+//			if("23".equals(isUse)){
+//				isUse="24";
+//			}
+//			String ret = "FA AF 00 07 "+isUse+" 1e 78 "+lowPowerLimit+" "+hotAlarmLimit+" 00 3C";
+//			ret = ret.replaceAll(" ", "");
+//			String crcCode = CRC16Util.getCRC(ret);
+//			System.out.println("ret===>"+ret);
+//			String lastPart = (ret + crcCode).replaceAll("23", "24").replaceAll(" ", "");
+//			System.out.println("lastPart===>"+lastPart);
+//			return lastPart;
+//		}
+//		
 		
 //		public static byte[] strToByte(String data) {
 //	        data = data.replace(" ", "");

+ 1 - 1
cloud-socket/src/com/js/kbt/mapper/TimeCalibrationRecordMapper.java

@@ -94,5 +94,5 @@ public interface TimeCalibrationRecordMapper {
      */
     int updateByPrimaryKey(TimeCalibrationRecord record);
 
-	Integer selectCountByToday();
+    int selectCountByToday();
 }

+ 77 - 41
cloud-socket/src/com/js/kbt/socket/UserHandler.java

@@ -43,7 +43,7 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 	private static final Logger logger = Logger.getLogger(UserHandler.class);
 
 	private ChannelHandlerContext ctx;
-	
+
 	@Resource
 	private MouldHistoryMapper mouldHistoryMapper;
 	@Resource
@@ -60,17 +60,16 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 	private MouldDownPacketMapper mouldDownPacketMapper;
 	@Resource
 	private TimeCalibrationRecordMapper timeCalibrationRecordMapper;
-	
 
 	@Override
 	protected void channelRead0(ChannelHandlerContext arg0, String arg1) {
 		String pack = "FAAF0007001e781e50003C37D5";
-		//校准时间
-//		timeCalibration();
+		// 校准时间
+		timeCalibration();
 		System.out.println("收到===" + arg1 + "\n");
 		String equipmentNo = processMsg(arg1);
-		//以下是配置下行数据
-//		sendPackage(equipmentNo);
+		// 以下是配置下行数据
+		// sendPackage(equipmentNo);
 	}
 
 	private String processMsg(String input) {
@@ -93,23 +92,24 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 		String deviceNum = getStringFromHexStr(deviceNumPart);
 		System.out.println("设备No=" + deviceNum);
 		item.setEquipmentNo(deviceNum);
-		// 软件版本号25
-		String version = input.substring(25 * 2, 26 * 2);
-		System.out.println("软件版本号=" + version);
-		item.setVersion(version);
-		String status = input.substring(26 * 2, 27 * 2);
-		System.out.println("工作状态=" + status);
+		// 发送数据包
 		MouldDownPacketExample pExp = new MouldDownPacketExample();
 		pExp.createCriteria().andEquipmentNoEqualTo(deviceNum);
 		List<MouldDownPacket> packetList = mouldDownPacketMapper.selectByExample(pExp);
-		if(packetList.size()>0){
+		if (packetList.size() > 0) {
 			MouldDownPacket packet = packetList.get(0);
-			if(!("0"+packet.getIsUse()).equals(status)){
-				logger.info("开始下发数据包==>"+packet.getPacketStr());
-				sendMsg(packet.getPacketStr());
-			}
+			logger.info("开始下发数据包==>" + packet.getPacketStr());
+			sendMsg(packet.getPacketStr());
+			//下发完就将数据删除(防止后续数据过大造成性能的影响)
+			mouldDownPacketMapper.deleteByPrimaryKey(packet.getId());
 			logger.info("判断是否开启或关闭已结束==>");
 		}
+		// 软件版本号25
+		String version = input.substring(25 * 2, 26 * 2);
+		System.out.println("软件版本号=" + version);
+		item.setVersion(version);
+		String status = input.substring(26 * 2, 27 * 2);
+		System.out.println("工作状态=" + status);
 		item.setStatus(Integer.decode("0x" + status).toString());
 		// 经度27-37
 		String longitude = getStringFromHexStr(input.substring(27 * 2, 38 * 2));
@@ -196,50 +196,53 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 			avgTime = totalTime / list.size();
 		}
 		handleModLogic(item, avgTime);
-		//判断预留字节的
-		if("02".equals(mobilePart)){
-			//丢包数据已占满缓存,调用读取命令
-			sendMsg("#PRINTFALL;");
+		// 判断预留字节的
+		if ("02".equals(mobilePart)) {
+			// 丢包数据已占满缓存,调用读取命令
+			String strHexStr16 = strHexStr16("#PRINTFALL;");
+			logger.info("丢包数据已占满缓存下发调用读取命令#PRINTFALL;==>" + strHexStr16);
+			sendMsg(strHexStr16);
 			return deviceNum;
 		}
-		//返回设备编号
+		// 返回设备编号
 		return deviceNum;
 	}
-	
-	public void sendPackage(String equipmentNo){
-		if(equipmentNo.indexOf("FAAF") != -1){
+
+	public void sendPackage(String equipmentNo) {
+		if (equipmentNo.indexOf("FAAF") != -1) {
 			logger.info("非法云模盒编号,不作下发处理");
 			return;
 		}
 		MouldDownPacketExample exp = new MouldDownPacketExample();
 		exp.createCriteria().andEquipmentNoEqualTo(equipmentNo);
 		List<MouldDownPacket> list = mouldDownPacketMapper.selectByExample(exp);
-		if(list.size()>0){
+		if (list.size() > 0) {
 			MouldDownPacket packet = list.get(0);
-			if(0==packet.getIsUse()){
-				logger.info("开始下发数据包==>"+packet.getPacketStr());
+			if (0 == packet.getIsUse()) {
+				logger.info("开始下发数据包==>" + packet.getPacketStr());
 				sendMsg(packet.getPacketStr());
 			}
 		}
 	}
-	
-	public void timeCalibration(){
+
+	public void timeCalibration() {
 		Integer count = timeCalibrationRecordMapper.selectCountByToday();
-		if(count==0){
+		if (count == 0) {
 			Date date = new Date();
 			SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd,HH:mm:ss");
 			String dateStr = sdf.format(date);
-			dateStr = "#TIME="+dateStr+";";
-			//#TIME=18-03-06,15:31:48;
-			logger.info("校准系统模块时间==>"+dateStr);
-			sendMsg(dateStr);
+			dateStr = "#TIME=" + dateStr + ";";
+			// #TIME=18-03-06,15:31:48;
+			logger.info("校准系统模块时间==>" + dateStr);
+			// 将字符串转成16进制字符串
+			String strHexStr16 = strHexStr16(dateStr);
+			logger.info("校准系统模块时间转成16进制的字符串==>" + strHexStr16);
+			sendMsg(strHexStr16);
 			TimeCalibrationRecord timeCalibrationRecord = new TimeCalibrationRecord();
 			timeCalibrationRecordMapper.insertSelective(timeCalibrationRecord);
 		}
 	}
 
-	
-
 	private void handleModLogic(MouldHistory item, int avgTime) {
 		TbMouldEquipmentExample meqExp = new TbMouldEquipmentExample();
 		meqExp.createCriteria().andEquipmentNoEqualTo(item.getEquipmentNo());
@@ -260,8 +263,8 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 			if (tbMouldMapper.countByExample(tExp) > 0) {
 				TbMould tm = tbMouldMapper.selectByExample(tExp).get(0);
 				tm.setState(item.getStatus());
-				//云模盒运行次数+模具的历史运行次数
-				tm.setRunTimes(item.getRunCnt()+tm.getHistoryRunTimes());
+				// 云模盒运行次数+模具的历史运行次数
+				tm.setRunTimes(item.getRunCnt() + tm.getHistoryRunTimes());
 				// 处理每模平均周期(单位秒)
 				BigDecimal bd = new BigDecimal(avgTime * 1.00 / 1000);
 				tm.setOcCycle(bd);
@@ -328,7 +331,7 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 		return parseDate;
 	}
 
-	private String getStringFromHexStr(String hexStr) {
+	private static String getStringFromHexStr(String hexStr) {
 		StringBuilder sb = new StringBuilder();
 		for (int i = 0; i < hexStr.length() / 2; i++) {
 			String str = "0x" + hexStr.substring(i * 2, i * 2 + 2);
@@ -348,7 +351,6 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 		byte[] buffer = hexStrToBinaryStr(hexString);
 		ByteBuf bf = Unpooled.buffer(hexString.length() / 2);
 		bf.writeBytes(buffer);
-
 		ctx.writeAndFlush(bf);
 		// ctx.close();
 	}
@@ -442,7 +444,41 @@ public class UserHandler extends SimpleChannelInboundHandler<String> {
 		return result;
 	}
 
+	/**
+	 * 普通字符串转16进制字符串
+	 * 
+	 * @param str
+	 * @return
+	 */
+
+	public static String strHexStr16(String str) {
+		char[] chars = "0123456789ABCDEF".toCharArray();
+		StringBuilder sb = new StringBuilder("");
+		byte[] bs = str.getBytes();
+		int bit;
+		for (int i = 0; i < bs.length; i++) {
+			bit = (bs[i] & 0x0f0) >> 4;
+			sb.append(chars[bit]);
+			bit = bs[i] & 0x0f;
+			sb.append(chars[bit]);
+			// sb.append(' ');
+		}
+		return sb.toString().trim();
+	}
+
 	public static void main(String[] args) {
+		UserHandler h = new UserHandler();
+		h.timeCalibration();
+		// Date date = new Date();
+		// SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd,HH:mm:ss");
+		// String dateStr = sdf.format(date);
+		// dateStr = "#TIME="+dateStr+";";
+		// System.out.println(dateStr);
+		// //#TIME=18-03-06,15:31:48;
+		// logger.info("校准系统模块时间==>"+dateStr);
+		// String reverseParseHex = strHexStr16(dateStr);
+		// System.out.println("reverseParseHex-----"+reverseParseHex);
+
 		// String str = "1F51";
 		String input = "FAAF530000000000000000000000003137333030303239343310010000000000000000000000000000000000000000001F51E85F00000000000045004A54000100110000001308160F171F1308160F2D188FCA";
 		// String temp = "0x"+str;

+ 1 - 1
cloud-socket/src/com/js/kbt/util/CRC16Util.java

@@ -67,7 +67,7 @@ public class CRC16Util {
 //        System.out.println(getCRC("01 03 20 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF"));
 //        System.out.println(getCRC("01 03 00 00 00 08"));
 //        System.out.println(getCRC("01 03 10 00 8F 02 4E 00 91 02 44 00 92 02 5A 00 8B 02 47"));
-    	String crc = getCRC("FA AF 00 07 00 1e 78"+" 1e"+" "+"50"+" 00 3C");
+    	String crc = getCRC("FA AF 00 07 01 1e 78 1e 50 00 3C");
         System.out.println(crc);
     }
 }

+ 2 - 2
target/classes/main/resources/application-prod.properties

@@ -14,9 +14,9 @@ spring.thymeleaf.jackson.date-format=yyyy-MM-dd HH:mm:ss
 # 数据源配置
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 # 云模服务器对应的数据库
-spring.datasource.url=jdbc:mysql://118.190.47.230:3306/cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+#spring.datasource.url=jdbc:mysql://118.190.47.230:3306/cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
 # 我们测试的自己服务器数据库
-#spring.datasource.url=jdbc:mysql://118.190.47.230:3306/new_cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+spring.datasource.url=jdbc:mysql://118.190.47.230:3306/new_cloud_model?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
 spring.datasource.username=root
 spring.datasource.password=p011430seya1026
 #spring.datasource.druid.test-on-borrow=true