Commit 5c1b0da0 authored by 赵啸非's avatar 赵啸非

添加消息发送系统

parent 2ab9ca11
...@@ -273,6 +273,7 @@ CREATE TABLE `mortals_xhx_cp_records` ( ...@@ -273,6 +273,7 @@ CREATE TABLE `mortals_xhx_cp_records` (
`contact` varchar(50) DEFAULT NULL COMMENT '联系方式', `contact` varchar(50) DEFAULT NULL COMMENT '联系方式',
`id_card` varchar(18) DEFAULT NULL COMMENT '身份证号码', `id_card` varchar(18) DEFAULT NULL COMMENT '身份证号码',
`window_id` bigint(20) DEFAULT NULL COMMENT '窗口id', `window_id` bigint(20) DEFAULT NULL COMMENT '窗口id',
`window_num` varchar(255) DEFAULT NULL COMMENT '窗口编号',
`window_name` varchar(255) DEFAULT NULL COMMENT '窗口名称', `window_name` varchar(255) DEFAULT NULL COMMENT '窗口名称',
`bussiness_id` bigint(20) DEFAULT NULL COMMENT '业务Id', `bussiness_id` bigint(20) DEFAULT NULL COMMENT '业务Id',
`bussiness_name` varchar(255) DEFAULT NULL COMMENT '预约业务', `bussiness_name` varchar(255) DEFAULT NULL COMMENT '预约业务',
......
...@@ -62,7 +62,8 @@ public class CpPersonInfo { ...@@ -62,7 +62,8 @@ public class CpPersonInfo {
@JSONField(name = "create_time",format = "yyyy-MM-dd HH:mm:ss") @JSONField(name = "create_time",format = "yyyy-MM-dd HH:mm:ss")
private Date cpTime; private Date cpTime;
@JSONField(name = "window_num")
private String windowNum;
......
...@@ -178,10 +178,15 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService { ...@@ -178,10 +178,15 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService {
double doTime = NumberUtil.div(Double.parseDouble((diff) + ""), 60, 1); // 保留1位小数,四舍五入 double doTime = NumberUtil.div(Double.parseDouble((diff) + ""), 60, 1); // 保留1位小数,四舍五入
double upTime = NumberUtil.div(Double.parseDouble((diff - avgWait) + ""), 60, 1); // 保留1位小数,四舍五入 double upTime = NumberUtil.div(Double.parseDouble((diff - avgWait) + ""), 60, 1); // 保留1位小数,四舍五入
//业务:XX,流水号:XX,已超时 double avgTime = NumberUtil.div(Double.parseDouble((avgWait) + ""), 60, 1); // 保留1位小数,四舍五入
String alarmContent = String.format("业务:%s,流水号:%s,叫号等待时间为%.1f分钟,超过了平均等待时长%.1f分钟!", //流水号:xxx,xxx业务平均等待时长xxx,当前叫号时间为xxx,超过了平均等待时间!
/* String alarmContent = String.format("业务:%s,流水号:%s,叫号等待时间为%.1f分钟,超过了平均等待时长%.1f分钟!",
item.getBussinessName(), item.getQueueNo(), item.getBussinessName(), item.getQueueNo(),
doTime, upTime); doTime, upTime);*/
String alarmContent = String.format("流水号:%s,%s业务叫号平均等待时长%.1f分钟,当前叫号等待%.1f分钟,超过了平均等待时间!",
item.getQueueNo(), item.getBussinessName(),
doTime, avgTime);
Long siteId = item.getSiteId(); Long siteId = item.getSiteId();
messageTaskEntity.setMessageType(等待超时预警.getValue()); messageTaskEntity.setMessageType(等待超时预警.getValue());
messageTaskEntity.setSiteId(siteId); messageTaskEntity.setSiteId(siteId);
...@@ -236,11 +241,18 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService { ...@@ -236,11 +241,18 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService {
double doTime = NumberUtil.div(Double.parseDouble((diff) + ""), 60, 1); // 保留1位小数,四舍五入 double doTime = NumberUtil.div(Double.parseDouble((diff) + ""), 60, 1); // 保留1位小数,四舍五入
double upTime = NumberUtil.div(Double.parseDouble((diff - avgWait) + ""), 60, 1); // 保留1位小数,四舍五入 double upTime = NumberUtil.div(Double.parseDouble((diff - avgWait) + ""), 60, 1); // 保留1位小数,四舍五入
double avgTime = NumberUtil.div(Double.parseDouble((avgWait) + ""), 60, 1); // 保留1位小数,四舍五入
//业务:XX,流水号:XX,窗口:XX,工作人员:XX,已办理超时 //业务:XX,流水号:XX,窗口:XX,工作人员:XX,已办理超时
String alarmContent = String.format("业务:%s,流水号:%s,窗口:%s,工作人员:%s,办理时间为%.1f分钟,超过了平均办理时长%.1f分钟!", //流水号:xxx,xxx业务平均办理时长xxx,当前叫号时间为xxx,超过了平均等待时间!
/* String alarmContent = String.format("业务:%s,流水号:%s,窗口:%s,工作人员:%s,办理时间为%.1f分钟,超过了平均办理时长%.1f分钟!",
item.getBussinessName(), item.getQueueNo(), item.getBussinessName(), item.getQueueNo(),
item.getWindowNum(), item.getWorkman(), item.getWindowNum(), item.getWorkman(),
doTime, upTime); doTime, upTime);*/
//流水号:%s,%s业务办理平均时长%.1f分钟,当前在%s窗口办理%.1f分钟,超过了平均办理时间!
String alarmContent = String.format("流水号:%s,%s业务办理平均时长%.1f分钟,当前在%s窗口办理%.1f分钟,超过了平均办理时间!",
item.getQueueNo(), item.getBussinessName(),
item.getWindowNum(), doTime, avgTime);
MessageTaskEntity messageTaskEntity = new MessageTaskEntity(); MessageTaskEntity messageTaskEntity = new MessageTaskEntity();
messageTaskEntity.initAttrValue(); messageTaskEntity.initAttrValue();
Long siteId = item.getSiteId(); Long siteId = item.getSiteId();
...@@ -292,11 +304,12 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService { ...@@ -292,11 +304,12 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService {
cpRecordsService.save(cpRecordsEntity); cpRecordsService.save(cpRecordsEntity);
//发送差评消息 差评预警,业务:XX,流水号:XX,窗口:XX,工作人员:XX,收到一条差评 //发送差评消息 差评预警,业务:XX,流水号:XX,窗口:XX,工作人员:XX,收到一条差评
//流水号:%s,在xxx窗口办理%s业务的工作人员%s收到客户发起的:%s评价,内容:%s!
String alarmContent = String.format( String alarmContent = String.format(
"业务:%s,流水号:%s,窗口:%s:,工作人员%s 发起:%s,评价内容:%s!", "流水号:%s,在%s窗口办理%s业务的工作人员%s收到客户发起的:%s评价,内容:%s!",
cpRecordsEntity.getBussinessName(), cpRecordsEntity.getFlounum(), cpRecordsEntity.getFlounum(), cpRecordsEntity.getWindowNum(),
cpRecordsEntity.getWindowName(), cpPersonInfo.getWorkmanName(), cpRecordsEntity.getBussinessName(),
cpPersonInfo.getWorkmanName(),
cpPersonInfo.getOptionId(), cpPersonInfo.getContent()); cpPersonInfo.getOptionId(), cpPersonInfo.getContent());
MessageTaskEntity messageTaskEntity = new MessageTaskEntity(); MessageTaskEntity messageTaskEntity = new MessageTaskEntity();
messageTaskEntity.initAttrValue(); messageTaskEntity.initAttrValue();
......
...@@ -14,7 +14,7 @@ import lombok.Data; ...@@ -14,7 +14,7 @@ import lombok.Data;
* 差评差评记录实体对象 * 差评差评记录实体对象
* *
* @author zxfei * @author zxfei
* @date 2025-04-10 * @date 2025-04-11
*/ */
@Data @Data
public class CpRecordsEntity extends CpRecordsVo { public class CpRecordsEntity extends CpRecordsVo {
...@@ -92,6 +92,10 @@ public class CpRecordsEntity extends CpRecordsVo { ...@@ -92,6 +92,10 @@ public class CpRecordsEntity extends CpRecordsVo {
* 预约业务 * 预约业务
*/ */
private String bussinessName; private String bussinessName;
/**
* 窗口编号
*/
private String windowNum;
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
...@@ -127,5 +131,6 @@ public class CpRecordsEntity extends CpRecordsVo { ...@@ -127,5 +131,6 @@ public class CpRecordsEntity extends CpRecordsVo {
this.pjTime = null; this.pjTime = null;
this.bussinessId = null; this.bussinessId = null;
this.bussinessName = ""; this.bussinessName = "";
this.windowNum = "";
} }
} }
\ No newline at end of file
...@@ -7,7 +7,7 @@ import com.mortals.xhx.module.cp.model.CpRecordsEntity; ...@@ -7,7 +7,7 @@ import com.mortals.xhx.module.cp.model.CpRecordsEntity;
* 差评差评记录查询对象 * 差评差评记录查询对象
* *
* @author zxfei * @author zxfei
* @date 2025-04-10 * @date 2025-04-11
*/ */
public class CpRecordsQuery extends CpRecordsEntity { public class CpRecordsQuery extends CpRecordsEntity {
/** 开始 主键ID,主键,自增长 */ /** 开始 主键ID,主键,自增长 */
...@@ -208,6 +208,11 @@ public class CpRecordsQuery extends CpRecordsEntity { ...@@ -208,6 +208,11 @@ public class CpRecordsQuery extends CpRecordsEntity {
/** 预约业务排除列表 */ /** 预约业务排除列表 */
private List <String> bussinessNameNotList; private List <String> bussinessNameNotList;
/** 窗口编号 */
private List<String> windowNumList;
/** 窗口编号排除列表 */
private List <String> windowNumNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */ /** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<CpRecordsQuery> orConditionList; private List<CpRecordsQuery> orConditionList;
...@@ -1344,6 +1349,38 @@ public class CpRecordsQuery extends CpRecordsEntity { ...@@ -1344,6 +1349,38 @@ public class CpRecordsQuery extends CpRecordsEntity {
this.bussinessNameNotList = bussinessNameNotList; this.bussinessNameNotList = bussinessNameNotList;
} }
/**
* 获取 窗口编号
* @return windowNumList
*/
public List<String> getWindowNumList(){
return this.windowNumList;
}
/**
* 设置 窗口编号
* @param windowNumList
*/
public void setWindowNumList(List<String> windowNumList){
this.windowNumList = windowNumList;
}
/**
* 获取 窗口编号
* @return windowNumNotList
*/
public List<String> getWindowNumNotList(){
return this.windowNumNotList;
}
/**
* 设置 窗口编号
* @param windowNumNotList
*/
public void setWindowNumNotList(List<String> windowNumNotList){
this.windowNumNotList = windowNumNotList;
}
/** /**
* 设置 主键ID,主键,自增长 * 设置 主键ID,主键,自增长
* @param id * @param id
...@@ -2007,6 +2044,25 @@ public class CpRecordsQuery extends CpRecordsEntity { ...@@ -2007,6 +2044,25 @@ public class CpRecordsQuery extends CpRecordsEntity {
return this; return this;
} }
/**
* 设置 窗口编号
* @param windowNum
*/
public CpRecordsQuery windowNum(String windowNum){
setWindowNum(windowNum);
return this;
}
/**
* 设置 窗口编号
* @param windowNumList
*/
public CpRecordsQuery windowNumList(List<String> windowNumList){
this.windowNumList = windowNumList;
return this;
}
/** /**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) * 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList * @return orConditionList
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="bussinessId" column="bussiness_id" /> <result property="bussinessId" column="bussiness_id" />
<result property="bussinessName" column="bussiness_name" /> <result property="bussinessName" column="bussiness_name" />
<result property="windowNum" column="window_num" />
</resultMap> </resultMap>
<!-- 表所有列 --> <!-- 表所有列 -->
...@@ -102,23 +103,26 @@ ...@@ -102,23 +103,26 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('bussinessName') or colPickMode == 1 and data.containsKey('bussinessName')))"> <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('bussinessName') or colPickMode == 1 and data.containsKey('bussinessName')))">
a.bussiness_name, a.bussiness_name,
</if> </if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('windowNum') or colPickMode == 1 and data.containsKey('windowNum')))">
a.window_num,
</if>
</trim> </trim>
</sql> </sql>
<!-- 新增 区分主键自增加还是业务插入 --> <!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="CpRecordsEntity" useGeneratedKeys="true" keyProperty="id"> <insert id="insert" parameterType="CpRecordsEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_cp_records insert into mortals_xhx_cp_records
(site_id,site_name,person_id,pj_id,name,contact,id_card,window_id,window_name,section,flounum,assessment,type,content,source,pj_time,create_user_id,create_time,update_user_id,update_time,bussiness_id,bussiness_name) (site_id,site_name,person_id,pj_id,name,contact,id_card,window_id,window_name,section,flounum,assessment,type,content,source,pj_time,create_user_id,create_time,update_user_id,update_time,bussiness_id,bussiness_name,window_num)
VALUES VALUES
(#{siteId},#{siteName},#{personId},#{pjId},#{name},#{contact},#{idCard},#{windowId},#{windowName},#{section},#{flounum},#{assessment},#{type},#{content},#{source},#{pjTime},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{bussinessId},#{bussinessName}) (#{siteId},#{siteName},#{personId},#{pjId},#{name},#{contact},#{idCard},#{windowId},#{windowName},#{section},#{flounum},#{assessment},#{type},#{content},#{source},#{pjTime},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{bussinessId},#{bussinessName},#{windowNum})
</insert> </insert>
<!-- 批量新增 --> <!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto"> <insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_cp_records insert into mortals_xhx_cp_records
(site_id,site_name,person_id,pj_id,name,contact,id_card,window_id,window_name,section,flounum,assessment,type,content,source,pj_time,create_user_id,create_time,update_user_id,update_time,bussiness_id,bussiness_name) (site_id,site_name,person_id,pj_id,name,contact,id_card,window_id,window_name,section,flounum,assessment,type,content,source,pj_time,create_user_id,create_time,update_user_id,update_time,bussiness_id,bussiness_name,window_num)
VALUES VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," > <foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.siteId},#{item.siteName},#{item.personId},#{item.pjId},#{item.name},#{item.contact},#{item.idCard},#{item.windowId},#{item.windowName},#{item.section},#{item.flounum},#{item.assessment},#{item.type},#{item.content},#{item.source},#{item.pjTime},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.bussinessId},#{item.bussinessName}) (#{item.siteId},#{item.siteName},#{item.personId},#{item.pjId},#{item.name},#{item.contact},#{item.idCard},#{item.windowId},#{item.windowName},#{item.section},#{item.flounum},#{item.assessment},#{item.type},#{item.content},#{item.source},#{item.pjTime},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.bussinessId},#{item.bussinessName},#{item.windowNum})
</foreach> </foreach>
</insert> </insert>
...@@ -215,6 +219,9 @@ ...@@ -215,6 +219,9 @@
<if test="(colPickMode==0 and data.containsKey('bussinessName')) or (colPickMode==1 and !data.containsKey('bussinessName'))"> <if test="(colPickMode==0 and data.containsKey('bussinessName')) or (colPickMode==1 and !data.containsKey('bussinessName'))">
a.bussiness_name=#{data.bussinessName}, a.bussiness_name=#{data.bussinessName},
</if> </if>
<if test="(colPickMode==0 and data.containsKey('windowNum')) or (colPickMode==1 and !data.containsKey('windowNum'))">
a.window_num=#{data.windowNum},
</if>
</trim> </trim>
<trim suffixOverrides="where" suffix=""> <trim suffixOverrides="where" suffix="">
where where
...@@ -416,6 +423,13 @@ ...@@ -416,6 +423,13 @@
</if> </if>
</foreach> </foreach>
</trim> </trim>
<trim prefix="window_num=(case" suffix="ELSE window_num end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('windowNum')) or (colPickMode==1 and !item.containsKey('windowNum'))">
when a.id=#{item.id} then #{item.windowNum}
</if>
</foreach>
</trim>
</trim> </trim>
where id in where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")"> <foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
...@@ -1049,6 +1063,27 @@ ...@@ -1049,6 +1063,27 @@
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="conditionParamRef.containsKey('windowNum')">
<if test="conditionParamRef.windowNum != null and conditionParamRef.windowNum != ''">
${_conditionType_} a.window_num like #{${_conditionParam_}.windowNum}
</if>
<if test="conditionParamRef.windowNum == null">
${_conditionType_} a.window_num is null
</if>
</if>
<if test="conditionParamRef.containsKey('windowNumList') and conditionParamRef.windowNumList.size() > 0">
${_conditionType_} a.window_num in
<foreach collection="conditionParamRef.windowNumList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('windowNumNotList') and conditionParamRef.windowNumNotList.size() > 0">
${_conditionType_} a.window_num not in
<foreach collection="conditionParamRef.windowNumNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
</sql> </sql>
<sql id="_orderCols_"> <sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()"> <if test="orderColList != null and !orderColList.isEmpty()">
...@@ -1289,6 +1324,11 @@ ...@@ -1289,6 +1324,11 @@
<if test='orderCol.bussinessName != null and "DESC".equalsIgnoreCase(orderCol.bussinessName)'>DESC</if> <if test='orderCol.bussinessName != null and "DESC".equalsIgnoreCase(orderCol.bussinessName)'>DESC</if>
, ,
</if> </if>
<if test="orderCol.containsKey('windowNum')">
a.window_num
<if test='orderCol.windowNum != null and "DESC".equalsIgnoreCase(orderCol.windowNum)'>DESC</if>
,
</if>
</trim> </trim>
</if> </if>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment