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 17dec89bf..c80f1b488 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 @@ -14,13 +14,18 @@ public class SysServiceQuestionController extends BaseController { @Autowired private ISysServicesQuestionService sysServicesQuestionService; - @PostMapping(value = "/list") + @PostMapping("/list") public AjaxResult list(@RequestBody SysServicesQuestion sysServicesQuestion) { return AjaxResult.success(sysServicesQuestionService.selectSysServicesQuestionByUserIdAndRole(sysServicesQuestion)); } - @PutMapping(value = "/updateStatus") - public AjaxResult reply(@RequestBody SysServicesQuestion sysServicesQuestion) { + @PutMapping("/updateStatus") + public AjaxResult status(@RequestBody SysServicesQuestion sysServicesQuestion) { return toAjax(sysServicesQuestionService.updateSysServicesQuestionStatus(sysServicesQuestion)); } + + @PostMapping("/reply") + public AjaxResult reply(@RequestBody SysServicesQuestion servicesQuestion) { + return toAjax(sysServicesQuestionService.inserSysServicesQuestionReply(servicesQuestion)); + } } 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 690faedbc..4509f2940 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 @@ -592,7 +592,7 @@ public class WechatAppletController extends BaseController { return AjaxResult.success(sysRecipesPlanService.updateSysRecipesPlan(info)); } - @GetMapping("/fetchServiceQuestion") + @GetMapping("/services/list") public AjaxResult fetchServiceQuestion(@RequestParam String customerId, @RequestParam Integer pageNum, @RequestParam Integer pageSize) { startPage(); @@ -605,6 +605,50 @@ public class WechatAppletController extends BaseController { return AjaxResult.success(iSysServicesQuestionService.selectSysServicesQuestionByUserIdAndRole(servicesQuestion)); } + /** + * 客户添加问题 + * @param servicesQuestion + * @param customerId + * @return + */ + @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) { + 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)); + } + + /** + * 设置已读 + * @param id + * @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; + + servicesQuestion.setRole("customer"); + servicesQuestion.setUserId(cusId); + + return toAjax(iSysServicesQuestionService.inserSysServicesQuestionReply(servicesQuestion)); + } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesQuestion.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesQuestion.java index 0c711d4bc..b8237feba 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesQuestion.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysServicesQuestion.java @@ -1,6 +1,7 @@ package com.stdiet.custom.domain; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; @@ -11,7 +12,7 @@ public class SysServicesQuestion { /** * 问题状态id */ - String id; + Long id; /** * 问题id(搜索用) @@ -72,4 +73,6 @@ public class SysServicesQuestion { */ Long userId; + SysServicesQuestionUserInfo userInfo; + } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesQuestionMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesQuestionMapper.java index c68c4b63c..f38e1d949 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesQuestionMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysServicesQuestionMapper.java @@ -9,7 +9,11 @@ public interface SysServicesQuestionMapper { int insertSysServicesQuestion(SysServicesQuestion servicesQuestion); - int insertSysServicesQuestionStatus(List<SysServicesQuestion> sysServicesQuestion); + int insertSysServicesQuestionStatus(List<SysServicesQuestion> servicesQuestion); - int updateSysServicesQuestionStatus(SysServicesQuestion sysServicesQuestion); + int updateSysServicesQuestionStatus(SysServicesQuestion servicesQuestion); + + int inserSysServicesQuestionReply(SysServicesQuestion servicesQuestion); + + List<SysServicesQuestion> selectSysServicesQuestionSessionByQueId(String queId); } 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 344de4c0b..329f94e21 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 @@ -11,4 +11,8 @@ public interface ISysServicesQuestionService { int insertSysServicesQuestion(SysServicesQuestion servicesQuestion); int updateSysServicesQuestionStatus(SysServicesQuestion sysServicesQuestion); + + int inserSysServicesQuestionReply(SysServicesQuestion sysServicesQuestion); + + List<SysServicesQuestion> selectSysServicesQuestionSessionByQueId(String queId); } 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 07b61add0..1c9691014 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.uuid.UUID; import com.stdiet.custom.domain.SysCustomer; import com.stdiet.custom.domain.SysServicesQuestion; import com.stdiet.custom.mapper.SysCustomerMapper; @@ -26,6 +27,9 @@ public class SysServicesQuestionServiceImp implements ISysServicesQuestionServic @Override public int insertSysServicesQuestion(SysServicesQuestion servicesQuestion) { + // 生成uuid + servicesQuestion.setQueId(UUID.randomUUID().toString().replaceAll("-", "")); + servicesQuestionMapper.insertSysServicesQuestion(servicesQuestion); SysCustomer customer = sysCustomerMapper.selectSysCustomerById(servicesQuestion.getCusId()); @@ -34,25 +38,29 @@ public class SysServicesQuestionServiceImp implements ISysServicesQuestionServic SysServicesQuestion customerStatus = new SysServicesQuestion(); customerStatus.setUserId(customer.getId()); customerStatus.setRole("customer"); - customerStatus.setQueId(servicesQuestion.getId()); + customerStatus.setRead(1); + customerStatus.setQueId(servicesQuestion.getQueId()); statusList.add(customerStatus); SysServicesQuestion dieticianStatus = new SysServicesQuestion(); dieticianStatus.setUserId(customer.getMainDietitian()); dieticianStatus.setRole("dietician"); - dieticianStatus.setQueId(servicesQuestion.getId()); + customerStatus.setRead(0); + dieticianStatus.setQueId(servicesQuestion.getQueId()); statusList.add(dieticianStatus); SysServicesQuestion afterSaleStatus = new SysServicesQuestion(); afterSaleStatus.setUserId(customer.getAfterDietitian()); afterSaleStatus.setRole("after_sale"); - afterSaleStatus.setQueId(servicesQuestion.getId()); + customerStatus.setRead(0); + afterSaleStatus.setQueId(servicesQuestion.getQueId()); statusList.add(afterSaleStatus); SysServicesQuestion dieticianAssistantStatus = new SysServicesQuestion(); dieticianAssistantStatus.setUserId(customer.getAssistantDietitian()); dieticianAssistantStatus.setRole("dietician_assistant"); - dieticianAssistantStatus.setQueId(servicesQuestion.getId()); + customerStatus.setRead(0); + dieticianAssistantStatus.setQueId(servicesQuestion.getQueId()); statusList.add(dieticianAssistantStatus); return servicesQuestionMapper.insertSysServicesQuestionStatus(statusList); @@ -63,4 +71,23 @@ public class SysServicesQuestionServiceImp implements ISysServicesQuestionServic public int updateSysServicesQuestionStatus(SysServicesQuestion sysServicesQuestion) { return servicesQuestionMapper.updateSysServicesQuestionStatus(sysServicesQuestion); } + + @Override + public int inserSysServicesQuestionReply(SysServicesQuestion sysServicesQuestion) { + int row = servicesQuestionMapper.inserSysServicesQuestionReply(sysServicesQuestion); + if (row > 0) { + // 设置未读 + SysServicesQuestion status = new SysServicesQuestion(); + status.setRead(0); + status.setQueId(sysServicesQuestion.getQueId()); + status.setRole(sysServicesQuestion.getRole()); + servicesQuestionMapper.updateSysServicesQuestionStatus(status); + } + return row; + } + + @Override + public List<SysServicesQuestion> selectSysServicesQuestionSessionByQueId(String queId) { + return servicesQuestionMapper.selectSysServicesQuestionSessionByQueId(queId); + } } diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml index dea35d763..e45c1da94 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysServicesQuestionMapper.xml @@ -17,6 +17,15 @@ <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="selectSysServicesQuestionByUserIdAndRole" parameterType="SysServicesQuestion" resultMap="SysServicesQuestionResult"> @@ -42,42 +51,109 @@ ORDER BY type 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="id"> + <insert id="insertSysServicesQuestion" parameterType="SysServicesQuestion" useGeneratedKeys="true" + keyProperty="queId" keyColumn="que_id"> insert into sys_services_question <trim prefix="(" suffix=")" suffixOverrides=","> - id, + <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="cusId != null">create_time,</if> + <if test="img != null">img,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> - replace(uuid(), '-', ''), + <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="cusId != null">now(),</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"> - insert into sys_services_question (que_id, user_id, role, create_time, update_time) values + insert into sys_services_question_status (que_id, user_id, role, create_time, update_time) values <foreach collection="list" item="status" index="index" separator=","> (#{status.queId}, #{status.userId}, #{status.role}, now(), now()) </foreach> </insert> - <!-- 根据状态id更新--> + <!-- 根据状态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> + <if test="read != null">`read` = #{read},</if> + <if test="read != null">update_time = now(),</if> </trim> - where id = ${id} + <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" useGeneratedKeys="true" + keyProperty="id" keyColumn="id"> + 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