From 57dd7c30431407f60b303a7800de0e87dd16843e Mon Sep 17 00:00:00 2001 From: huangdeliang <huangdeliang@skieer.com> Date: Wed, 26 May 2021 18:11:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/SysServiceQuestionController.java | 40 ++++- .../custom/WechatAppletController.java | 70 +++++--- .../core/controller/BaseController.java | 60 +++---- .../custom/domain/SysServicesTopic.java | 73 ++++++++ .../service/ISysServicesQuestionService.java | 2 +- .../impl/SysServicesQuestionServiceImp.java | 19 ++- .../custom/SysServicesQuestionMapper.xml | 16 +- .../mapper/custom/SysServicesTopicMapper.xml | 156 ++++++++++++++++++ 8 files changed, 363 insertions(+), 73 deletions(-) create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java create mode 100644 stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceQuestionController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceQuestionController.java index c80f1b488..4f7cf6fb7 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceQuestionController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceQuestionController.java @@ -2,11 +2,15 @@ package com.stdiet.web.controller.custom; import com.stdiet.common.core.controller.BaseController; import com.stdiet.common.core.domain.AjaxResult; +import com.stdiet.common.core.page.TableDataInfo; +import com.stdiet.common.utils.StringUtils; import com.stdiet.custom.domain.SysServicesQuestion; import com.stdiet.custom.service.ISysServicesQuestionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/services/question") public class SysServiceQuestionController extends BaseController { @@ -14,18 +18,38 @@ public class SysServiceQuestionController extends BaseController { @Autowired private ISysServicesQuestionService sysServicesQuestionService; - @PostMapping("/list") - public AjaxResult list(@RequestBody SysServicesQuestion sysServicesQuestion) { - return AjaxResult.success(sysServicesQuestionService.selectSysServicesQuestionByUserIdAndRole(sysServicesQuestion)); + @GetMapping("/list") + public TableDataInfo list(SysServicesQuestion sysServicesQuestion) { + startPage(); + return getDataTable(sysServicesQuestionService.selectSysServicesQuestionByUserIdAndRole(sysServicesQuestion)); } - @PutMapping("/updateStatus") - public AjaxResult status(@RequestBody SysServicesQuestion sysServicesQuestion) { - return toAjax(sysServicesQuestionService.updateSysServicesQuestionStatus(sysServicesQuestion)); - } +// @PutMapping("/update/status") +// public AjaxResult status(@RequestBody SysServicesQuestion sysServicesQuestion) { +// return toAjax(sysServicesQuestionService.updateSysServicesQuestionStatus(sysServicesQuestion)); +// } @PostMapping("/reply") public AjaxResult reply(@RequestBody SysServicesQuestion servicesQuestion) { - return toAjax(sysServicesQuestionService.inserSysServicesQuestionReply(servicesQuestion)); + int row = sysServicesQuestionService.inserSysServicesQuestionReply(servicesQuestion); + if (row > 0) { + // 更新customer未读,id不能有值 + servicesQuestion.setRead(0); + sysServicesQuestionService.updateSysServicesQuestionStatus(servicesQuestion); + } + return toAjax(row); + } + + @GetMapping("/detail") + public AjaxResult detail(@RequestParam String queId, @RequestParam Long id) { + List<SysServicesQuestion> questions = sysServicesQuestionService.selectSysServicesQuestionSessionByQueId(queId); + if (StringUtils.isNotNull(questions)) { + // 更新问题对应角色的状态 + SysServicesQuestion servicesQuestion = new SysServicesQuestion(); + servicesQuestion.setRead(1); + servicesQuestion.setId(id); + sysServicesQuestionService.updateSysServicesQuestionStatus(servicesQuestion); + } + return AjaxResult.success(questions); } } diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java index 4509f2940..5c7cb85e2 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java @@ -593,7 +593,7 @@ public class WechatAppletController extends BaseController { } @GetMapping("/services/list") - public AjaxResult fetchServiceQuestion(@RequestParam String customerId, @RequestParam Integer pageNum, @RequestParam Integer pageSize) { + public TableDataInfo fetchServiceQuestion(@RequestParam String customerId, @RequestParam Integer pageNum, @RequestParam Integer pageSize) { startPage(); Long cusId = StringUtils.isNotEmpty(customerId) ? Long.parseLong(AesUtils.decrypt(customerId)) : 0L; @@ -602,11 +602,12 @@ public class WechatAppletController extends BaseController { servicesQuestion.setRole("customer"); servicesQuestion.setUserId(cusId); - return AjaxResult.success(iSysServicesQuestionService.selectSysServicesQuestionByUserIdAndRole(servicesQuestion)); + return getDataTable(iSysServicesQuestionService.selectSysServicesQuestionByUserIdAndRole(servicesQuestion)); } /** * 客户添加问题 + * * @param servicesQuestion * @param customerId * @return @@ -614,42 +615,69 @@ public class WechatAppletController extends BaseController { @PostMapping("/services/post") public AjaxResult postServiceQuestion(@RequestBody SysServicesQuestion servicesQuestion, @RequestParam String customerId) { Long cusId = StringUtils.isNotEmpty(customerId) ? Long.parseLong(AesUtils.decrypt(customerId)) : 0L; - if(cusId == 0L) { + if (cusId == 0L) { return toAjax(0); } servicesQuestion.setCusId(cusId); - return toAjax(iSysServicesQuestionService.insertSysServicesQuestion(servicesQuestion)); - } - @GetMapping("/services/reply") - public AjaxResult serviceQuestionReply(@RequestParam String queId) { - return AjaxResult.success(iSysServicesQuestionService.selectSysServicesQuestionSessionByQueId(queId)); + return AjaxResult.success(iSysServicesQuestionService.insertSysServicesQuestion(servicesQuestion)); } /** - * 设置已读 - * @param id + * 回答问题 + * + * @param servicesQuestion + * @param customerId * @return */ - @GetMapping("/services/post/update") - public AjaxResult updateServiceQuestion(@RequestParam Long id) { - SysServicesQuestion servicesQuestion = new SysServicesQuestion(); - servicesQuestion.setRead(1); - servicesQuestion.setId(id); - - return toAjax(iSysServicesQuestionService.updateSysServicesQuestionStatus(servicesQuestion)); - } - @PostMapping("/services/post/reply") public AjaxResult replyServiceQuestion(@RequestBody SysServicesQuestion servicesQuestion, @RequestParam String customerId) { Long cusId = StringUtils.isNotEmpty(customerId) ? Long.parseLong(AesUtils.decrypt(customerId)) : 0L; - + if (cusId == 0L) { + return toAjax(0); + } servicesQuestion.setRole("customer"); servicesQuestion.setUserId(cusId); - return toAjax(iSysServicesQuestionService.inserSysServicesQuestionReply(servicesQuestion)); + int row = iSysServicesQuestionService.inserSysServicesQuestionReply(servicesQuestion); + if (row > 0) { + // 更新三个觉得未读,id不能有值 + servicesQuestion.setRead(0); + iSysServicesQuestionService.updateSysServicesQuestionStatus(servicesQuestion); + } + + return toAjax(row); } + /** + * 获取问题详情 + * + * @param id + * @return + */ + @GetMapping("/services/detail") + public AjaxResult serviceQuestionDetail(@RequestParam String queId, @RequestParam Long id) { + List<SysServicesQuestion> questions = iSysServicesQuestionService.selectSysServicesQuestionSessionByQueId(queId); + if (StringUtils.isNotNull(questions)) { + SysServicesQuestion status = new SysServicesQuestion(); + status.setId(id); + status.setRead(1); + iSysServicesQuestionService.updateSysServicesQuestionStatus(status); + } + return AjaxResult.success(questions); + } + + +// @GetMapping("/services/post/update") +// public AjaxResult updateServiceQuestion(@RequestParam Long id) { +// SysServicesQuestion servicesQuestion = new SysServicesQuestion(); +// servicesQuestion.setRead(1); +// servicesQuestion.setId(id); +// +// return toAjax(iSysServicesQuestionService.updateSysServicesQuestionStatus(servicesQuestion)); +// } + + } diff --git a/stdiet-common/src/main/java/com/stdiet/common/core/controller/BaseController.java b/stdiet-common/src/main/java/com/stdiet/common/core/controller/BaseController.java index 3b1cc8d45..250614f38 100644 --- a/stdiet-common/src/main/java/com/stdiet/common/core/controller/BaseController.java +++ b/stdiet-common/src/main/java/com/stdiet/common/core/controller/BaseController.java @@ -1,12 +1,5 @@ package com.stdiet.common.core.controller; -import java.beans.PropertyEditorSupport; -import java.util.Date; -import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.WebDataBinder; -import org.springframework.web.bind.annotation.InitBinder; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.stdiet.common.constant.HttpStatus; @@ -17,28 +10,33 @@ import com.stdiet.common.core.page.TableSupport; import com.stdiet.common.utils.DateUtils; import com.stdiet.common.utils.StringUtils; import com.stdiet.common.utils.sql.SqlUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import java.beans.PropertyEditorSupport; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** * web层通用数据处理 - * + * * @author stdiet */ -public class BaseController -{ +public class BaseController { protected final Logger logger = LoggerFactory.getLogger(BaseController.class); /** * 将前台传递过来的日期格式的字符串,自动转化为Date类型 */ @InitBinder - public void initBinder(WebDataBinder binder) - { + public void initBinder(WebDataBinder binder) { // Date 类型转换 - binder.registerCustomEditor(Date.class, new PropertyEditorSupport() - { + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { @Override - public void setAsText(String text) - { + public void setAsText(String text) { setValue(DateUtils.parseDate(text)); } }); @@ -47,13 +45,11 @@ public class BaseController /** * 设置请求分页数据 */ - protected void startPage() - { + protected void startPage() { PageDomain pageDomain = TableSupport.buildPageRequest(); Integer pageNum = pageDomain.getPageNum(); Integer pageSize = pageDomain.getPageSize(); - if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) - { + if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) { String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); PageHelper.startPage(pageNum, pageSize, orderBy); } @@ -62,33 +58,37 @@ public class BaseController /** * 响应请求分页数据 */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - protected TableDataInfo getDataTable(List<?> list) - { + @SuppressWarnings({"rawtypes", "unchecked"}) + protected TableDataInfo getDataTable(List<?> list) { + + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + + long total = new PageInfo(list).getTotal(); + TableDataInfo rspData = new TableDataInfo(); rspData.setCode(HttpStatus.SUCCESS); rspData.setMsg("查询成功"); - rspData.setRows(list); - rspData.setTotal(new PageInfo(list).getTotal()); + rspData.setRows(total > pageSize * (pageNum - 1) ? list : new ArrayList<>()); + rspData.setTotal(total); return rspData; } /** * 响应返回结果 - * + * * @param rows 影响行数 * @return 操作结果 */ - protected AjaxResult toAjax(int rows) - { + protected AjaxResult toAjax(int rows) { return rows > 0 ? AjaxResult.success() : AjaxResult.error(); } /** * 页面跳转 */ - public String redirect(String url) - { + public String redirect(String url) { return StringUtils.format("redirect:{}", url); } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java new file mode 100644 index 000000000..c21645535 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java @@ -0,0 +1,73 @@ +package com.stdiet.custom.domain; + +import com.alibaba.fastjson.JSONArray; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +@Data +public class SysServicesTopic { + /** + * + */ + Long id; + + /** + * 问题id + */ + String topicId; + + /** + * 问题类型 + */ + Integer topicType; + + /** + * 角色 + */ + Long uid; + + Long fromUid; + + Long toUid; + + /** + * 问题内容 + */ + String content; + + /** + * 图片地址 + */ + JSONArray img; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + Date createTime; + + /** + * 0-未读 1-已读 + */ + Integer read; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + Date updateTime; + + /** + * 角色 + */ + String role; + + // 非持久化字段 + /** + * 角色名字 + */ + String name; + +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesQuestionService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesQuestionService.java index 329f94e21..f671b9268 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesQuestionService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesQuestionService.java @@ -8,7 +8,7 @@ public interface ISysServicesQuestionService { List<SysServicesQuestion> selectSysServicesQuestionByUserIdAndRole(SysServicesQuestion servicesQuestion); - int insertSysServicesQuestion(SysServicesQuestion servicesQuestion); + SysServicesQuestion insertSysServicesQuestion(SysServicesQuestion servicesQuestion); int updateSysServicesQuestionStatus(SysServicesQuestion sysServicesQuestion); diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesQuestionServiceImp.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesQuestionServiceImp.java index 1c9691014..fbaca72b1 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesQuestionServiceImp.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesQuestionServiceImp.java @@ -1,5 +1,6 @@ package com.stdiet.custom.service.impl; +import com.stdiet.common.utils.DateUtils; import com.stdiet.common.utils.uuid.UUID; import com.stdiet.custom.domain.SysCustomer; import com.stdiet.custom.domain.SysServicesQuestion; @@ -26,9 +27,11 @@ public class SysServicesQuestionServiceImp implements ISysServicesQuestionServic } @Override - public int insertSysServicesQuestion(SysServicesQuestion servicesQuestion) { + public SysServicesQuestion insertSysServicesQuestion(SysServicesQuestion servicesQuestion) { // 生成uuid servicesQuestion.setQueId(UUID.randomUUID().toString().replaceAll("-", "")); + servicesQuestion.setRead(1); + servicesQuestion.setCreateTime(DateUtils.getNowDate()); servicesQuestionMapper.insertSysServicesQuestion(servicesQuestion); @@ -45,25 +48,31 @@ public class SysServicesQuestionServiceImp implements ISysServicesQuestionServic SysServicesQuestion dieticianStatus = new SysServicesQuestion(); dieticianStatus.setUserId(customer.getMainDietitian()); dieticianStatus.setRole("dietician"); - customerStatus.setRead(0); + dieticianStatus.setRead(0); dieticianStatus.setQueId(servicesQuestion.getQueId()); statusList.add(dieticianStatus); SysServicesQuestion afterSaleStatus = new SysServicesQuestion(); afterSaleStatus.setUserId(customer.getAfterDietitian()); afterSaleStatus.setRole("after_sale"); - customerStatus.setRead(0); + afterSaleStatus.setRead(0); afterSaleStatus.setQueId(servicesQuestion.getQueId()); statusList.add(afterSaleStatus); SysServicesQuestion dieticianAssistantStatus = new SysServicesQuestion(); dieticianAssistantStatus.setUserId(customer.getAssistantDietitian()); dieticianAssistantStatus.setRole("dietician_assistant"); - customerStatus.setRead(0); + dieticianAssistantStatus.setRead(0); dieticianAssistantStatus.setQueId(servicesQuestion.getQueId()); + statusList.add(dieticianAssistantStatus); - return servicesQuestionMapper.insertSysServicesQuestionStatus(statusList); + servicesQuestionMapper.insertSysServicesQuestionStatus(statusList); + + servicesQuestion.setId(customerStatus.getId()); + servicesQuestion.setCusId(null); + + return servicesQuestion; } diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml index e45c1da94..964e6d196 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml @@ -48,7 +48,7 @@ ) AS user USING(user_id) </otherwise> </choose> - ORDER BY type ASC, update_time DESC + ORDER BY `read` ASC, update_time DESC </select> <select id="selectSysServicesQuestionSessionByQueId" resultMap="SysServicesQuestionSessionResult" @@ -78,7 +78,7 @@ <if test="cusId != null">cus_id,</if> <if test="content != null">content,</if> <if test="type != null">type,</if> - <if test="cusId != null">create_time,</if> + <if test="createTime != null">create_time,</if> <if test="img != null">img,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> @@ -86,7 +86,7 @@ <if test="cusId != null">#{cusId},</if> <if test="content != null">#{content},</if> <if test="type != null">#{type},</if> - <if test="cusId != null">now(),</if> + <if test="createTime != null">#{createTime},</if> <if test="img != null"> #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, </if> @@ -94,10 +94,11 @@ </insert> <!-- 插入问题的四个角色:1,用户; 2,营养师; 3,售后; 4,助理--> - <insert id="insertSysServicesQuestionStatus" parameterType="java.util.List"> - insert into sys_services_question_status (que_id, user_id, role, create_time, update_time) values + <insert id="insertSysServicesQuestionStatus" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" + keyColumn="id"> + insert into sys_services_question_status (que_id, user_id, role, `read`, create_time, update_time) values <foreach collection="list" item="status" index="index" separator=","> - (#{status.queId}, #{status.userId}, #{status.role}, now(), now()) + (#{status.queId}, #{status.userId}, #{status.role}, #{status.read}, now(), now()) </foreach> </insert> @@ -127,8 +128,7 @@ </update> <!-- 插入问题回复--> - <insert id="inserSysServicesQuestionReply" parameterType="SysServicesQuestion" useGeneratedKeys="true" - keyProperty="id" keyColumn="id"> + <insert id="inserSysServicesQuestionReply" parameterType="SysServicesQuestion"> insert into sys_services_question_session <trim prefix="(" suffix=")" suffixOverrides=","> <if test="queId != null">que_id,</if> diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml new file mode 100644 index 000000000..160b5b90b --- /dev/null +++ b/stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml @@ -0,0 +1,156 @@ +<?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.stdiet.custom.mapper.SysServicesTopicMapper"> + + <resultMap type="SysServicesTopic" id="SysServicesTopicResult"> + <result column="id" property="id"/> + <result column="topic_id" property="topicId"/> + <result column="topic_type" property="topicType"/> + <result column="content" property="content"/> + <result column="role" property="role"/> + <result column="name" property="name"/> + <result column="read" property="read"/> + <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/> + <result column="create_time" property="createTime"/> + <result column="update_time" property="updateTime"/> + </resultMap> + + <resultMap id="SysServicesQuestionSessionResult" type="SysServicesQuestion"> + <result column="id" property="id"/> + <result column="type" property="type"/> + <result column="content" property="content"/> + <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/> + <result column="create_time" property="createTime"/> + <association property="name" column="{userId=user_id,role=role}" select="selectUserInfo"/> + </resultMap> + + <!-- 根据userId和角色查询问题列表--> + <select id="selectSysServicesTopicByUserIdAndRole" parameterType="SysServicesTopic" + resultMap="SysServicesQuestionResult"> + SELECT * FROM ( + SELECT * FROM sys_services_topic_status WHERE role = #{role} AND uid = #{uid} + ) AS status + LEFT JOIN sys_services_question USING(topic_id) + <choose> + <when test="role == 'customer'"> + LEFT JOIN ( + SELECT name, id AS uid FROM sys_customer WHERE id = #{uid} + ) AS customer USING(uid) + </when> + <otherwise> + LEFT JOIN ( + SELECT name, user_id AS uid, nick_name AS name FROM sys_user WHERE user_id = #{uid} + ) AS user USING(uid) + </otherwise> + </choose> + ORDER BY `read` ASC, update_time DESC + </select> + + <select id="selectSysServicesQuestionSessionByQueId" resultMap="SysServicesQuestionSessionResult" + parameterType="String"> + select que_id, cus_id as user_id, 'customer' as role, content, img, create_time from sys_services_question where que_id = #{queId} + union select que_id, user_id, role, content, img, create_time from sys_services_question_session where que_id = #{queId} + order by create_time asc + </select> + + <select id="selectUserInfo" parameterType="java.util.Map" resultType="String"> + <choose> + <when test="_parameter.get('role') == 'customer'"> + select name from sys_customer where id = #{userId} + </when> + <otherwise> + select nick_name from sys_user where user_id = #{userId} + </otherwise> + </choose> + </select> + + <!-- 插入问题--> + <insert id="insertSysServicesQuestion" parameterType="SysServicesQuestion" useGeneratedKeys="true" + keyProperty="queId" keyColumn="que_id"> + insert into sys_services_question + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="queId != null">que_id,</if> + <if test="cusId != null">cus_id,</if> + <if test="content != null">content,</if> + <if test="type != null">type,</if> + <if test="createTime != null">create_time,</if> + <if test="img != null">img,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="queId != null">#{queId},</if> + <if test="cusId != null">#{cusId},</if> + <if test="content != null">#{content},</if> + <if test="type != null">#{type},</if> + <if test="createTime != null">#{createTime},</if> + <if test="img != null"> + #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, + </if> + </trim> + </insert> + + <!-- 插入问题的四个角色:1,用户; 2,营养师; 3,售后; 4,助理--> + <insert id="insertSysServicesQuestionStatus" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" + keyColumn="id"> + insert into sys_services_question_status (que_id, user_id, role, `read`, create_time, update_time) values + <foreach collection="list" item="status" index="index" separator=","> + (#{status.queId}, #{status.userId}, #{status.role}, #{status.read}, now(), now()) + </foreach> + </insert> + + <!-- 根据状态id更新, role=customer 客户回复,这时更新另外三个角色未读;role != customer,更新客户未读--> + <update id="updateSysServicesQuestionStatus" parameterType="SysServicesQuestion"> + update sys_services_question_status + <trim prefix="SET" suffixOverrides=","> + <if test="read != null">`read` = #{read},</if> + <if test="read != null">update_time = now(),</if> + </trim> + <where> + <choose> + <when test="id != null"> + id = ${id} + </when> + <otherwise> + <if test="role == 'customer'"> + role != #{role} and + </if> + <if test="role != 'customer'"> + role = 'customer' and + </if> + que_id = #{queId} + </otherwise> + </choose> + </where> + </update> + + <!-- 插入问题回复--> + <insert id="inserSysServicesQuestionReply" parameterType="SysServicesQuestion"> + insert into sys_services_question_session + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="queId != null">que_id,</if> + <if test="userId != null">user_id,</if> + <if test="content != null">content,</if> + <if test="read != null">`read`,</if> + <if test="role != null">role,</if> + <if test="img != null">img,</if> + <if test="queId != null">create_time,</if> + <if test="queId != null">update_time,</if> + + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="queId != null">#{queId},</if> + <if test="userId != null">#{userId},</if> + <if test="content != null">#{content},</if> + <if test="read != null">#{read},</if> + <if test="role != null">#{role},</if> + <if test="img != null"> + #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, + </if> + <if test="queId != null">now(),</if> + <if test="queId != null">now(),</if> + </trim> + </insert> + + +</mapper> \ No newline at end of file From e5def38565ead311ccdd250f3ecb38912a4af03a Mon Sep 17 00:00:00 2001 From: huangdeliang <huangdeliang@skieer.com> Date: Thu, 27 May 2021 16:35:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/SysServiceTopicController.java | 54 +++++ .../custom/WechatAppletController.java | 20 ++ .../custom/domain/SysServicesTopic.java | 21 +- .../custom/mapper/SysServicesTopicMapper.java | 22 ++ .../service/ISysServicesTopicService.java | 21 ++ .../impl/SysServicesTopicServiceImp.java | 121 +++++++++++ .../mapper/custom/SysServicesTopicMapper.xml | 188 +++++++++++++----- .../config/properties/DruidProperties.java | 3 + 8 files changed, 397 insertions(+), 53 deletions(-) create mode 100644 stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceTopicController.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesTopicMapper.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesTopicService.java create mode 100644 stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesTopicServiceImp.java diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceTopicController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceTopicController.java new file mode 100644 index 000000000..45b74e292 --- /dev/null +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysServiceTopicController.java @@ -0,0 +1,54 @@ +package com.stdiet.web.controller.custom; + +import com.stdiet.common.core.controller.BaseController; +import com.stdiet.common.core.domain.AjaxResult; +import com.stdiet.common.core.page.TableDataInfo; +import com.stdiet.common.utils.StringUtils; +import com.stdiet.custom.domain.SysServicesTopic; +import com.stdiet.custom.service.ISysServicesTopicService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/services/topic") +public class SysServiceTopicController extends BaseController { + + @Autowired + private ISysServicesTopicService servicesTopicService; + + @GetMapping("/list") + public TableDataInfo list(SysServicesTopic topic) { + startPage(); + return getDataTable(servicesTopicService.selectSysServicesTopicByUserIdAndRole(topic)); + } + +// @PutMapping("/update/status") +// public AjaxResult status(@RequestBody SysServicesQuestion sysServicesQuestion) { +// return toAjax(sysServicesQuestionService.updateSysServicesQuestionStatus(sysServicesQuestion)); +// } + + @PostMapping("/reply") + public AjaxResult reply(@RequestBody SysServicesTopic topic) { + return AjaxResult.success(servicesTopicService.inserSysServicesTopicReply(topic)); + } + + @PostMapping("/comment") + public AjaxResult comment(@RequestBody SysServicesTopic topic) { + return AjaxResult.success(servicesTopicService.inserSysServicesTopicComment(topic)); + } + + @GetMapping("/detail") + public AjaxResult detail(@RequestParam String topicId, @RequestParam String id) { + List<SysServicesTopic> questions = servicesTopicService.selectSysServicesTopicSessionByTopicId(topicId); + if (StringUtils.isNotNull(questions)) { + // 更新问题对应角色的状态 + SysServicesTopic status = new SysServicesTopic(); + status.setRead(1); + status.setId(id); + servicesTopicService.updateSysServicesTopicStatus(status); + } + return AjaxResult.success(questions); + } +} diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java index 5c7cb85e2..f012f7582 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/WechatAppletController.java @@ -70,6 +70,8 @@ public class WechatAppletController extends BaseController { private IWechatAppletService iWechatAppletService; @Autowired private ISysServicesQuestionService iSysServicesQuestionService; + @Autowired + private ISysServicesTopicService iSysServicesTopicService; /** * 查询微信小程序中展示的客户案例 @@ -605,6 +607,24 @@ public class WechatAppletController extends BaseController { return getDataTable(iSysServicesQuestionService.selectSysServicesQuestionByUserIdAndRole(servicesQuestion)); } + /** + * 客户添加问题 + * + * @param topic + * @param customerId + * @return + */ + @PostMapping("/services/topic/post") + public AjaxResult postServiceTopic(@RequestBody SysServicesTopic topic, @RequestParam String customerId) { + Long cusId = StringUtils.isNotEmpty(customerId) ? Long.parseLong(AesUtils.decrypt(customerId)) : 0L; + if (cusId == 0L) { + return toAjax(0); + } + topic.setUid(cusId); + + return AjaxResult.success(iSysServicesTopicService.insertSysServicesTopic(topic)); + } + /** * 客户添加问题 * diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java index c21645535..d76cf691a 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesTopic.java @@ -2,16 +2,19 @@ package com.stdiet.custom.domain; import com.alibaba.fastjson.JSONArray; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import java.util.Date; +import java.util.List; @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public class SysServicesTopic { /** * */ - Long id; + String id; /** * 问题id @@ -23,6 +26,12 @@ public class SysServicesTopic { */ Integer topicType; + String commentId; + + String replyId; + + Integer replyType; + /** * 角色 */ @@ -64,10 +73,20 @@ public class SysServicesTopic { */ String role; + String fromRole; + + String toRole; + // 非持久化字段 /** * 角色名字 */ + String fromName; + String toName; String name; + List<SysServicesTopic> comments; + + List<SysServicesTopic> replys; + } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesTopicMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesTopicMapper.java new file mode 100644 index 000000000..29ecaadaa --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesTopicMapper.java @@ -0,0 +1,22 @@ +package com.stdiet.custom.mapper; + +import com.stdiet.custom.domain.SysServicesQuestion; +import com.stdiet.custom.domain.SysServicesTopic; + +import java.util.List; + +public interface SysServicesTopicMapper { + List<SysServicesTopic> selectSysServicesTopicByUserIdAndRole(SysServicesTopic topic); + + int insertSysServicesTopic(SysServicesTopic topic); + + int insertSysServicesTopicStatus(List<SysServicesTopic> topics); + + int updateSysServicesTopicStatus(SysServicesTopic topic); + + int inserSysServicesTopicComment(SysServicesTopic topic); + + int inserSysServicesTopicReply(SysServicesTopic topic); + + List<SysServicesTopic> selectSysServicesTopicSessionByTopicId(String topicId); +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesTopicService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesTopicService.java new file mode 100644 index 000000000..dedfe3873 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysServicesTopicService.java @@ -0,0 +1,21 @@ +package com.stdiet.custom.service; + +import com.stdiet.custom.domain.SysServicesQuestion; +import com.stdiet.custom.domain.SysServicesTopic; + +import java.util.List; + +public interface ISysServicesTopicService { + + List<SysServicesTopic> selectSysServicesTopicByUserIdAndRole(SysServicesTopic topic); + + SysServicesTopic insertSysServicesTopic(SysServicesTopic topic); + + int updateSysServicesTopicStatus(SysServicesTopic topic); + + SysServicesTopic inserSysServicesTopicReply(SysServicesTopic topic); + + SysServicesTopic inserSysServicesTopicComment(SysServicesTopic topic); + + List<SysServicesTopic> selectSysServicesTopicSessionByTopicId(String topicId); +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesTopicServiceImp.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesTopicServiceImp.java new file mode 100644 index 000000000..a66a0b3dd --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysServicesTopicServiceImp.java @@ -0,0 +1,121 @@ +package com.stdiet.custom.service.impl; + +import com.stdiet.common.utils.DateUtils; +import com.stdiet.common.utils.uuid.UUID; +import com.stdiet.custom.domain.SysCustomer; +import com.stdiet.custom.domain.SysServicesTopic; +import com.stdiet.custom.mapper.SysCustomerMapper; +import com.stdiet.custom.mapper.SysServicesTopicMapper; +import com.stdiet.custom.service.ISysServicesTopicService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class SysServicesTopicServiceImp implements ISysServicesTopicService { + @Autowired + SysServicesTopicMapper servicesTopicMapper; + + @Autowired + SysCustomerMapper sysCustomerMapper; + + @Override + public List<SysServicesTopic> selectSysServicesTopicByUserIdAndRole(SysServicesTopic topic) { + return servicesTopicMapper.selectSysServicesTopicByUserIdAndRole(topic); + } + + + @Override + public SysServicesTopic insertSysServicesTopic(SysServicesTopic topic) { + // 生成uuid + topic.setTopicId(UUID.randomUUID().toString().replaceAll("-", "")); + topic.setRead(1); + topic.setCreateTime(DateUtils.getNowDate()); + + servicesTopicMapper.insertSysServicesTopic(topic); + + SysCustomer customer = sysCustomerMapper.selectSysCustomerById(topic.getUid()); + + List<SysServicesTopic> statusList = new ArrayList<>(); + + SysServicesTopic customerStatus = new SysServicesTopic(); + customerStatus.setUid(customer.getId()); + customerStatus.setRole("customer"); + customerStatus.setRead(1); + customerStatus.setTopicId(topic.getTopicId()); + statusList.add(customerStatus); + + SysServicesTopic dieticianStatus = new SysServicesTopic(); + dieticianStatus.setUid(customer.getMainDietitian()); + dieticianStatus.setRole("dietician"); + dieticianStatus.setRead(0); + dieticianStatus.setTopicId(topic.getTopicId()); + statusList.add(dieticianStatus); + + SysServicesTopic afterSaleStatus = new SysServicesTopic(); + afterSaleStatus.setUid(customer.getAfterDietitian()); + afterSaleStatus.setRole("after_sale"); + afterSaleStatus.setRead(0); + afterSaleStatus.setTopicId(topic.getTopicId()); + statusList.add(afterSaleStatus); + + SysServicesTopic dieticianAssistantStatus = new SysServicesTopic(); + dieticianAssistantStatus.setUid(customer.getAssistantDietitian()); + dieticianAssistantStatus.setRole("dietician_assistant"); + dieticianAssistantStatus.setRead(0); + dieticianAssistantStatus.setTopicId(topic.getTopicId()); + statusList.add(dieticianAssistantStatus); + + servicesTopicMapper.insertSysServicesTopicStatus(statusList); + + topic.setId(customerStatus.getId()); + topic.setUid(null); + + return topic; + } + + @Override + public int updateSysServicesTopicStatus(SysServicesTopic topic) { + return servicesTopicMapper.updateSysServicesTopicStatus(topic); + } + + + @Override + public SysServicesTopic inserSysServicesTopicReply(SysServicesTopic topic) { + String uuid = java.util.UUID.randomUUID().toString().replace("-", ""); + topic.setId(uuid); + int row = servicesTopicMapper.inserSysServicesTopicReply(topic); + if (row > 0) { + // 设置未读 + SysServicesTopic status = new SysServicesTopic(); + status.setRead(0); + status.setTopicId(topic.getTopicId()); + status.setRole(topic.getRole()); + servicesTopicMapper.updateSysServicesTopicStatus(status); + } + return topic; + } + + @Override + public SysServicesTopic inserSysServicesTopicComment(SysServicesTopic topic) { + String uuid = java.util.UUID.randomUUID().toString().replace("-", ""); + topic.setId(uuid); + int row = servicesTopicMapper.inserSysServicesTopicComment(topic); + if (row > 0) { + // 设置未读 + SysServicesTopic status = new SysServicesTopic(); + status.setRead(0); + status.setTopicId(topic.getTopicId()); + status.setRole(topic.getRole()); + servicesTopicMapper.updateSysServicesTopicStatus(status); + } + return topic; + } + + @Override + public List<SysServicesTopic> selectSysServicesTopicSessionByTopicId(String topicId) { + return servicesTopicMapper.selectSysServicesTopicSessionByTopicId(topicId); + } +} diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml index 160b5b90b..d309926c4 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysServicesTopicMapper.xml @@ -9,7 +9,6 @@ <result column="topic_id" property="topicId"/> <result column="topic_type" property="topicType"/> <result column="content" property="content"/> - <result column="role" property="role"/> <result column="name" property="name"/> <result column="read" property="read"/> <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/> @@ -17,91 +16,140 @@ <result column="update_time" property="updateTime"/> </resultMap> - <resultMap id="SysServicesQuestionSessionResult" type="SysServicesQuestion"> - <result column="id" property="id"/> - <result column="type" property="type"/> - <result column="content" property="content"/> - <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/> - <result column="create_time" property="createTime"/> - <association property="name" column="{userId=user_id,role=role}" select="selectUserInfo"/> - </resultMap> <!-- 根据userId和角色查询问题列表--> <select id="selectSysServicesTopicByUserIdAndRole" parameterType="SysServicesTopic" - resultMap="SysServicesQuestionResult"> + resultMap="SysServicesTopicResult"> SELECT * FROM ( SELECT * FROM sys_services_topic_status WHERE role = #{role} AND uid = #{uid} ) AS status - LEFT JOIN sys_services_question USING(topic_id) + LEFT JOIN sys_services_topic USING(topic_id) <choose> <when test="role == 'customer'"> LEFT JOIN ( - SELECT name, id AS uid FROM sys_customer WHERE id = #{uid} - ) AS customer USING(uid) + SELECT name, id AS uid FROM sys_customer WHERE id = #{uid} + ) AS customer ON status.uid = customer.uid </when> <otherwise> LEFT JOIN ( - SELECT name, user_id AS uid, nick_name AS name FROM sys_user WHERE user_id = #{uid} - ) AS user USING(uid) + SELECT user_id AS uid, nick_name AS name FROM sys_user WHERE user_id = #{uid} + ) AS user ON status.uid = user.uid </otherwise> </choose> ORDER BY `read` ASC, update_time DESC </select> - <select id="selectSysServicesQuestionSessionByQueId" resultMap="SysServicesQuestionSessionResult" + <!-- 查询主题--> + + <resultMap id="SysServicesTopicSessionResult" type="SysServicesTopic"> + <result column="id" property="id"/> + <result column="uid" property="uid"/> + <result column="topic_id" property="topicId"/> + <result column="topic_type" property="topicType"/> + <result column="content" property="content"/> + <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/> + <result column="create_time" property="createTime"/> + <association property="name" column="{uid=uid,role=role}" select="selectUserInfo"/> + <collection property="comments" column="topic_id" select="selectServicesTopicCommentByTopicId"/> + </resultMap> + + <resultMap id="ServicesTopicCommentResult" type="SysServicesTopic"> + <result column="id" property="id"/> + <result column="topic_id" property="topicId"/> + <result column="content" property="content"/> + <result column="from_uid" property="fromUid"/> + <result column="from_role" property="fromRole"/> + <result column="to_uid" property="toUid"/> + <result column="to_role" property="toRole"/> + <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/> + <result column="create_time" property="createTime"/> + <association property="fromName" column="{uid=from_uid,role=from_role}" select="selectUserInfo"/> + <association property="toName" column="{uid=to_uid,role=to_role}" select="selectUserInfo"/> + <collection property="replys" column="id" ofType="ServicesTopicCommentReplyResult" + select="selectServicesTopicCommentReplyByCommentId"/> + </resultMap> + + <resultMap id="ServicesTopicCommentReplyResult" type="SysServicesTopic"> + <result column="id" property="id"/> + <result column="topic_id" property="topicId"/> + <result column="content" property="content"/> + <result column="from_uid" property="fromUid"/> + <result column="from_role" property="fromRole"/> + <result column="to_uid" property="toUid"/> + <result column="to_role" property="toRole"/> + <result column="img" property="img" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"/> + <result column="create_time" property="createTime"/> + <association property="fromName" column="{uid=from_uid,role=from_role}" select="selectUserInfo"/> + <association property="toName" column="{uid=to_uid,role=to_role}" select="selectUserInfo"/> + + </resultMap> + + <select id="selectSysServicesTopicSessionByTopicId" resultMap="SysServicesTopicSessionResult" parameterType="String"> - select que_id, cus_id as user_id, 'customer' as role, content, img, create_time from sys_services_question where que_id = #{queId} - union select que_id, user_id, role, content, img, create_time from sys_services_question_session where que_id = #{queId} - order by create_time asc + select topic_id, uid, 'customer' as role, content, img, create_time from sys_services_topic where topic_id = #{topicId} </select> + <select id="selectServicesTopicCommentByTopicId" resultMap="ServicesTopicCommentResult"> + select * from sys_services_topic_comment where topic_id = #{topic_id} + </select> + + <select id="selectServicesTopicCommentReplyByCommentId" resultMap="ServicesTopicCommentReplyResult"> + select * from sys_services_topic_reply where reply_type = 0 and reply_id = #{id} + </select> + + <select id="selectServicesTopicCommentReplyReplyByCommentId" resultMap="ServicesTopicCommentReplyResult"> + select * from sys_services_topic_reply where reply_type = 1 and reply_id = #{id} + </select> + + + <!-- 查询人名--> <select id="selectUserInfo" parameterType="java.util.Map" resultType="String"> <choose> <when test="_parameter.get('role') == 'customer'"> - select name from sys_customer where id = #{userId} + select name from sys_customer where id = #{uid} </when> <otherwise> - select nick_name from sys_user where user_id = #{userId} + select nick_name from sys_user where user_id = #{uid} </otherwise> </choose> </select> <!-- 插入问题--> - <insert id="insertSysServicesQuestion" parameterType="SysServicesQuestion" useGeneratedKeys="true" - keyProperty="queId" keyColumn="que_id"> - insert into sys_services_question + <insert id="insertSysServicesTopic" parameterType="SysServicesTopic" useGeneratedKeys="true" + keyProperty="id" keyColumn="id"> + insert into sys_services_topic <trim prefix="(" suffix=")" suffixOverrides=","> - <if test="queId != null">que_id,</if> - <if test="cusId != null">cus_id,</if> + <if test="topicId != null">topic_id,</if> + <if test="uid != null">uid,</if> <if test="content != null">content,</if> - <if test="type != null">type,</if> + <if test="topicType != null">topic_type,</if> <if test="createTime != null">create_time,</if> <if test="img != null">img,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> - <if test="queId != null">#{queId},</if> - <if test="cusId != null">#{cusId},</if> + <if test="topicId != null">#{topicId},</if> + <if test="uid != null">#{uid},</if> <if test="content != null">#{content},</if> - <if test="type != null">#{type},</if> + <if test="topicType != null">#{topicType},</if> <if test="createTime != null">#{createTime},</if> <if test="img != null"> - #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, + #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, </if> </trim> </insert> <!-- 插入问题的四个角色:1,用户; 2,营养师; 3,售后; 4,助理--> - <insert id="insertSysServicesQuestionStatus" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" + <insert id="insertSysServicesTopicStatus" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> - insert into sys_services_question_status (que_id, user_id, role, `read`, create_time, update_time) values + insert into sys_services_topic_status (topic_id, uid, role, `read`, create_time, update_time) values <foreach collection="list" item="status" index="index" separator=","> - (#{status.queId}, #{status.userId}, #{status.role}, #{status.read}, now(), now()) + (#{status.topicId}, #{status.uid}, #{status.role}, #{status.read}, now(), now()) </foreach> </insert> <!-- 根据状态id更新, role=customer 客户回复,这时更新另外三个角色未读;role != customer,更新客户未读--> - <update id="updateSysServicesQuestionStatus" parameterType="SysServicesQuestion"> - update sys_services_question_status + <update id="updateSysServicesTopicStatus" parameterType="SysServicesTopic"> + update sys_services_topic_status <trim prefix="SET" suffixOverrides=","> <if test="read != null">`read` = #{read},</if> <if test="read != null">update_time = now(),</if> @@ -118,37 +166,73 @@ <if test="role != 'customer'"> role = 'customer' and </if> - que_id = #{queId} + topic_id = #{topicId} </otherwise> </choose> </where> </update> <!-- 插入问题回复--> - <insert id="inserSysServicesQuestionReply" parameterType="SysServicesQuestion"> - insert into sys_services_question_session + <insert id="inserSysServicesTopicComment" parameterType="SysServicesTopic"> + insert into sys_services_topic_comment <trim prefix="(" suffix=")" suffixOverrides=","> - <if test="queId != null">que_id,</if> - <if test="userId != null">user_id,</if> + <if test="id != null">id,</if> + <if test="topicId != null">topic_id,</if> + <if test="fromUid != null">from_uid,</if> + <if test="fromRole != null">from_role,</if> + <if test="toUid != null">to_uid,</if> + <if test="toRole != null">to_role,</if> <if test="content != null">content,</if> - <if test="read != null">`read`,</if> - <if test="role != null">role,</if> <if test="img != null">img,</if> - <if test="queId != null">create_time,</if> - <if test="queId != null">update_time,</if> - + <if test="topicId != null">create_time,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> - <if test="queId != null">#{queId},</if> - <if test="userId != null">#{userId},</if> + <if test="id != null">#{id},</if> + <if test="topicId != null">#{topicId},</if> + <if test="fromUid != null">#{fromUid},</if> + <if test="fromRole != null">#{fromRole},</if> + <if test="toUid != null">#{toUid},</if> + <if test="toRole != null">#{toRole},</if> <if test="content != null">#{content},</if> - <if test="read != null">#{read},</if> - <if test="role != null">#{role},</if> <if test="img != null"> #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, </if> - <if test="queId != null">now(),</if> - <if test="queId != null">now(),</if> + <if test="topicId != null">now(),</if> + </trim> + </insert> + + <!-- 插入问题回复--> + <insert id="inserSysServicesTopicReply" parameterType="SysServicesQuestion" useGeneratedKeys="true" keyColumn="id" + keyProperty="id"> + insert into sys_services_topic_reply + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="commentId != null">comment_id,</if> + <if test="replyId != null">reply_id,</if> + <if test="replyType != null">reply_type,</if> + <if test="content != null">content,</if> + <if test="fromUid != null">from_uid,</if> + <if test="toUid != null">to_uid,</if> + <if test="img != null">img,</if> + <if test="fromRole != null">from_role,</if> + <if test="toRole != null">to_role,</if> + <if test="content != null">create_time,</if> + + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="commentId != null">#{commentId},</if> + <if test="replyId != null">#{replyId},</if> + <if test="replyType != null">#{replyType},</if> + <if test="content != null">#{content},</if> + <if test="fromUid != null">#{fromUid},</if> + <if test="toUid != null">#{toUid},</if> + <if test="img != null"> + #{img, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler}, + </if> + <if test="fromRole != null">#{fromRole},</if> + <if test="toRole != null">#{toRole},</if> + <if test="content != null">now(),</if> </trim> </insert> diff --git a/stdiet-framework/src/main/java/com/stdiet/framework/config/properties/DruidProperties.java b/stdiet-framework/src/main/java/com/stdiet/framework/config/properties/DruidProperties.java index 73e8004d3..cbe94f040 100644 --- a/stdiet-framework/src/main/java/com/stdiet/framework/config/properties/DruidProperties.java +++ b/stdiet-framework/src/main/java/com/stdiet/framework/config/properties/DruidProperties.java @@ -72,6 +72,9 @@ public class DruidProperties datasource.setTestOnBorrow(testOnBorrow); /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ datasource.setTestOnReturn(testOnReturn); + + datasource.setRemoveAbandoned(true); + datasource.setRemoveAbandonedTimeout(180); return datasource; } }