From 3e09990298d9751bdf03e28f3935a02130440a74 Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期四, 17 八月 2023 08:48:30 +0800
Subject: [PATCH] 客服管理、荣誉管理
---
cloud-server-other/src/main/java/com/dsh/other/model/vo/honorVo/EditHonorVO.java | 47 +
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPhoneController.java | 63 +
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/QuestionClient.java | 49 +
cloud-server-other/src/main/java/com/dsh/other/controller/HonorController.java | 71 +
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java | 245 ++++++
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HonorClient.java | 25
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/PhoneClient.java | 26
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/FrequentlyAskedQuestions.java | 70 +
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java | 4
cloud-server-management/src/main/webapp/static/modular/system/tHonor/THonor.js | 158 ++++
cloud-server-other/src/main/java/com/dsh/other/entity/HonorRules.java | 4
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Phone.java | 53 +
cloud-server-management/src/main/webapp/WEB-INF/view/system/tHonor/THonor.html | 87 ++
cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java | 60 +
cloud-server-other/src/main/java/com/dsh/other/mapper/HonorRulesMapper.java | 4
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html | 94 ++
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestion.html | 95 ++
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html | 106 ++
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorList.java | 11
cloud-server-other/src/main/resources/mapper/HonorRulesMapper.xml | 4
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/EditHonorVO.java | 35
cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionSearchVO.java | 18
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionSearchVO.java | 16
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html | 100 ++
cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js | 390 ++++++++++
cloud-server-other/src/main/resources/mapper/FrequentlyAskedQuestionsMapper.xml | 15
cloud-server-other/src/main/java/com/dsh/other/mapper/FrequentlyAskedQuestionsMapper.java | 6
cloud-server-other/src/main/java/com/dsh/other/service/FrequentlyAskedQuestionsService.java | 4
cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionChangeStateVO.java | 19
cloud-server-other/src/main/java/com/dsh/other/entity/FrequentlyAskedQuestions.java | 2
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/UpdatePhoneVO.java | 10
cloud-server-other/src/main/java/com/dsh/other/service/impl/FrequentlyAskedQuestionsServiceImpl.java | 19
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorRules.java | 55 +
cloud-server-other/src/main/java/com/dsh/other/service/HonorRulesService.java | 3
cloud-server-other/src/main/java/com/dsh/other/controller/TPhoneController.java | 48 +
cloud-server-other/src/main/java/com/dsh/other/service/impl/HonorRulesServiceImpl.java | 13
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THonorController.java | 195 +++++
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionChangeStateVO.java | 19
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/UpdatePhoneVO.java | 9
cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/UpdatePhoneVO.java | 9
40 files changed, 2,250 insertions(+), 11 deletions(-)
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HonorClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HonorClient.java
new file mode 100644
index 0000000..af9c033
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HonorClient.java
@@ -0,0 +1,25 @@
+package com.dsh.course.feignClient.other;
+
+import com.dsh.course.feignClient.other.model.EditHonorVO;
+import com.dsh.course.feignClient.other.model.HonorRules;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(value = "mb-cloud-other")
+public interface HonorClient {
+
+ @RequestMapping(value = "/base/honor/list")
+ public Map<Integer, List<HonorRules>> getList();
+
+ /**
+ * 修改荣誉规则 并返回新的荣誉规则列表
+ */
+ @RequestMapping(value = "/base/honor/edit")
+ @ResponseBody
+ public Object edit(@RequestBody EditHonorVO vo);
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/PhoneClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/PhoneClient.java
new file mode 100644
index 0000000..ac151d5
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/PhoneClient.java
@@ -0,0 +1,26 @@
+package com.dsh.course.feignClient.other;
+
+import com.dsh.course.feignClient.other.model.HonorRules;
+import com.dsh.course.feignClient.other.model.Phone;
+import com.dsh.guns.modular.system.model.UpdatePhoneVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(value = "mb-cloud-other")
+public interface PhoneClient {
+
+ @RequestMapping(value = "/base/phone/list")
+ List<Phone> list();
+
+ /**
+ * 修改客服电话
+ */
+ @RequestMapping("/update")
+ @ResponseBody
+ Object update(@RequestBody Phone phone);
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/QuestionClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/QuestionClient.java
new file mode 100644
index 0000000..5ea68d4
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/QuestionClient.java
@@ -0,0 +1,49 @@
+package com.dsh.course.feignClient.other;
+
+import com.dsh.course.feignClient.other.model.FrequentlyAskedQuestions;
+import com.dsh.course.feignClient.other.model.HonorRules;
+import com.dsh.guns.modular.system.model.QuestionChangeStateVO;
+import com.dsh.guns.modular.system.model.QuestionSearchVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 常见问题
+ */
+@FeignClient(value = "mb-cloud-other")
+public interface QuestionClient {
+
+ /**
+ * 获取所有常见问题
+ * @return
+ */
+ @RequestMapping("/base/question/listAll")
+ List<FrequentlyAskedQuestions> listAll(@RequestBody QuestionSearchVO vo);
+
+ /**
+ * 添加常见问题
+ */
+ @RequestMapping("/base/question/addQuestion")
+ Object addQuestion(@RequestBody FrequentlyAskedQuestions frequentlyAskedQuestions);
+
+ /**
+ * 上/下架、删除常见问题 type=1为上架 2为下架 3为删除
+ */
+ @RequestMapping("/base/question/changeState")
+ Object changeState(@RequestBody QuestionChangeStateVO vo);
+
+ /**
+ * 查看详情
+ */
+ @RequestMapping("/base/question/getInfo")
+ public FrequentlyAskedQuestions getInfo(@RequestBody Integer id);
+
+ /**
+ * 修改常见问题
+ */
+ @RequestMapping("/base/question/editQuestion")
+ public Object editQuestion(@RequestBody FrequentlyAskedQuestions frequentlyAskedQuestions);
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/EditHonorVO.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/EditHonorVO.java
new file mode 100644
index 0000000..4164f54
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/EditHonorVO.java
@@ -0,0 +1,35 @@
+package com.dsh.course.feignClient.other.model;
+
+import lombok.Data;
+import java.util.List;
+/**
+ * 荣誉规则修改对象
+ */
+@Data
+public class EditHonorVO {
+ private data type1;
+ private data type2;
+ private data type3;
+ private data type4;
+
+
+ public static class data {
+ private Integer type;
+ private List<String> condition;
+ public Integer getType() {
+ return type;
+ }
+
+ public void setType(Integer type) {
+ this.type = type;
+ }
+
+ public List<String> getCondition() {
+ return condition;
+ }
+
+ public void setCondition(List<String> condition) {
+ this.condition = condition;
+ }
+ }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/FrequentlyAskedQuestions.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/FrequentlyAskedQuestions.java
new file mode 100644
index 0000000..3585412
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/FrequentlyAskedQuestions.java
@@ -0,0 +1,70 @@
+package com.dsh.course.feignClient.other.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 常见问题
+ * </p>
+ *
+ * @author jqs
+ * @since 2023-07-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_frequently_asked_questions")
+public class FrequentlyAskedQuestions extends Model<FrequentlyAskedQuestions> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ /**
+ * 常见问题
+ */
+ @TableField("content")
+ private String content;
+ /**
+ * 排序
+ */
+ @TableField("sort")
+ private Integer sort;
+ /**
+ * 状态(1=正常,2=冻结,3=删除)
+ */
+ @TableField("state")
+ private Integer state;
+ /**
+ * 添加时间
+ */
+ @TableField("insertTime")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date insertTime;
+ /**
+ * 答复内容
+ */
+ @TableField("answer")
+ private String answer;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return this.id;
+ }
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorList.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorList.java
new file mode 100644
index 0000000..390526f
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorList.java
@@ -0,0 +1,11 @@
+package com.dsh.course.feignClient.other.model;
+
+import lombok.Data;
+
+@Data
+public class HonorList {
+ private Integer id;
+ private Integer type;
+ private String level;
+ private String condition;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorRules.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorRules.java
new file mode 100644
index 0000000..797e56e
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/HonorRules.java
@@ -0,0 +1,55 @@
+package com.dsh.course.feignClient.other.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 荣誉规则
+ * </p>
+ *
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_honor_rules")
+public class HonorRules extends Model<HonorRules> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ /**
+ * 数据类型(1=俱乐部之星,2=运动达人,3=社区之王,4=深度玩家)
+ */
+ @TableField("type")
+ private Integer type;
+ /**
+ * 等级
+ */
+ @TableField("level")
+ private String level;
+ /**
+ * 满足条件值
+ */
+ @TableField("condition")
+ private String condition;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return this.id;
+ }
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Phone.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Phone.java
new file mode 100644
index 0000000..99b452f
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Phone.java
@@ -0,0 +1,53 @@
+package com.dsh.course.feignClient.other.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 客服电话
+ * </p>
+ *
+ * @author jqs
+ * @since 2023-07-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_phone")
+public class Phone extends Model<Phone> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ /**
+ * 电话
+ */
+ @TableField("phone")
+ private String phone;
+ /**
+ * 添加时间
+ */
+ @TableField("insertTime")
+ private Date insertTime;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return this.id;
+ }
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/UpdatePhoneVO.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/UpdatePhoneVO.java
new file mode 100644
index 0000000..802bb52
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/UpdatePhoneVO.java
@@ -0,0 +1,9 @@
+package com.dsh.course.feignClient.other.model;
+
+import lombok.Data;
+
+@Data
+public class UpdatePhoneVO {
+ private Integer id;
+ private String phone;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java
new file mode 100644
index 0000000..0c839e7
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java
@@ -0,0 +1,245 @@
+package com.dsh.guns.modular.system.controller.code;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.CityManagerClient;
+import com.dsh.course.feignClient.account.model.CityManager;
+import com.dsh.course.feignClient.activity.CouponClient;
+import com.dsh.course.feignClient.other.HonorClient;
+import com.dsh.course.feignClient.other.QuestionClient;
+import com.dsh.course.feignClient.other.model.FrequentlyAskedQuestions;
+import com.dsh.course.feignClient.other.model.HonorRules;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.tips.SuccessTip;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.core.util.ToolUtil;
+import com.dsh.guns.modular.system.model.CouponDataVo;
+import com.dsh.guns.modular.system.model.QuestionChangeStateVO;
+import com.dsh.guns.modular.system.model.QuestionSearchVO;
+import com.dsh.guns.modular.system.model.Region;
+import com.dsh.guns.modular.system.service.IRegionService;
+import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.util.OBSUploadUtil;
+import io.swagger.models.auth.In;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 优惠券管理 控制器
+ */
+
+@Controller
+@RequestMapping("/tQuestion")
+public class QuestionController {
+
+ private String PREFIX = "/system/tQuestion/";
+
+ @Resource
+ private IRegionService regiService;
+
+ @Resource
+ private IStoreService storeService;
+
+ @Resource
+ private CouponClient client;
+
+ @Resource
+ private QuestionClient questionClient;
+ @Resource
+ private CityManagerClient cmgrClient;
+
+ /**
+ * 跳转常见问题首页
+ */
+ @RequestMapping("")
+ public String index(Model model) {
+ return PREFIX + "TQuestion.html";
+ }
+
+ /**
+ * 获取常见问题列表
+ * @param content 模糊查询标题
+ * @param state 查询状态
+ */
+ @RequestMapping("/list")
+ @ResponseBody
+ public List<FrequentlyAskedQuestions> list(String content, Integer state) {
+ QuestionSearchVO questionSearchVO = new QuestionSearchVO();
+ questionSearchVO.setContent(content);
+ questionSearchVO.setState(state);
+ return questionClient.listAll(questionSearchVO);
+ }
+
+ /**
+ * 跳转到添加
+ */
+ @RequestMapping("/add")
+ public String addQuestion(Model model) {
+ Integer objectType = UserExt.getUser().getObjectType();
+ System.out.println(objectType);
+ model.addAttribute("userType",objectType);
+ return PREFIX + "TQuestionAdd.html";
+ }
+
+ /**
+ * 批量上/下架 删除常见问题 type=1 上架 2下架 3删除
+ */
+ @RequestMapping("/changeState")
+ @ResponseBody
+ public Object changeState(@RequestBody QuestionChangeStateVO vo) {
+ questionClient.changeState(vo);
+ return new SuccessTip<>();
+ }
+
+ /**
+ * 添加常见问题
+ */
+ @RequestMapping("/addQuestion")
+ @ResponseBody
+ public Object addQuestion(@RequestBody FrequentlyAskedQuestions frequentlyAskedQuestions) {
+ questionClient.addQuestion(frequentlyAskedQuestions);
+ return new SuccessTip<>();
+ }
+ /**
+ * 修改常见问题
+ */
+ @RequestMapping("/editQuestion")
+ @ResponseBody
+ public Object editQuestion(@RequestBody FrequentlyAskedQuestions frequentlyAskedQuestions) {
+ questionClient.editQuestion(frequentlyAskedQuestions);
+ return new SuccessTip<>();
+ }
+
+
+ /**
+ * 跳转到编辑
+ */
+ @RequestMapping("/editQuestion/{id}")
+ public String editQuestion(Model model,@PathVariable("id") Integer id) {
+ FrequentlyAskedQuestions info = questionClient.getInfo(id);
+ Integer objectType = UserExt.getUser().getObjectType();
+ System.out.println(objectType);
+ model.addAttribute("userType",objectType);
+ model.addAttribute("info",info);
+ return PREFIX + "TQuestionEdit.html";
+ }
+ /**
+ * 跳转到详情
+ */
+ @RequestMapping("/infoQuestion/{id}")
+ public String infoQuestion(Model model,@PathVariable("id") Integer id) {
+ FrequentlyAskedQuestions info = questionClient.getInfo(id);
+ Integer objectType = UserExt.getUser().getObjectType();
+ System.out.println(objectType);
+ model.addAttribute("userType",objectType);
+ model.addAttribute("info",info);
+ return PREFIX + "TQuestionInfo.html";
+ }
+
+
+
+ /**
+ * 跳转到门店管理列表页
+ */
+ @RequestMapping("/storeList")
+ public String storePage(Model model) {
+ return PREFIX + "TQuestionEdit.html";
+ }
+
+ @RequestMapping("/storeDetailsOfSearch")
+ @ResponseBody
+ public Object listOfStore(Integer provinceId,Integer cityId,Integer cityManagerId,String storeName){
+ System.out.println("provinceId"+provinceId);
+ System.out.println("cityId"+cityId);
+ System.out.println("cityManagerId"+cityManagerId);
+ System.out.println("storeName"+storeName);
+ String provinceCode = null;
+ String cityCode = null;
+ if (ToolUtil.isNotEmpty(provinceId)){
+ Region provinceRegion = regiService.getById(provinceId);
+ provinceCode = provinceRegion.getCode();
+ }
+ if (ToolUtil.isNotEmpty(cityId)){
+ Region cityRegion = regiService.getById(cityId);
+ cityCode = cityRegion.getCode();
+ }
+ Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+ List<Map<String,Object>> storeList = storeService.queryListOfpage(provinceCode,cityCode,cityManagerId,storeName,page);
+ if (storeList.size() > 0 ){
+ for (Map<String, Object> stringObjectMap : storeList) {
+ String provinceName = (String) stringObjectMap.get("province");
+ String cityName = (String) stringObjectMap.get("city");
+ stringObjectMap.put("provinceCity",provinceName+cityName);
+ Integer managerId = (Integer) stringObjectMap.get("cityManagerId");
+ CityManager cityManager = cmgrClient.queryCityManagerById(managerId);
+ if (ToolUtil.isNotEmpty(cityManager)){
+ stringObjectMap.put("accountName",cityManager.getName()+"+"+cityManager.getPhone());
+ }
+ }
+ }
+ return storeList;
+ }
+
+
+
+ @RequestMapping(value = "/getProvince")
+ @ResponseBody
+ public Object getProvince(){
+ return regiService.list(new LambdaQueryWrapper<Region>()
+ .eq(Region::getParentId,0));
+ }
+
+
+ @RequestMapping(value = "/getCity")
+ @ResponseBody
+ public Object getCity(Integer province){
+ return regiService.list(new LambdaQueryWrapper<Region>()
+ .eq(Region::getParentId,province));
+ }
+
+ @RequestMapping(value = "/uploadPic")
+ @ResponseBody
+ public Object add(@RequestParam("file") MultipartFile imgFile) throws IOException {
+ String originalFilename = imgFile.getOriginalFilename();
+ String newName = originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf("."));
+ String url = OBSUploadUtil.inputStreamUpload(imgFile);
+ Map<String, String> map = new HashMap<String, String>();
+ //是否上传成功
+ map.put("state", "SUCCESS");
+ //现在文件名称
+ map.put("title", newName);
+ //文件原名称
+ map.put("original", originalFilename);
+ //文件类型 .+后缀名
+ map.put("type", originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf(".")));
+ //文件路径
+ map.put("url", url);
+ //文件大小(字节数)
+ map.put("size", imgFile.getSize() + "");
+ System.out.println(map);
+ return url;
+ }
+
+ /**
+ * 提交添加
+ */
+ @PostMapping(value = "/commitData")
+ @ResponseBody
+ public Object commitData( CouponDataVo dataVo){
+ System.out.println(dataVo);
+ Integer objectType = UserExt.getUser().getObjectType();
+ dataVo.setUserType(objectType);
+ client.insertIntoData(dataVo);
+ return new SuccessTip<>();
+ }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
index a98b635..e027a45 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
@@ -73,7 +73,7 @@
Integer objectType = UserExt.getUser().getObjectType();
System.out.println(objectType);
model.addAttribute("userType",objectType);
- return PREFIX + "TCouponAdd.html";
+ return PREFIX + "TQuestionAdd.html";
}
@@ -83,7 +83,7 @@
*/
@RequestMapping("/storeList")
public String storePage(Model model) {
- return PREFIX + "TStoreList.html";
+ return PREFIX + "TQuestionEdit.html";
}
@RequestMapping("/storeDetailsOfSearch")
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THonorController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THonorController.java
new file mode 100644
index 0000000..f2164a5
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THonorController.java
@@ -0,0 +1,195 @@
+package com.dsh.guns.modular.system.controller.code;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.CityManagerClient;
+import com.dsh.course.feignClient.account.model.CityManager;
+import com.dsh.course.feignClient.activity.CouponClient;
+import com.dsh.course.feignClient.activity.model.CouponListOfSearch;
+import com.dsh.course.feignClient.other.HonorClient;
+import com.dsh.course.feignClient.other.model.EditHonorVO;
+import com.dsh.course.feignClient.other.model.HonorRules;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.tips.SuccessTip;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.core.util.ToolUtil;
+import com.dsh.guns.modular.system.model.CouponDataVo;
+import com.dsh.guns.modular.system.model.Region;
+import com.dsh.guns.modular.system.service.IRegionService;
+import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.util.OBSUploadUtil;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 荣誉管理 控制器
+ */
+
+@Controller
+@RequestMapping("/tHonor")
+public class THonorController {
+
+
+
+ private String PREFIX = "/system/tHonor/";
+
+
+ @Resource
+ private IRegionService regiService;
+
+ @Resource
+ private IStoreService storeService;
+
+ @Resource
+ private CouponClient client;
+
+ @Resource
+ private HonorClient honorClient;
+ @Resource
+ private CityManagerClient cmgrClient;
+
+
+
+ /**
+ * 跳转到荣誉管理首页
+ */
+ @RequestMapping("")
+ public String index(Model model) {
+ return PREFIX + "THonor.html";
+ }
+
+ /**
+ * 获取荣誉规则列表
+ */
+ @RequestMapping("/list")
+ @ResponseBody
+ public Map<Integer, List<HonorRules>> list() {
+ return honorClient.getList();
+ }
+ /**
+ * 修改荣誉规则
+ */
+ @RequestMapping("/edit")
+ @ResponseBody
+ public Object edit(@RequestBody EditHonorVO vo) {
+
+ return honorClient.edit(vo);
+ }
+ /**
+ * 跳转到添加
+ */
+ @RequestMapping("/coupon_add")
+ public String memberCouponAdd(Model model) {
+ Integer objectType = UserExt.getUser().getObjectType();
+ System.out.println(objectType);
+ model.addAttribute("userType",objectType);
+ return PREFIX + "TQuestionAdd.html";
+ }
+
+
+
+ /**
+ * 跳转到门店管理列表页
+ */
+ @RequestMapping("/storeList")
+ public String storePage(Model model) {
+ return PREFIX + "TQuestionEdit.html";
+ }
+
+ @RequestMapping("/storeDetailsOfSearch")
+ @ResponseBody
+ public Object listOfStore(Integer provinceId,Integer cityId,Integer cityManagerId,String storeName){
+ System.out.println("provinceId"+provinceId);
+ System.out.println("cityId"+cityId);
+ System.out.println("cityManagerId"+cityManagerId);
+ System.out.println("storeName"+storeName);
+ String provinceCode = null;
+ String cityCode = null;
+ if (ToolUtil.isNotEmpty(provinceId)){
+ Region provinceRegion = regiService.getById(provinceId);
+ provinceCode = provinceRegion.getCode();
+ }
+ if (ToolUtil.isNotEmpty(cityId)){
+ Region cityRegion = regiService.getById(cityId);
+ cityCode = cityRegion.getCode();
+ }
+ Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+ List<Map<String,Object>> storeList = storeService.queryListOfpage(provinceCode,cityCode,cityManagerId,storeName,page);
+ if (storeList.size() > 0 ){
+ for (Map<String, Object> stringObjectMap : storeList) {
+ String provinceName = (String) stringObjectMap.get("province");
+ String cityName = (String) stringObjectMap.get("city");
+ stringObjectMap.put("provinceCity",provinceName+cityName);
+ Integer managerId = (Integer) stringObjectMap.get("cityManagerId");
+ CityManager cityManager = cmgrClient.queryCityManagerById(managerId);
+ if (ToolUtil.isNotEmpty(cityManager)){
+ stringObjectMap.put("accountName",cityManager.getName()+"+"+cityManager.getPhone());
+ }
+ }
+ }
+ return storeList;
+ }
+
+
+
+ @RequestMapping(value = "/getProvince")
+ @ResponseBody
+ public Object getProvince(){
+ return regiService.list(new LambdaQueryWrapper<Region>()
+ .eq(Region::getParentId,0));
+ }
+
+
+ @RequestMapping(value = "/getCity")
+ @ResponseBody
+ public Object getCity(Integer province){
+ return regiService.list(new LambdaQueryWrapper<Region>()
+ .eq(Region::getParentId,province));
+ }
+
+ @RequestMapping(value = "/uploadPic")
+ @ResponseBody
+ public Object add(@RequestParam("file") MultipartFile imgFile) throws IOException {
+ String originalFilename = imgFile.getOriginalFilename();
+ String newName = originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf("."));
+ String url = OBSUploadUtil.inputStreamUpload(imgFile);
+ Map<String, String> map = new HashMap<String, String>();
+ //是否上传成功
+ map.put("state", "SUCCESS");
+ //现在文件名称
+ map.put("title", newName);
+ //文件原名称
+ map.put("original", originalFilename);
+ //文件类型 .+后缀名
+ map.put("type", originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf(".")));
+ //文件路径
+ map.put("url", url);
+ //文件大小(字节数)
+ map.put("size", imgFile.getSize() + "");
+ System.out.println(map);
+ return url;
+ }
+
+ /**
+ * 提交添加
+ */
+ @PostMapping(value = "/commitData")
+ @ResponseBody
+ public Object commitData( CouponDataVo dataVo){
+ System.out.println(dataVo);
+ Integer objectType = UserExt.getUser().getObjectType();
+ dataVo.setUserType(objectType);
+ client.insertIntoData(dataVo);
+ return new SuccessTip<>();
+ }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPhoneController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPhoneController.java
new file mode 100644
index 0000000..7fe6428
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TPhoneController.java
@@ -0,0 +1,63 @@
+package com.dsh.guns.modular.system.controller.code;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.account.CityManagerClient;
+import com.dsh.course.feignClient.account.model.CityManager;
+import com.dsh.course.feignClient.activity.CouponClient;
+import com.dsh.course.feignClient.other.HonorClient;
+import com.dsh.course.feignClient.other.PhoneClient;
+import com.dsh.course.feignClient.other.model.HonorRules;
+import com.dsh.course.feignClient.other.model.Phone;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.tips.SuccessTip;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.core.util.ToolUtil;
+import com.dsh.guns.modular.system.model.CouponDataVo;
+import com.dsh.guns.modular.system.model.Region;
+import com.dsh.guns.modular.system.model.UpdatePhoneVO;
+import com.dsh.guns.modular.system.service.IRegionService;
+import com.dsh.guns.modular.system.service.IStoreService;
+import com.dsh.guns.modular.system.util.OBSUploadUtil;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 客服电话 控制器
+ */
+
+@Controller
+@RequestMapping("/tPhone")
+public class TPhoneController {
+
+ @Resource
+ private PhoneClient phoneClient;
+
+ /**
+ * 获取客服电话
+ */
+ @RequestMapping("/list")
+ @ResponseBody
+ public List<Phone> list() {
+ return phoneClient.list();
+ }
+ /**
+ * 修改客服电话
+ */
+ @RequestMapping("/update")
+ @ResponseBody
+ public Object update(@RequestBody Phone phone) {
+ phoneClient.update(phone);
+ return new SuccessTip<>();
+ }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionChangeStateVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionChangeStateVO.java
new file mode 100644
index 0000000..41d8d36
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionChangeStateVO.java
@@ -0,0 +1,19 @@
+package com.dsh.guns.modular.system.model;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class QuestionChangeStateVO {
+ /**
+ * 常见问题Id
+ */
+ List<Integer> questionId;
+ /**
+ * 上/下架 删除常见问题 type=1 上架 2下架 3删除
+ */
+ Integer type;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionSearchVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionSearchVO.java
new file mode 100644
index 0000000..e537158
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/QuestionSearchVO.java
@@ -0,0 +1,16 @@
+package com.dsh.guns.modular.system.model;
+
+
+import lombok.Data;
+
+@Data
+public class QuestionSearchVO {
+ /**
+ * 常见问题
+ */
+ String content;
+ /**
+ * 上/下架 删除常见问题 type=1 上架 2下架 3删除
+ */
+ Integer state;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/UpdatePhoneVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/UpdatePhoneVO.java
new file mode 100644
index 0000000..6071312
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/UpdatePhoneVO.java
@@ -0,0 +1,10 @@
+package com.dsh.guns.modular.system.model;
+
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+@Data
+public class UpdatePhoneVO {
+ private Integer id;
+ private String phone;
+}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHonor/THonor.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHonor/THonor.html
new file mode 100644
index 0000000..1d1389f
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHonor/THonor.html
@@ -0,0 +1,87 @@
+@layout("/common/_container.html"){
+<style>
+ .row {
+ display: flex;
+ justify-content: space-between;
+ }
+
+ .table-container {
+ flex-basis: 48%;
+ }
+ table {
+ border-collapse: collapse;
+ width: 300px;
+ table-layout: fixed;
+ margin-top: 10px;
+ }
+ th, td {
+ border: 1px solid #e0e0e0;
+ padding: 8px;
+ }
+ th {
+ background-color: #f2f2f2;
+ }
+ input {
+ width: 100%;
+ box-sizing: border-box;
+ border: 1px solid #e0e0e0;
+ padding: 8px;
+ background-color: transparent;
+ }
+ .title {
+ margin-bottom: 10px;
+ font-size: 18px;
+ color: black;
+ }
+ #table-container-2{
+ margin-top: 10px;
+ }
+ #buttonEdit {
+ margin-left: 520px;
+ }
+
+</style>
+<div class="row">
+ <div class="col-sm-12">
+ <div class="ibox float-e-margins">
+ <div class="ibox-title">
+ <h5>荣誉管理</h5>
+ </div>
+ <div class="ibox-title">
+ <div class="ibox-content">
+ <div class="row row-lg">
+ <div class="col-sm-12">
+ <div class="row">
+ <div class="table-container" id = "table-container-1">
+ <h3 class = "title">俱乐部之星:</h3>
+ <div id="table1"></div>
+ </div>
+ <div class="table-container">
+ <h3 class = "title">运动达人:</h3>
+ <div id="table2"></div>
+ </div>
+ </div>
+ <div class="row" id = "table-container-2">
+ <div class="table-container">
+ <h3 class = "title">社区之王:</h3>
+ <div id="table3"></div>
+ </div>
+ <div class="table-container">
+ <h3 class = "title">深度玩家:</h3>
+ <div id="table4"></div>
+ </div>
+ </div>
+ <div class="row btn-group-m-t">
+ <div class="col-sm-10 col-sm-offset-5" id = "buttonEdit">
+ <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="THonor.edit();" />
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+</div>
+<script src="${ctxPath}/modular/system/tHonor/THonor.js"></script>
+@}
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestion.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestion.html
new file mode 100644
index 0000000..64f9780
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestion.html
@@ -0,0 +1,95 @@
+@layout("/common/_container.html"){
+<style>
+ .data-item {
+ position: relative;
+ border: 1px solid #ccc;
+ padding: 10px;
+ margin-bottom: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ max-width: 200px;
+ margin-right: 10px;
+ }
+
+ .delete-button {
+ position: absolute;
+ top: -10px;
+ right: -10px;
+ cursor: pointer;
+ color: black;
+ width: 20px;
+ height: 20px;
+ text-align: center;
+ line-height: 20px;
+ border-radius: 50%;
+ }
+</style>
+<div class="row">
+ <div class="col-sm-12">
+ <div class="ibox float-e-margins">
+ <div class="ibox-title">
+ <h5>客服管理</h5>
+ </div>
+ <div class="ibox-title">
+ <h5>客服电话</h5>
+ <div class="ibox-content">
+ <div class="row row-lg">
+ <div class="col-sm-12">
+ <div class="row">
+ <div class="col-sm-3">
+ <#NameCon id="addPhone" name="添加联系方式" />
+ <div id="phone">
+
+ </div>
+ </div>
+ <div class="col-sm-3">
+ <#button id="addButton" name="添加" icon="fa-search"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="ibox-title">
+ <h5>常见问题</h5>
+ </div>
+ <div class="ibox-content">
+ <div class="row row-lg">
+ <div class="col-sm-12">
+ <div class="row">
+ <div class="col-sm-3">
+ <#NameCon id="content" name="问题标题" />
+ </div>
+ <div class="col-sm-3">
+ <#SelectCon id="state" name="状态" >
+ <option value="">全部</option>
+ <option value="1">已上架</option>
+ <option value="2">已下架</option>
+ <option value="3">已删除</option>
+ </#SelectCon>
+ </div>
+ <div class="col-sm-3">
+ <#button name="搜索" icon="fa-search" clickFun="TQuestion.search()"/>
+ <#button name="重置" icon="fa-trash" clickFun="TQuestion.resetSearch()"/>
+ </div>
+ </div>
+ <div class="hidden-xs" id="TCouponTableToolbar" role="group">
+ <#button name="添加" icon="fa-plus" clickFun="TQuestion.openAdd()"/>
+ <#button name="编辑" icon="fa-edit" clickFun="TQuestion.openChange()" space="true"/>
+ <#button name="删除" icon="fa-remove" clickFun="TQuestion.delete()" space="true"/>
+ <#button name="上架" icon="fa-check" clickFun="TQuestion.onShelf()" space="true"/>
+ <#button name="下架" icon="fa-remove" clickFun="TQuestion.offShelf()" space="true"/>
+ <#button name="查看详情" icon="fa-search" clickFun="TQuestion.getInfo()" space="true"/>
+ </div>
+ <#table id="TQuestionTable"/>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+</div>
+<script src="${ctxPath}/modular/system/tQuestion/TQuestion.js"></script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html
new file mode 100644
index 0000000..3b46690
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html
@@ -0,0 +1,94 @@
+@layout("/common/_container.html"){
+<style>
+ .newWidth, .single-line{
+ max-width:350px !important;display: initial !important;
+ }
+</style>
+<div class="row">
+ <div class="col-sm-12">
+ <div class="ibox float-e-margins">
+ <div class="ibox-content">
+ <div class="row row-lg">
+ <div class="col-sm-12">
+ <div class="tabs-container">
+ <ul class="nav nav-tabs">
+ <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">添加常见问题</a></li>
+ </ul>
+ <div class="tab-content">
+ <div id="tab-1" class="tab-pane active">
+ <div class="panel-body">
+ <label class="label1" for="questionTitle">*问题标题:</label>
+ <input class="textarea" type="text" id="questionTitle" placeholder="请输入问题标题">
+ <div>
+ <label for="editor_1">*答复内容:</label>
+ <textarea id="editor_1" type="text/plain" style="width:1200px;height:400px;"></textarea>
+ </div>
+ <div class="row btn-group-m-t">
+ <div class="col-sm-10 col-sm-offset-5">
+ <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="add();" />
+ </div>
+ </div>
+ <label for="sort">*排 序:</label>
+ <input type="text" id="sort" placeholder="请输入排序"><span> 数字越大,权重越大</span>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script type="text/javascript">
+ const data1 = {
+ content:"",
+ sort:null,
+ answer:""
+ }
+ var editor_1 = null;
+ $(function () {
+ //初始化编辑器
+ editor_1 = UE.getEditor('editor_1');
+
+ });
+ function add(){
+ const input1 = document.getElementById('questionTitle');
+ const value1 = input1.value;
+ const input2 = document.getElementById('sort');
+ const value2 = input2.value;
+
+ if (editor_1.getContent() === ""){
+ Feng.error("答复内容不能为空!");
+ return;
+ }if (value1 === ""){
+ Feng.error("问题标题不能为空!");
+ return;
+ }if (value2 === ""){
+ Feng.error("排序不能为空!");
+ return;
+ }
+ data1.content = value1;
+ data1.sort = value2;
+ data1.answer =editor_1.getContent();
+ console.log(data1);
+ submitData(data1);
+ }
+ function submitData(data) {
+ $.ajax({
+ url: Feng.ctxPath + "/tQuestion/addQuestion",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ Feng.success("添加成功!");
+ window.parent.TQuestion.table.refresh(); },
+ error: function(xhr, status, error) {
+ var errorMessage = xhr.responseText ? xhr.responseText : "添加失败!";
+ Feng.error(errorMessage);
+ }
+ });
+ }
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html
new file mode 100644
index 0000000..75205ea
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html
@@ -0,0 +1,106 @@
+@layout("/common/_container.html"){
+<style>
+ .newWidth, .single-line{
+ max-width:350px !important;display: initial !important;
+ }
+</style>
+<input id = "id" style="display: none;" value="${info.id}"/>
+<div class="row">
+ <div class="col-sm-12">
+ <div class="ibox float-e-margins">
+ <div class="ibox-content">
+ <div class="row row-lg">
+ <div class="col-sm-12">
+ <div class="tabs-container">
+ <ul class="nav nav-tabs">
+ <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">编辑常见问题</a></li>
+ </ul>
+ <div class="tab-content">
+ <div id="tab-1" class="tab-pane active">
+ <div class="panel-body">
+
+ <label class="label1" for="questionTitle">*问题标题:</label>
+ <input class="textarea" value="${info.content}" type="text" id="questionTitle" placeholder="请输入问题标题">
+ <div>
+ <label for="editor_1">*答复内容:</label>
+ <textarea id="editor_1" type="text/plain" style="width:1200px;height:400px;">${info.answer}</textarea>
+ </div>
+ <div class="row btn-group-m-t">
+ <div class="col-sm-10 col-sm-offset-5">
+ <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="edit();" />
+ </div>
+ </div>
+ <label for="sort">*排 序:</label>
+ <input type="text" id="sort" value="${info.sort}" placeholder="请输入排序"><span> 数字越大,权重越大</span>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script type="text/javascript">
+
+
+ const data1 = {
+ id:null,
+ content:"",
+ sort:null,
+ answer:""
+ }
+ var editor_1 = null;
+ $(function () {
+ //初始化编辑器
+ editor_1 = UE.getEditor('editor_1');
+
+ });
+
+
+ function edit(){
+ const input1 = document.getElementById('questionTitle');
+ const value1 = input1.value;
+ const input2 = document.getElementById('sort');
+ const value2 = input2.value;
+ const input3 = document.getElementById('id');
+ const value3 = input3.value;
+
+ if (editor_1.getContent() == ""){
+ Feng.error("答复内容不能为空!");
+ return;
+ }if (value1 == ""){
+ Feng.error("问题标题不能为空!");
+ return;
+ }if (value2 == ""){
+ Feng.error("排序不能为空!");
+ return;
+ }
+ data1.id = value3;
+ data1.content = value1;
+ data1.sort = value2;
+ data1.answer =editor_1.getContent();
+ console.log(data1);
+ submitData(data1);
+ }
+ function submitData(data) {
+ $.ajax({
+ url: Feng.ctxPath + "/tQuestion/editQuestion",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ window.parent.TQuestion.table.refresh();
+ Feng.success("修改成功!");
+ },
+ error: function(xhr, status, error) {
+ var errorMessage = xhr.responseText ? xhr.responseText : "修改失败!";
+ Feng.error(errorMessage);
+ }
+ });
+ }
+
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html
new file mode 100644
index 0000000..66986b0
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html
@@ -0,0 +1,100 @@
+@layout("/common/_container.html"){
+<style>
+ .newWidth, .single-line{
+ max-width:350px !important;display: initial !important;
+ }
+</style>
+<input id = "id" style="display: none;" value="${info.id}"/>
+<div class="row">
+ <div class="col-sm-12">
+ <div class="ibox float-e-margins">
+ <div class="ibox-content">
+ <div class="row row-lg">
+ <div class="col-sm-12">
+ <div class="tabs-container">
+ <ul class="nav nav-tabs">
+ <li class="active"><a data-toggle="tab" href="#tab-1" aria-expanded="true">常见问题详情</a></li>
+ </ul>
+ <div class="tab-content">
+ <div id="tab-1" class="tab-pane active">
+ <div class="panel-body">
+
+ <label class="label1" for="questionTitle">*问题标题:</label>
+ <input class="textarea" value="${info.content}" type="text" id="questionTitle" placeholder="请输入问题标题">
+ <div>
+ <label for="editor_1">*答复内容:</label>
+ <textarea id="editor_1" type="text/plain" style="width:1200px;height:400px;">${info.answer}</textarea>
+ </div>
+ <div class="row btn-group-m-t">
+ </div>
+ <label for="sort">*排 序:</label>
+ <input type="text" id="sort" value="${info.sort}" placeholder="请输入排序"><span> 数字越大,权重越大</span>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script type="text/javascript">
+
+
+ const data1 = {
+ id:null,
+ content:"",
+ sort:null,
+ answer:""
+ }
+ var editor_1 = null;
+ $(function () {
+ //初始化编辑器
+ editor_1 = UE.getEditor('editor_1');
+
+ });
+ function edit(){
+ const input1 = document.getElementById('questionTitle');
+ const value1 = input1.value;
+ const input2 = document.getElementById('sort');
+ const value2 = input2.value;
+ const input3 = document.getElementById('id');
+ const value3 = input3.value;
+
+ if (editor_1.getContent() == ""){
+ Feng.error("答复内容不能为空!");
+ return;
+ }if (value1 == ""){
+ Feng.error("问题标题不能为空!");
+ return;
+ }if (value2 == ""){
+ Feng.error("排序不能为空!");
+ return;
+ }
+ data1.id = value3;
+ data1.content = value1;
+ data1.sort = value2;
+ data1.answer =editor_1.getContent();
+ console.log(data1);
+ submitData(data1);
+ }
+ function submitData(data) {
+ $.ajax({
+ url: Feng.ctxPath + "/tQuestion/editQuestion",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ Feng.success("修改成功!");
+ },
+ error: function(xhr, status, error) {
+ var errorMessage = xhr.responseText ? xhr.responseText : "修改失败!";
+ Feng.error(errorMessage);
+ }
+ });
+ }
+
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tHonor/THonor.js b/cloud-server-management/src/main/webapp/static/modular/system/tHonor/THonor.js
new file mode 100644
index 0000000..b73674e
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tHonor/THonor.js
@@ -0,0 +1,158 @@
+/**
+ * 管理初始化
+ */
+var THonor = {
+ id: "THonorTable", //表格id
+ seItem: null, //选中的条目
+ table: null,
+ layerIndex: -1
+};
+// 修改荣誉规则对象
+const data1 = {
+ type1:{
+ type:null,
+ condition:[]
+ },type2:{
+ type:null,
+ condition:[]
+ },type3:{
+ type:null,
+ condition:[]
+ },type4:{
+ type:null,
+ condition:[]
+ }
+};
+THonor.edit = function(){
+ var inputs1 = document.querySelectorAll('#input1');
+
+ for (let i = 0; i < inputs1.length-1; i++) {
+ data1.type1.condition.push(inputs1[i].value);
+ if (Number(inputs1[i].value)>Number(inputs1[i+1].value)){
+ return Feng.error("俱乐部之星等级满足条件值设置错误!错误在等级"+(i+1)+"和等级"+(i+1+1));
+ }
+ if (i === inputs1.length-1-1){
+ data1.type1.condition.push(inputs1[i+1].value);
+ }
+ }
+
+ var inputs2 = document.querySelectorAll('#input2');
+ for (let i = 0; i < inputs2.length-1; i++) {
+ data1.type2.condition.push(inputs2[i].value);
+ console.log(inputs2[i].value);
+ if (Number(inputs2[i].value)>Number(inputs2[i+1].value)){
+ return Feng.error("运动达人等级满足条件值设置错误!错误在等级"+(i+1)+"和等级"+(i+1+1));
+ }
+ if (i === inputs2.length-1-1){
+ data1.type2.condition.push(inputs2[i+1].value);
+ }
+ }
+
+ var inputs3 = document.querySelectorAll('#input3');
+ for (let i = 0; i < inputs3.length-1; i++) {
+ data1.type3.condition.push(inputs3[i].value);
+ if (Number(inputs3[i].value)>Number(inputs3[i+1].value)){
+ return Feng.error("社区之王等级满足条件值设置错误!错误在等级"+(i+1)+"和等级"+(i+1+1));
+ }
+ if (i === inputs3.length-1-1){
+ data1.type3.condition.push(inputs3[i+1].value);
+ }
+ }
+
+ var inputs4 = document.querySelectorAll('#input4');
+ for (let i = 0; i < inputs4.length-1; i++) {
+ data1.type4.condition.push(inputs4[i].value);
+ if (Number(inputs4[i].value)>Number(inputs4[i+1].value)){
+ return Feng.error("深度玩家等级满足条件值设置错误!错误在等级"+(i+1)+"和等级"+(i+1+1));
+ }
+ if (i === inputs4.length-1-1){
+ data1.type4.condition.push(inputs4[i+1].value);
+ }
+ }
+
+ $.ajax({
+ url: Feng.ctxPath + "/tHonor/edit",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ data1.type1.condition= [];
+ data1.type2.condition= [];
+ data1.type3.condition= [];
+ data1.type4.condition= [];
+ Feng.success("修改成功!");
+ },
+ error: function(xhr, status, error) {
+ data1.type1.condition= [];
+ data1.type2.condition= [];
+ data1.type3.condition= [];
+ data1.type4.condition= [];
+ var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
+ Feng.error(errorMessage);
+ }
+ });
+};
+
+$(function () {
+ // 获取表格的 DOM 元素
+ var tableContainer1 = document.getElementById('table1');
+ var tableContainer2 = document.getElementById('table2');
+ var tableContainer3 = document.getElementById('table3');
+ var tableContainer4 = document.getElementById('table4');
+
+// 初始化四个表格
+ var table1 = createTable(['等级', '上课打卡次数'], tableContainer1);
+ var table2 = createTable(['等级', '赛事报名次数'], tableContainer2);
+ var table3 = createTable(['等级', '预约场地次数'], tableContainer3);
+ var table4 = createTable(['等级', '作业、任务完成次数'], tableContainer4);
+
+ var ajax = new $ax(Feng.ctxPath + "/tHonor/list", function(data){
+ populateTable(table1, data[1],1);
+ data1.type1.type = data[1][1].type;
+ populateTable(table2, data[2],2);
+ data1.type2.type = data[2][1].type;
+ populateTable(table3, data[3],3);
+ data1.type3.type = data[3][1].type;
+ populateTable(table4, data[4],4);
+ data1.type4.type = data[4][1].type;
+ },function(data){
+ Feng.error("获取失败!" + data.responseJSON.message + "!");
+ });
+ ajax.start();
+
+ // 创建表格函数
+ function createTable(headerData, container) {
+ var table = document.createElement('table');
+ var thead = document.createElement('thead');
+ var tbody = document.createElement('tbody');
+
+ // 创建表头行
+ var headerRow = document.createElement('tr');
+ for (var i = 0; i < headerData.length; i++) {
+ var th = document.createElement('th');
+ th.textContent = headerData[i];
+ headerRow.appendChild(th);
+ }
+ thead.appendChild(headerRow);
+ table.appendChild(thead);
+ table.appendChild(tbody);
+ container.appendChild(table);
+
+ return tbody;
+ }
+ // 填充表格函数
+ function populateTable(tbody, rowData,num) {
+ for (var i = 0; i < rowData.length; i++) {
+ var row = document.createElement('tr');
+ var data1 = document.createElement('td');
+ data1.textContent = rowData[i].level;
+ var input = document.createElement('input');
+ input.value = rowData[i].condition;
+ // 设置id属性 用于修改时获取input输入框内的值
+ input.setAttribute("id","input"+num);
+ row.appendChild(data1);
+ row.appendChild(input);
+ tbody.appendChild(row);
+ }
+ }
+});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js b/cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js
new file mode 100644
index 0000000..19bf113
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js
@@ -0,0 +1,390 @@
+/**
+ * 管理初始化
+ */
+var TQuestion = {
+ id: "TQuestionTable", //表格id
+ seItem: null, //选中的条目
+ table: null,
+ layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TQuestion.initColumn = function () {
+ return [
+ {field: 'selectItem', checkbox: true},
+ {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
+ {title: '问题标题', field: 'content', visible: true, align: 'center', valign: 'middle'},
+ {title: '添加时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle',
+ formatter: function (value, row, index) {
+ var date = new Date(value);
+ date.setHours(date.getHours() + 8);
+ return date.toLocaleString('zh-CN', {
+ year: 'numeric',
+ month: '2-digit',
+ day: '2-digit',
+ hour: '2-digit',
+ minute: '2-digit',
+ second: '2-digit',
+ timeZone: 'Asia/Shanghai' // 替换为您想要的时区
+ });
+ }},
+ {title: '排序', field: 'sort', visible: true, align: 'center', valign: 'middle'},
+ {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
+ formatter: function (value, row, index) {
+ return {1: "已上架", 2: "已下架", 3: "已删除"}[value]
+ }
+ }
+ ];
+};
+
+/**
+ * 检查是否选中
+ */
+TQuestion.check = function () {
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+
+ if(selected.length == 0){
+ Feng.info("请先选中表格中的某一记录!");
+ return false;
+ }else{
+ TQuestion.seItem = selected[0];
+ return true;
+ }
+};
+TQuestion.dataCount = 0;
+TQuestion.phone = "";
+TQuestion.phoneId = "";
+
+/**
+ * 点击添加
+ */
+TQuestion.openAdd = function () {
+ var index = layer.open({
+ type: 2,
+ title: '添加常见问题',
+ area: ['100%', '100%'], //宽高
+ fix: false, //不固定
+ maxmin: true,
+ content: Feng.ctxPath + '/tQuestion/add'
+ });
+ this.layerIndex = index;
+};
+
+
+/**
+ * 点击编辑
+ */
+TQuestion.openChange = function () {
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+ if(selected.length >1 ){
+ Feng.info("只能选择一个问题进行编辑!");
+ }else {
+ if (this.check()){
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+ var index = layer.open({
+ type: 2,
+ title: '详情',
+ area: ['100%', '100%'], //宽高
+ fix: false, //不固定
+ maxmin: true,
+ content: Feng.ctxPath + '/tQuestion/editQuestion/' + TQuestion.seItem.id
+ });
+ this.layerIndex = index;
+ }
+ }
+};
+
+
+
+/**
+ * 上架
+ */
+
+TQuestion.onShelf = function () {
+if (this.check()){
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+ const data1 = {
+ questionId:[],
+ type:null
+ };
+ selected.forEach(function(obj) {
+ var id = obj.id;
+ data1.questionId.push(id);
+ });
+ data1.type = 1;
+ $.ajax({
+ url: Feng.ctxPath + "/tQuestion/changeState",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ Feng.success("上架成功!");
+ window.parent.TQuestion.table.refresh();
+ },
+ error: function(xhr, status, error) {
+ var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
+ Feng.error("您的网络异常!");
+ }
+ });
+}
+};
+
+
+/**
+ * 下架
+ */
+TQuestion.offShelf = function () {
+
+ if (this.check()){
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+ const data1 = {
+ questionId:[],
+ type:null
+ };
+ selected.forEach(function(obj) {
+ var id = obj.id;
+ data1.questionId.push(id);
+ });
+ data1.type = 2;
+ $.ajax({
+ url: Feng.ctxPath + "/tQuestion/changeState",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ Feng.success("下架成功!");
+ window.parent.TQuestion.table.refresh();
+ },
+ error: function(xhr, status, error) {
+ var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
+ Feng.error("您的网络异常!");
+ }
+ });
+ }
+};
+/**
+ * 查看详情
+ */
+TQuestion.getInfo = function () {
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+ if(selected.length >1 ){
+ Feng.info("只能选择一条进行查看!");
+ }else {
+ if (this.check()){
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+
+ var index = layer.open({
+ type: 2,
+ title: '详情',
+ area: ['100%', '100%'], //宽高
+ fix: false, //不固定
+ maxmin: true,
+ content: Feng.ctxPath + '/tQuestion/infoQuestion/' + TQuestion.seItem.id
+ });
+ this.layerIndex = index;
+ }
+ }
+};
+
+/**
+ * 删除
+ */
+TQuestion.delete = function () {
+ if (this.check()){
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+
+ const data1 = {
+ questionId:[],
+ type:null
+ };
+ selected.forEach(function(obj) {
+ var id = obj.id;
+ data1.questionId.push(id);
+ });
+ data1.type = 3;
+
+ $.ajax({
+ url: Feng.ctxPath + "/tQuestion/changeState",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ Feng.success("删除成功!");
+ window.parent.TQuestion.table.refresh();
+ },
+ error: function(xhr, status, error) {
+ var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
+ Feng.error(errorMessage);
+ }
+ });
+ }
+};
+/**
+ * 打开查看详情
+ */
+TQuestion.openDetail = function () {
+ if (this.check()) {
+ var index = layer.open({
+ type: 2,
+ title: '详情',
+ area: ['100%', '100%'], //宽高
+ fix: false, //不固定
+ maxmin: true,
+ content: Feng.ctxPath + '/tQuestion/editQuestion/' + TQuestion.seItem.id
+ });
+ this.layerIndex = index;
+ }
+};
+
+
+/**
+ * 查询列表
+ */
+TQuestion.search = function () {
+ var queryData = {};
+ queryData['content'] = $("#content").val();
+ queryData['state'] = $("#state").val();
+ TQuestion.table.refresh({query: queryData});
+};
+
+
+/**
+ * 重置搜索
+ */
+TQuestion.resetSearch = function () {
+ $("#content").val('');
+ $("#state").val('');
+ TQuestion.search();
+};
+
+$(function () {
+ const data1 = {
+ id:null,
+ phone:null,
+ insertTime:null
+ };
+ // 获取客服电话
+ $.ajax({
+ url: Feng.ctxPath + "/tPhone/list",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ success: function(response) {
+ var phoneValue = null;
+ var split = [];
+ // 遍历列表数据使用 forEach() 方法
+ response.forEach(function (item) {
+ TQuestion.phoneId = item.id;
+ phoneValue = item.phone;
+ split = phoneValue.split(",");
+ });
+ if (response[0].phone !== "" && response[0].phone!== null) {
+ var dataContainer = document.getElementById('phone');
+ split.forEach(function (item) {
+ if (item !== ''){
+ // 创建新的数据项
+ var dataItem = document.createElement('div');
+ dataItem.className = 'data-item';
+ dataItem.innerText = item;
+ // 创建删除按钮
+ var deleteButton = document.createElement('div');
+ deleteButton.className = 'delete-button';
+ deleteButton.innerHTML = '×';
+ // 为删除按钮添加点击事件监听器
+ deleteButton.addEventListener('click', function () {
+ TQuestion.dataCount--;
+ // 在点击事件处理程序中删除数据项
+ dataContainer.removeChild(dataItem);
+ });
+ // 将删除按钮添加到数据项
+ dataItem.appendChild(deleteButton);
+ // 将数据项添加到容器中
+ dataContainer.appendChild(dataItem);
+ TQuestion.dataCount++;
+ // 获取item元素的文本内容(不包含"x")
+ var itemValues = Array.from(dataContainer.getElementsByClassName('data-item')).map(function (item) {
+ return item.innerText.replace(/[\u00D7]/g, '').trim();
+ });
+ }
+
+ });
+ }
+ var addButton = document.getElementById('addButton');
+ addButton.addEventListener('click', function () {
+ var phoneRegex = /^1[0-9]{10}$/;
+ var inputField = document.getElementById('addPhone');
+ var dataContainer = document.getElementById('phone');
+ var inputData = inputField.value.trim();
+ if (TQuestion.dataCount>=2){
+ Feng.info("最多添加两个客服电话!");
+ // todo 添加正则表达式验证电话号码合法性
+ }else if(!phoneRegex.test(inputData)){
+ Feng.info("客服电话不合法,请重新输入!");
+ }else {
+ if (inputData !== '' || document.querySelectorAll('.data-item').length !==0) {
+ TQuestion.phone = "";
+ // 创建新的数据项
+ var dataItem = document.createElement('div');
+ if (inputData !== ''){
+ dataItem.className = 'data-item';
+ dataItem.innerText = inputData;
+ // 创建删除按钮
+ var deleteButton = document.createElement('div');
+ deleteButton.className = 'delete-button';
+ deleteButton.innerHTML = '×';
+ // 为删除按钮添加点击事件监听器
+ deleteButton.addEventListener('click', function () {
+ TQuestion.dataCount--;
+ // 在点击事件处理程序中删除数据项
+ dataContainer.removeChild(dataItem);
+ });
+ // 将删除按钮添加到数据项
+ dataItem.appendChild(deleteButton);
+ // 将数据项添加到容器中
+ dataContainer.appendChild(dataItem);
+ // 清空输入框的内容
+ inputField.value = '';
+ TQuestion.dataCount++;
+ }
+ var dataItems = document.querySelectorAll('.data-item');
+ for(var i = 0; i < dataItems.length; i++) {
+ var dataItem1 = dataItems[i];
+ TQuestion.phone = TQuestion.phone+dataItem1.textContent.slice(0, -1)+",";
+ }
+ data1.phone = TQuestion.phone;
+ data1.id = TQuestion.phoneId;
+ $.ajax({
+ url: Feng.ctxPath + "/tPhone/update",
+ type: "POST",
+ contentType: "application/json", // 设置请求头的 Content-Type
+ data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
+ success: function(response) {
+ Feng.success("添加成功!");
+ // window.parent.TQuestion.table.refresh();
+ TQuestion.phone = "";
+ },
+ error: function(xhr, status, error) {
+ TQuestion.phone = "";
+ var errorMessage = xhr.responseText ? xhr.responseText : "添加失败!";
+ Feng.error(errorMessage);
+ }
+ });
+ } else {
+ Feng.info("请输入客服电话!");
+ }
+ }
+
+ });
+ // window.parent.TQuestion.table.refresh();
+ },
+ error: function(xhr, status, error) {
+ var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
+ Feng.error(errorMessage);
+ }
+ });
+ var defaultColunms = TQuestion.initColumn();
+ var table = new BSTable(TQuestion.id, "/tQuestion/list", defaultColunms);
+ table.setPaginationType("client");
+ TQuestion.table = table.init();
+});
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java
index de00064..6004b4a 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java
@@ -3,14 +3,17 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.other.entity.FrequentlyAskedQuestions;
+import com.dsh.other.model.vo.questionVo.QuestionChangeStateVO;
import com.dsh.other.model.vo.questionVo.QuestionDetailsVo;
import com.dsh.other.model.vo.questionVo.QuestionIns;
+import com.dsh.other.model.vo.questionVo.QuestionSearchVO;
import com.dsh.other.service.FrequentlyAskedQuestionsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
@RestController
@@ -24,6 +27,63 @@
private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ /**
+ * 添加常见问题
+ */
+ @RequestMapping("/base/question/addQuestion")
+ public Object addQuestion(@RequestBody FrequentlyAskedQuestions frequentlyAskedQuestions){
+ frequentlyAskedQuestions.setInsertTime(new Date());
+ frequentlyAskedQuestions.setState(1);
+ return faqService.save(frequentlyAskedQuestions);
+ }
+ /**
+ * 修改常见问题
+ */
+ @RequestMapping("/base/question/editQuestion")
+ public Object editQuestion(@RequestBody FrequentlyAskedQuestions frequentlyAskedQuestions){
+ return faqService.updateById(frequentlyAskedQuestions);
+ }
+ /**
+ * 上/下架、删除常见问题 type=1为上架 2为下架 3为删除
+ */
+ @RequestMapping("/base/question/changeState")
+ public Object changeState(@RequestBody QuestionChangeStateVO vo){
+ return faqService.changeState(vo);
+ }
+
+ /**
+ * 查看详情
+ */
+ @RequestMapping("/base/question/getInfo")
+ public FrequentlyAskedQuestions getInfo(@RequestBody Integer id){
+ return faqService.getInfo(id);
+ }
+
+ /**
+ * 编辑常见问题
+ */
+ @RequestMapping("/base/question/updateQuestion")
+ public Object updateQuestion(@RequestBody FrequentlyAskedQuestions frequentlyAskedQuestions){
+ return faqService.updateById(frequentlyAskedQuestions);
+ }
+ /**
+ * 获取所有常见问题
+ * @return
+ */
+ @RequestMapping("/base/question/listAll")
+ public List<FrequentlyAskedQuestions> listAll(@RequestBody QuestionSearchVO vo){
+ QueryWrapper<FrequentlyAskedQuestions> frequentlyAskedQuestionsQueryWrapper = new QueryWrapper<>();
+ if (vo.getState()!=null){
+ frequentlyAskedQuestionsQueryWrapper.eq("state",vo.getState());
+ }
+ if (vo.getContent()!=null && !vo.getContent().equals("") ){
+ frequentlyAskedQuestionsQueryWrapper.like("content",vo.getContent());
+ }
+ frequentlyAskedQuestionsQueryWrapper.ne("state",3);
+ frequentlyAskedQuestionsQueryWrapper.orderByDesc("sort");
+ List<FrequentlyAskedQuestions> list = faqService.list(frequentlyAskedQuestionsQueryWrapper);
+ return list;
+ }
@PostMapping("/base/notice/queryQuestionDetails")
public List<QuestionIns> getSysQuestionDetails(){
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/HonorController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/HonorController.java
index 6a1dedd..39a8f85 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/HonorController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/HonorController.java
@@ -1,18 +1,18 @@
package com.dsh.other.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.other.entity.HonorRules;
import com.dsh.other.feignclient.model.StuMedalVo;
+import com.dsh.other.model.vo.honorVo.EditHonorVO;
import com.dsh.other.service.HonorRulesService;
+import com.dsh.other.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
@RestController
@RequestMapping("")
@@ -21,6 +21,63 @@
@Autowired
private HonorRulesService hrService;
+ /**
+ * 获取 荣誉规则列表
+ */
+ @RequestMapping(value = "/base/honor/list")
+ public Map<Integer, List<HonorRules>> getList() {
+ List<HonorRules> list= hrService.getList();
+ return list.stream().collect(Collectors.groupingBy(HonorRules::getType));
+ }
+
+ /**
+ * 修改荣誉规则 并返回新的荣誉规则列表
+ */
+ @RequestMapping(value = "/base/honor/edit")
+ @ResponseBody
+ public Object edit(@RequestBody EditHonorVO vo) {
+ Integer type1 = vo.getType1().getType();
+ List<String> condition1 = vo.getType1().getCondition();
+ QueryWrapper<HonorRules> wrapper1 = new QueryWrapper<>();
+ wrapper1.eq("type",type1);
+ List<HonorRules> list1 = hrService.list(wrapper1);
+ for (int i = 0; i < list1.size(); i++) {
+ list1.get(i).setCondition(condition1.get(i));
+ }
+ hrService.updateBatchById(list1);
+
+ Integer type2 = vo.getType2().getType();
+ List<String> condition2 = vo.getType2().getCondition();
+ QueryWrapper<HonorRules> wrapper2 = new QueryWrapper<>();
+ wrapper2.eq("type",type2);
+ List<HonorRules> list2 = hrService.list(wrapper2);
+ for (int i = 0; i < list1.size(); i++) {
+ list2.get(i).setCondition(condition2.get(i));
+ }
+ hrService.updateBatchById(list2);
+
+ Integer type3 = vo.getType3().getType();
+ List<String> condition3 = vo.getType3().getCondition();
+ QueryWrapper<HonorRules> wrapper3 = new QueryWrapper<>();
+ wrapper3.eq("type",type3);
+ List<HonorRules> list3 = hrService.list(wrapper3);
+ for (int i = 0; i < list1.size(); i++) {
+ list3.get(i).setCondition(condition3.get(i));
+ }
+ hrService.updateBatchById(list3);
+
+ Integer type4 = vo.getType4().getType();
+ List<String> condition4 = vo.getType4().getCondition();
+ QueryWrapper<HonorRules> wrapper4 = new QueryWrapper<>();
+ wrapper4.eq("type",type4);
+ List<HonorRules> list4 = hrService.list(wrapper4);
+ for (int i = 0; i < list1.size(); i++) {
+ list4.get(i).setCondition(condition4.get(i));
+ }
+ hrService.updateBatchById(list4);
+
+ return ResultUtil.success();
+ }
@PostMapping("/base/honor/stuHonors")
public List<StuMedalVo> getStuHonors(@RequestBody List<Integer> honorIds){
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/TPhoneController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/TPhoneController.java
new file mode 100644
index 0000000..e50ec9f
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/TPhoneController.java
@@ -0,0 +1,48 @@
+package com.dsh.other.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.dsh.other.entity.Phone;
+import com.dsh.other.model.vo.questionVo.UpdatePhoneVO;
+import com.dsh.other.service.PhoneService;
+import com.dsh.other.util.ResultUtil;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 客服电话 控制器
+ */
+
+@Controller
+@RequestMapping("")
+public class TPhoneController {
+
+ @Resource
+ private PhoneService phoneService;
+
+ @RequestMapping(value = "/base/phone/list")
+ @ResponseBody
+ public List<Phone> list(){
+ return phoneService.list(new QueryWrapper<>());
+ }
+ /**
+ * 修改客服电话
+ */
+ @RequestMapping("/update")
+ @ResponseBody
+ public Object update(@RequestBody Phone phone){
+ String phone1 = phone.getPhone();
+ String substring = phone1.substring(0, phone1.length() - 1);
+ phone.setPhone(substring);
+ phone.setInsertTime(new Date());
+ phoneService.updateById(phone);
+ return ResultUtil.success();
+ }
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/FrequentlyAskedQuestions.java b/cloud-server-other/src/main/java/com/dsh/other/entity/FrequentlyAskedQuestions.java
index 4a96c7b..3f6b048 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/FrequentlyAskedQuestions.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/entity/FrequentlyAskedQuestions.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -52,6 +53,7 @@
* 添加时间
*/
@TableField("insertTime")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date insertTime;
/**
* 答复内容
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/HonorRules.java b/cloud-server-other/src/main/java/com/dsh/other/entity/HonorRules.java
index 6b09192..596a0d2 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/HonorRules.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/entity/HonorRules.java
@@ -43,9 +43,9 @@
/**
* 满足条件值
*/
- @TableField("condition")
- private String condition;
+ @TableField(value = "`condition`")
+ private String condition;
@Override
protected Serializable pkVal() {
diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/FrequentlyAskedQuestionsMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/FrequentlyAskedQuestionsMapper.java
index aae3a21..3873657 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/mapper/FrequentlyAskedQuestionsMapper.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/FrequentlyAskedQuestionsMapper.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.other.entity.FrequentlyAskedQuestions;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* <p>
@@ -12,4 +15,7 @@
* @since 2023-07-03
*/
public interface FrequentlyAskedQuestionsMapper extends BaseMapper<FrequentlyAskedQuestions> {
+ int changeState(@Param("questionIds") List<Integer> questionIds, @Param("type")Integer type);
+
+ FrequentlyAskedQuestions getInfo(Integer id);
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/HonorRulesMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/HonorRulesMapper.java
index f0941e4..dc25aab 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/mapper/HonorRulesMapper.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/HonorRulesMapper.java
@@ -18,4 +18,8 @@
List<HonorRules> querylistOfIds(@Param("honorIds") List<Integer> honorIds);
+
+ List<HonorRules> getList();
+
+
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/vo/honorVo/EditHonorVO.java b/cloud-server-other/src/main/java/com/dsh/other/model/vo/honorVo/EditHonorVO.java
new file mode 100644
index 0000000..9f75da7
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/vo/honorVo/EditHonorVO.java
@@ -0,0 +1,47 @@
+package com.dsh.other.model.vo.honorVo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 荣誉规则修改对象
+ */
+@Data
+public class EditHonorVO {
+ private data type1;
+ private data type2;
+ private data type3;
+ private data type4;
+
+
+ public static class data {
+ private Integer id;
+ private Integer type;
+ private List<String> condition;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer getType() {
+ return type;
+ }
+
+ public void setType(Integer type) {
+ this.type = type;
+ }
+
+ public List<String> getCondition() {
+ return condition;
+ }
+
+ public void setCondition(List<String> condition) {
+ this.condition = condition;
+ }
+ }
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionChangeStateVO.java b/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionChangeStateVO.java
new file mode 100644
index 0000000..651dee2
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionChangeStateVO.java
@@ -0,0 +1,19 @@
+package com.dsh.other.model.vo.questionVo;
+
+
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QuestionChangeStateVO {
+ /**
+ * 常见问题Id
+ */
+ List<Integer> questionId;
+ /**
+ * 上/下架 删除常见问题 type=1 上架 2下架 3删除
+ */
+ Integer type;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionSearchVO.java b/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionSearchVO.java
new file mode 100644
index 0000000..c9e4cad
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/QuestionSearchVO.java
@@ -0,0 +1,18 @@
+package com.dsh.other.model.vo.questionVo;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class QuestionSearchVO {
+ /**
+ * 常见问题
+ */
+ String content;
+ /**
+ * 上/下架 删除常见问题 type=1 上架 2下架 3删除
+ */
+ Integer state;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/UpdatePhoneVO.java b/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/UpdatePhoneVO.java
new file mode 100644
index 0000000..c7af902
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/vo/questionVo/UpdatePhoneVO.java
@@ -0,0 +1,9 @@
+package com.dsh.other.model.vo.questionVo;
+
+import lombok.Data;
+
+@Data
+public class UpdatePhoneVO {
+ private Integer id;
+ private String phone;
+}
\ No newline at end of file
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/FrequentlyAskedQuestionsService.java b/cloud-server-other/src/main/java/com/dsh/other/service/FrequentlyAskedQuestionsService.java
index bc2f6e7..1d18e44 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/FrequentlyAskedQuestionsService.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/FrequentlyAskedQuestionsService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.FrequentlyAskedQuestions;
+import com.dsh.other.model.vo.questionVo.QuestionChangeStateVO;
/**
* <p>
@@ -13,4 +14,7 @@
*/
public interface FrequentlyAskedQuestionsService extends IService<FrequentlyAskedQuestions> {
+ int changeState(QuestionChangeStateVO vo);
+
+ FrequentlyAskedQuestions getInfo(Integer id);
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/HonorRulesService.java b/cloud-server-other/src/main/java/com/dsh/other/service/HonorRulesService.java
index f367f8f..142baa4 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/HonorRulesService.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/HonorRulesService.java
@@ -17,4 +17,7 @@
List<HonorRules> querylistOfIds(List<Integer> honorIds);
+ List<HonorRules> getList();
+
+ List<HonorRules> selectByType(Integer type1);
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/FrequentlyAskedQuestionsServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/FrequentlyAskedQuestionsServiceImpl.java
index 0a60e66..4f3ee8d 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/FrequentlyAskedQuestionsServiceImpl.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/FrequentlyAskedQuestionsServiceImpl.java
@@ -3,8 +3,12 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.FrequentlyAskedQuestions;
import com.dsh.other.mapper.FrequentlyAskedQuestionsMapper;
+import com.dsh.other.model.vo.questionVo.QuestionChangeStateVO;
import com.dsh.other.service.FrequentlyAskedQuestionsService;
import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
/**
* <p>
@@ -17,4 +21,19 @@
@Service
public class FrequentlyAskedQuestionsServiceImpl extends ServiceImpl<FrequentlyAskedQuestionsMapper, FrequentlyAskedQuestions> implements FrequentlyAskedQuestionsService {
+ @Resource
+ private FrequentlyAskedQuestionsMapper frequentlyAskedQuestionsMapper;
+ @Override
+ public int changeState(QuestionChangeStateVO vo) {
+ List<Integer> questionIds = vo.getQuestionId();
+
+ Integer type = vo.getType();
+ return frequentlyAskedQuestionsMapper.changeState(questionIds,type);
+ }
+
+ @Override
+ public FrequentlyAskedQuestions getInfo(Integer id) {
+
+ return frequentlyAskedQuestionsMapper.getInfo(id);
+ }
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/HonorRulesServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/HonorRulesServiceImpl.java
index da00c8b..c69f67b 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/HonorRulesServiceImpl.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/HonorRulesServiceImpl.java
@@ -1,5 +1,6 @@
package com.dsh.other.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.HonorRules;
import com.dsh.other.mapper.HonorRulesMapper;
@@ -23,4 +24,16 @@
public List<HonorRules> querylistOfIds(List<Integer> honorIds) {
return this.baseMapper.querylistOfIds(honorIds);
}
+
+ @Override
+ public List<HonorRules> getList() {
+ return this.baseMapper.getList();
+ }
+
+ @Override
+ public List<HonorRules> selectByType(Integer type1) {
+ QueryWrapper<HonorRules> wrapper = new QueryWrapper<>();
+
+ return this.baseMapper.selectList(wrapper.eq("type",type1));
+ }
}
diff --git a/cloud-server-other/src/main/resources/mapper/FrequentlyAskedQuestionsMapper.xml b/cloud-server-other/src/main/resources/mapper/FrequentlyAskedQuestionsMapper.xml
index 084e295..12d1bd3 100644
--- a/cloud-server-other/src/main/resources/mapper/FrequentlyAskedQuestionsMapper.xml
+++ b/cloud-server-other/src/main/resources/mapper/FrequentlyAskedQuestionsMapper.xml
@@ -3,4 +3,19 @@
<mapper namespace="com.dsh.other.mapper.FrequentlyAskedQuestionsMapper">
+ <update id="changeState">
+ update t_frequently_asked_questions set
+ state = #{type}
+ <where>
+ <if test="questionIds != null and questionIds.size()>0">
+ AND t_frequently_asked_questions.id IN
+ <foreach collection="questionIds" separator="," item="id" open="(" close=")">
+ #{id}
+ </foreach>
+ </if>
+ </where>
+ </update>
+ <select id="getInfo" resultType="com.dsh.other.entity.FrequentlyAskedQuestions">
+ select * from t_frequently_asked_questions where id = #{id}
+ </select>
</mapper>
diff --git a/cloud-server-other/src/main/resources/mapper/HonorRulesMapper.xml b/cloud-server-other/src/main/resources/mapper/HonorRulesMapper.xml
index f9f3543..57fdf3c 100644
--- a/cloud-server-other/src/main/resources/mapper/HonorRulesMapper.xml
+++ b/cloud-server-other/src/main/resources/mapper/HonorRulesMapper.xml
@@ -19,4 +19,8 @@
</foreach>
</if>
</select>
+ <select id="getList" resultType="com.dsh.other.entity.HonorRules">
+ select * from t_honor_rules
+ </select>
+
</mapper>
--
Gitblit v1.7.1