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