From cef410f571a2960e979ca9383d9c8dd01ecc862c Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期一, 28 十月 2024 14:44:31 +0800 Subject: [PATCH] 2024-10-28 常用取水口单独建表,按照使用时间和使用次数排序 --- pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java | 29 ++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrCommonIntakes.java | 62 ++++++++++ pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrCommonIntakesMapper.xml | 110 ++++++++++++++++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrCommonIntakesMapper.java | 36 ++++++ pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java | 5 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java | 4 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java | 28 ++-- pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml | 38 +++--- 8 files changed, 280 insertions(+), 32 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java index 17081dc..7cc909c 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java @@ -11,9 +11,11 @@ import com.dy.pipIrrGlobal.command.enums.LastOperateENUM; import com.dy.pipIrrGlobal.command.result.CommandResultCode; import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper; +import com.dy.pipIrrGlobal.daoPr.PrCommonIntakesMapper; import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; +import com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes; import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; @@ -78,6 +80,9 @@ @Autowired private SeVirtualCardMapper seVirtualCardMapper; + + @Autowired + private PrCommonIntakesMapper prCommonIntakesMapper; public static ComSupport comSupport; @@ -279,6 +284,9 @@ rmCommandHistoryMapper.insert(rmCommandHistory); comId = rmCommandHistory.getComId(); + // 娣诲姞甯哥敤鍙栨按鍙f垨鏇存柊浣跨敤淇℃伅 + addCommonIntake(operator, intakeId); + /** * 澶勭悊鍥炶皟 * feature鍑嗗灏辩华鍚庡彂閫佸懡浠� @@ -357,4 +365,25 @@ return response_CallBack; } + + /** + * 娣诲姞甯哥敤鍙栨按鍙f垨鏇存柊浣跨敤淇℃伅 + * @param intakeId + * @return + */ + public Integer addCommonIntake(Long operatorId, Long intakeId) { + PrCommonIntakes commonIntake = prCommonIntakesMapper.selectByOperatorAndIntake(operatorId, intakeId); + if(commonIntake == null) { + commonIntake = new PrCommonIntakes(); + commonIntake.setOperatorId(operatorId); + commonIntake.setIntakeId(intakeId); + commonIntake.setLastUsedTime(new Date()); + commonIntake.setUsageCount(1); + return prCommonIntakesMapper.insert(commonIntake); + } + + commonIntake.setLastUsedTime(new Date()); + commonIntake.setUsageCount(commonIntake.getUsageCount() + 1); + return prCommonIntakesMapper.updateByPrimaryKeySelective(commonIntake); + } } diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrCommonIntakesMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrCommonIntakesMapper.java new file mode 100644 index 0000000..01fb5d1 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrCommonIntakesMapper.java @@ -0,0 +1,36 @@ +package com.dy.pipIrrGlobal.daoPr; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author ZhuBaoMin + * @date 2024-10-28 14:11 + * @LastEditTime 2024-10-28 14:11 + * @Description + */ + +@Mapper +public interface PrCommonIntakesMapper extends BaseMapper<PrCommonIntakes> { + int deleteByPrimaryKey(Long id); + + int insert(PrCommonIntakes record); + + int insertSelective(PrCommonIntakes record); + + PrCommonIntakes selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(PrCommonIntakes record); + + int updateByPrimaryKey(PrCommonIntakes record); + + /** + * 鏍规嵁鎿嶄綔鍛業D銆佸彇姘村彛ID鑾峰彇甯哥敤鍙栨按鍙e璞� + * @param operatorId + * @param intakeId + * @return + */ + PrCommonIntakes selectByOperatorAndIntake(@Param("operatorId") Long operatorId, @Param("intakeId")Long intakeId); +} \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrCommonIntakes.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrCommonIntakes.java new file mode 100644 index 0000000..a59dfca --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrCommonIntakes.java @@ -0,0 +1,62 @@ +package com.dy.pipIrrGlobal.pojoPr; + +/** + * @author ZhuBaoMin + * @date 2024-10-28 14:11 + * @LastEditTime 2024-10-28 14:11 + * @Description 甯哥敤鍙栨按鍙e疄浣撶被 + */ + +import com.alibaba.fastjson2.annotation.JSONField; +import com.alibaba.fastjson2.writer.ObjectWriterImplToString; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dy.common.po.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +import java.util.Date; + +@TableName(value="pr_common_intakes", autoResultMap = true) +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class PrCommonIntakes implements BaseEntity { + public static final long serialVersionUID = 202410281133001L; + + /** + * 涓婚敭 + */ + @JSONField(serializeUsing= ObjectWriterImplToString.class) + @TableId(type = IdType.INPUT) + private Long id; + + /** + * 鎿嶄綔浜篒D + */ + @JSONField(serializeUsing= ObjectWriterImplToString.class) + @NotNull(message = "鍙栨按鍙g紪鍙蜂笉鑳戒负绌�") + private Long operatorId; + + /** + * 鍙栨按鍙D + */ + @NotNull(message = "鍙栨按鍙g紪鍙蜂笉鑳戒负绌�") + private Long intakeId; + + /** + * 鏈�鍚庝竴娆′娇鐢ㄦ椂闂� + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date lastUsedTime; + + /** + * 浣跨敤娆℃暟 + */ + private Integer usageCount; + +} \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrCommonIntakesMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrCommonIntakesMapper.xml new file mode 100644 index 0000000..14055c5 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrCommonIntakesMapper.xml @@ -0,0 +1,110 @@ +<?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.dy.pipIrrGlobal.daoPr.PrCommonIntakesMapper"> + <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes"> + <!--@mbg.generated--> + <!--@Table pr_common_intakes--> + <id column="id" jdbcType="BIGINT" property="id" /> + <result column="operator_id" jdbcType="BIGINT" property="operatorId" /> + <result column="intake_id" jdbcType="BIGINT" property="intakeId" /> + <result column="last_used_time" jdbcType="TIMESTAMP" property="lastUsedTime" /> + <result column="usage_count" jdbcType="INTEGER" property="usageCount" /> + </resultMap> + <sql id="Base_Column_List"> + <!--@mbg.generated--> + id, operator_id, intake_id, last_used_time, usage_count + </sql> + <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> + <!--@mbg.generated--> + select + <include refid="Base_Column_List" /> + from pr_common_intakes + where id = #{id,jdbcType=BIGINT} + </select> + <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> + <!--@mbg.generated--> + delete from pr_common_intakes + where id = #{id,jdbcType=BIGINT} + </delete> + <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes"> + <!--@mbg.generated--> + insert into pr_common_intakes (id, operator_id, intake_id, + last_used_time, usage_count) + values (#{id,jdbcType=BIGINT}, #{operatorId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, + #{lastUsedTime,jdbcType=TIMESTAMP}, #{usageCount,jdbcType=INTEGER}) + </insert> + <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes"> + <!--@mbg.generated--> + insert into pr_common_intakes + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null"> + id, + </if> + <if test="operatorId != null"> + operator_id, + </if> + <if test="intakeId != null"> + intake_id, + </if> + <if test="lastUsedTime != null"> + last_used_time, + </if> + <if test="usageCount != null"> + usage_count, + </if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null"> + #{id,jdbcType=BIGINT}, + </if> + <if test="operatorId != null"> + #{operatorId,jdbcType=BIGINT}, + </if> + <if test="intakeId != null"> + #{intakeId,jdbcType=BIGINT}, + </if> + <if test="lastUsedTime != null"> + #{lastUsedTime,jdbcType=TIMESTAMP}, + </if> + <if test="usageCount != null"> + #{usageCount,jdbcType=INTEGER}, + </if> + </trim> + </insert> + <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes"> + <!--@mbg.generated--> + update pr_common_intakes + <set> + <if test="operatorId != null"> + operator_id = #{operatorId,jdbcType=BIGINT}, + </if> + <if test="intakeId != null"> + intake_id = #{intakeId,jdbcType=BIGINT}, + </if> + <if test="lastUsedTime != null"> + last_used_time = #{lastUsedTime,jdbcType=TIMESTAMP}, + </if> + <if test="usageCount != null"> + usage_count = #{usageCount,jdbcType=INTEGER}, + </if> + </set> + where id = #{id,jdbcType=BIGINT} + </update> + <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes"> + <!--@mbg.generated--> + update pr_common_intakes + set operator_id = #{operatorId,jdbcType=BIGINT}, + intake_id = #{intakeId,jdbcType=BIGINT}, + last_used_time = #{lastUsedTime,jdbcType=TIMESTAMP}, + usage_count = #{usageCount,jdbcType=INTEGER} + where id = #{id,jdbcType=BIGINT} + </update> + + <!--鏍规嵁鎿嶄綔鍛業D銆佸彇姘村彛ID鑾峰彇甯哥敤鍙栨按鍙e璞�--> + <select id="selectByOperatorAndIntake" resultType="com.dy.pipIrrGlobal.pojoPr.PrCommonIntakes"> + SELECT * + FROM pr_common_intakes + WHERE operator_id = #{operatorId} AND intake_id = #{intakeId} + LIMIT 1 + </select> +</mapper> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml index 9bce76d..6fcfe5d 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml @@ -276,7 +276,7 @@ AND cont.protocol = #{protocol} </if> <if test = "bindNumber != null and bindNumber > 0"> - AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = ${bindNumber} + AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = #{bindNumber} </if> </where> </select> @@ -357,7 +357,7 @@ AND cont.protocol = #{protocol} </if> <if test = "bindNumber != null and bindNumber > 0"> - AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = ${bindNumber} + AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = #{bindNumber} </if> </where> ORDER BY ge.operateDt DESC @@ -660,26 +660,28 @@ <!--鏍规嵁鎿嶄綔鍛樿幏鍙栧父鐢ㄥ彇姘村彛--> <select id="getUsedIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> - SELECT DISTINCT con.intakeId, - con.rtuAddr, - inta.name AS intakeNum, - rtus.isOnLine - FROM pr_controller con - INNER JOIN pr_intake inta ON con.intakeId = inta.id - INNER JOIN rm_command_history com ON con.rtuAddr = com.rtu_addr - INNER JOIN JSON_TABLE( - <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> - #{onLineMap}, - '$[*]' COLUMNS ( - rtuAddr VARCHAR(20) PATH '$.rtuAddr', - isOnLine BOOLEAN PATH '$.isOnLine' - ) - ) rtus ON con.rtuAddr = rtus.rtuAddr + SELECT + com.intake_id AS intakeId, + con.rtuAddr, + inta.name AS intakeNum, + rtus.isOnLine + FROM pr_common_intakes com + INNER JOIN pr_intake inta ON inta.id = com.intake_id + INNER JOIN pr_controller con ON con.intakeId = com.intake_id + INNER JOIN JSON_TABLE( + <!--'[{"rtuAddr":"620201000030","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> + #{onLineMap}, + '$[*]' COLUMNS ( + rtuAddr VARCHAR(20) PATH '$.rtuAddr', + isOnLine BOOLEAN PATH '$.isOnLine' + ) + ) rtus ON con.rtuAddr = rtus.rtuAddr <where> <if test="operator != null"> - com.operator = #{operator} + com.operator_id = #{operator} </if> </where> + ORDER BY com.last_used_time DESC,com.usage_count DESC </select> <!--鍙栨按鍙e悕绉版崲鍙栨按鍙D锛屾壂鐮佸紑闃�浣跨敤--> diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java index 6118669..47772f7 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java @@ -50,7 +50,8 @@ private final PrIntakeVcMapper prIntakeVcMapper; private final SeClientCardMapper seClientCardMapper; private final RmIrrigateProfileMapper rmIrrigateProfileMapper; - private RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper; + private final RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper; + //private final PrCommonIntakesMapper prCommonIntakesMapper; /** * pro_mw锛氬睘鎬� @@ -64,6 +65,7 @@ public CommandSv(RmCommandHistoryMapper rmCommandHistoryMapper,RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper, SeVirtualCardMapper seVirtualCardMapper, PrIntakeMapper prIntakeMapper, PrWaterPriceMapper prWaterPriceMapper, PrIntakeVcMapper prIntakeVcMapper, SeClientCardMapper seClientCardMapper, RmIrrigateProfileMapper rmIrrigateProfileMapper, Environment env) { this.rmCommandHistoryMapper = rmCommandHistoryMapper; this.rmOpenCloseValveLastMapper = rmOpenCloseValveLastMapper; + //this.prCommonIntakesMapper = prCommonIntakesMapper; this.seVirtualCardMapper = seVirtualCardMapper; this.prIntakeMapper = prIntakeMapper; this.prWaterPriceMapper = prWaterPriceMapper; @@ -195,5 +197,4 @@ rsVo.obj = rmIrrigateProfileMapper.getIrrPro(type); return rsVo ; } - } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java index 569914e..8aaf0a0 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java @@ -69,6 +69,10 @@ */ @GetMapping(path = "used_intakes") public BaseResponse<List<VoOnLineIntake>> getUsedIntakes(Long operator) { + if(operator == null || operator <= 0) { + return BaseResponseUtils.buildErrorMsg("鎿嶄綔鍛樹笉鑳戒负绌�"); + } + try { List<VoOnLineIntake> res = intakeSv.getUsedIntakes(operator); return BaseResponseUtils.buildSuccess(res); diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java index d3a59e3..2f4884a 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java @@ -78,14 +78,16 @@ JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); if(response != null && response.getString("code").equals("0001")) { JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap"); - HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class); JSONArray jsonArray = new JSONArray(); - for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("rtuAddr", entry.getKey()); - jsonObject.put("isOnLine", entry.getValue()); - jsonArray.add(jsonObject); + if(attachment != null) { + HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class); + for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("rtuAddr", entry.getKey()); + jsonObject.put("isOnLine", entry.getValue()); + jsonArray.add(jsonObject); + } } qo.setOnLineMap(jsonArray.toJSONString()); @@ -116,14 +118,16 @@ JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); if(response != null && response.getString("code").equals("0001")) { JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap"); - HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class); JSONArray jsonArray = new JSONArray(); - for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("rtuAddr", entry.getKey()); - jsonObject.put("isOnLine", entry.getValue()); - jsonArray.add(jsonObject); + if(attachment != null) { + HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class); + for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("rtuAddr", entry.getKey()); + jsonObject.put("isOnLine", entry.getValue()); + jsonArray.add(jsonObject); + } } qo.setOnLineMap(jsonArray.toJSONString()); -- Gitblit v1.8.0