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

添加消息发送系统

parent 2ab9ca11
......@@ -273,6 +273,7 @@ CREATE TABLE `mortals_xhx_cp_records` (
`contact` varchar(50) DEFAULT NULL COMMENT '联系方式',
`id_card` varchar(18) DEFAULT NULL COMMENT '身份证号码',
`window_id` bigint(20) DEFAULT NULL COMMENT '窗口id',
`window_num` varchar(255) DEFAULT NULL COMMENT '窗口编号',
`window_name` varchar(255) DEFAULT NULL COMMENT '窗口名称',
`bussiness_id` bigint(20) DEFAULT NULL COMMENT '业务Id',
`bussiness_name` varchar(255) DEFAULT NULL COMMENT '预约业务',
......
......@@ -62,7 +62,8 @@ public class CpPersonInfo {
@JSONField(name = "create_time",format = "yyyy-MM-dd HH:mm:ss")
private Date cpTime;
@JSONField(name = "window_num")
private String windowNum;
......
......@@ -178,10 +178,15 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService {
double doTime = NumberUtil.div(Double.parseDouble((diff) + ""), 60, 1); // 保留1位小数,四舍五入
double upTime = NumberUtil.div(Double.parseDouble((diff - avgWait) + ""), 60, 1); // 保留1位小数,四舍五入
//业务:XX,流水号:XX,已超时
String alarmContent = String.format("业务:%s,流水号:%s,叫号等待时间为%.1f分钟,超过了平均等待时长%.1f分钟!",
double avgTime = NumberUtil.div(Double.parseDouble((avgWait) + ""), 60, 1); // 保留1位小数,四舍五入
//流水号:xxx,xxx业务平均等待时长xxx,当前叫号时间为xxx,超过了平均等待时间!
/* String alarmContent = String.format("业务:%s,流水号:%s,叫号等待时间为%.1f分钟,超过了平均等待时长%.1f分钟!",
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();
messageTaskEntity.setMessageType(等待超时预警.getValue());
messageTaskEntity.setSiteId(siteId);
......@@ -236,11 +241,18 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService {
double doTime = NumberUtil.div(Double.parseDouble((diff) + ""), 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,已办理超时
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.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.initAttrValue();
Long siteId = item.getSiteId();
......@@ -292,11 +304,12 @@ public class SyncAppointWaitAndFinTaskImpl implements ITaskExcuteService {
cpRecordsService.save(cpRecordsEntity);
//发送差评消息 差评预警,业务:XX,流水号:XX,窗口:XX,工作人员:XX,收到一条差评
//流水号:%s,在xxx窗口办理%s业务的工作人员%s收到客户发起的:%s评价,内容:%s!
String alarmContent = String.format(
"业务:%s,流水号:%s,窗口:%s:,工作人员%s 发起:%s,评价内容:%s!",
cpRecordsEntity.getBussinessName(), cpRecordsEntity.getFlounum(),
cpRecordsEntity.getWindowName(), cpPersonInfo.getWorkmanName(),
"流水号:%s,在%s窗口办理%s业务的工作人员%s收到客户发起的:%s评价,内容:%s!",
cpRecordsEntity.getFlounum(), cpRecordsEntity.getWindowNum(),
cpRecordsEntity.getBussinessName(),
cpPersonInfo.getWorkmanName(),
cpPersonInfo.getOptionId(), cpPersonInfo.getContent());
MessageTaskEntity messageTaskEntity = new MessageTaskEntity();
messageTaskEntity.initAttrValue();
......
......@@ -14,7 +14,7 @@ import lombok.Data;
* 差评差评记录实体对象
*
* @author zxfei
* @date 2025-04-10
* @date 2025-04-11
*/
@Data
public class CpRecordsEntity extends CpRecordsVo {
......@@ -92,6 +92,10 @@ public class CpRecordsEntity extends CpRecordsVo {
* 预约业务
*/
private String bussinessName;
/**
* 窗口编号
*/
private String windowNum;
@Override
public int hashCode() {
return this.getId().hashCode();
......@@ -127,5 +131,6 @@ public class CpRecordsEntity extends CpRecordsVo {
this.pjTime = null;
this.bussinessId = null;
this.bussinessName = "";
this.windowNum = "";
}
}
\ No newline at end of file
......@@ -7,7 +7,7 @@ import com.mortals.xhx.module.cp.model.CpRecordsEntity;
* 差评差评记录查询对象
*
* @author zxfei
* @date 2025-04-10
* @date 2025-04-11
*/
public class CpRecordsQuery extends CpRecordsEntity {
/** 开始 主键ID,主键,自增长 */
......@@ -208,6 +208,11 @@ public class CpRecordsQuery extends CpRecordsEntity {
/** 预约业务排除列表 */
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) */
private List<CpRecordsQuery> orConditionList;
......@@ -1344,6 +1349,38 @@ public class CpRecordsQuery extends CpRecordsEntity {
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,主键,自增长
* @param id
......@@ -2007,6 +2044,25 @@ public class CpRecordsQuery extends CpRecordsEntity {
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)
* @return orConditionList
......
......@@ -28,6 +28,7 @@
<result property="updateTime" column="update_time" />
<result property="bussinessId" column="bussiness_id" />
<result property="bussinessName" column="bussiness_name" />
<result property="windowNum" column="window_num" />
</resultMap>
<!-- 表所有列 -->
......@@ -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')))">
a.bussiness_name,
</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>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="CpRecordsEntity" useGeneratedKeys="true" keyProperty="id">
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
(#{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 id="insertBatch" parameterType="paramDto">
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
<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>
</insert>
......@@ -215,6 +219,9 @@
<if test="(colPickMode==0 and data.containsKey('bussinessName')) or (colPickMode==1 and !data.containsKey('bussinessName'))">
a.bussiness_name=#{data.bussinessName},
</if>
<if test="(colPickMode==0 and data.containsKey('windowNum')) or (colPickMode==1 and !data.containsKey('windowNum'))">
a.window_num=#{data.windowNum},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
......@@ -416,6 +423,13 @@
</if>
</foreach>
</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>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
......@@ -1049,6 +1063,27 @@
#{item}
</foreach>
</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 id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
......@@ -1289,6 +1324,11 @@
<if test='orderCol.bussinessName != null and "DESC".equalsIgnoreCase(orderCol.bussinessName)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('windowNum')">
a.window_num
<if test='orderCol.windowNum != null and "DESC".equalsIgnoreCase(orderCol.windowNum)'>DESC</if>
,
</if>
</trim>
</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