javacodeadmin/ruoyi-system/src/main/java/com/ruoyi/system/controller/ServiceGoodsController.java

511 lines
20 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ruoyi.system.controller;
import java.math.BigDecimal;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.ControllerUtil.AppletControllerUtil;
import com.ruoyi.system.domain.ServiceCate;
import com.ruoyi.system.service.IServiceCateService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.ServiceGoods;
import com.ruoyi.system.service.IServiceGoodsService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 服务内容Controller
*
* @author ruoyi
* @date 2025-05-13
*/
@RestController
@RequestMapping("/system/ServiceGoods")
public class ServiceGoodsController extends BaseController {
@Autowired
private IServiceGoodsService serviceGoodsService;
@Autowired
private IServiceCateService serviceCateService;
/**
* 查询服务内容列表
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:list')")
@GetMapping("/list")
public TableDataInfo list(ServiceGoods serviceGoods) {
startPage();
List<ServiceGoods> list = serviceGoodsService.selectServiceGoodsList(serviceGoods);
for (ServiceGoods serviceGoodsdata : list) {
ServiceCate serviceCate = serviceCateService.selectServiceCateById(serviceGoodsdata.getCateId());
if (serviceCate != null) {
serviceGoodsdata.setCateName(serviceCate.getTitle());
}
serviceGoodsdata.setIcon(com.ruoyi.system.ControllerUtil.AppletControllerUtil.buildImageUrl(serviceGoodsdata.getIcon()));
}
return getDataTable(list);
}
/**
* 导出服务内容列表
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:export')")
@Log(title = "服务内容", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ServiceGoods serviceGoods) {
List<ServiceGoods> list = serviceGoodsService.selectServiceGoodsList(serviceGoods);
// 处理数据,设置中文名称
for (ServiceGoods item : list) {
// 设置状态名称
if ("1".equals(item.getStatus())) {
item.setStatusName("启用");
} else {
item.setStatusName("停用");
}
// 设置下单类型名称
if (item.getServicetype() != null) {
switch (item.getServicetype()) {
case 1:
item.setServiceTypeName("预约下单");
break;
case 2:
item.setServiceTypeName("报价下单");
break;
default:
item.setServiceTypeName("未知类型");
break;
}
}
// 设置规格类型名称
if (item.getSkuType() != null) {
switch (item.getSkuType()) {
case 1:
item.setSkuTypeName("单规格");
break;
case 2:
item.setSkuTypeName("多规格");
break;
default:
item.setSkuTypeName("未知类型");
break;
}
}
// 设置类型名称
if (item.getType() != null) {
switch (item.getType()) {
case 1:
item.setTypeName("服务");
break;
case 2:
item.setTypeName("商品");
break;
default:
item.setTypeName("未知类型");
break;
}
}
// 设置分类名称
if (item.getCateId() != null) {
ServiceCate serviceCate = serviceCateService.selectServiceCateById(item.getCateId());
if (serviceCate != null) {
item.setCateName(serviceCate.getTitle());
}
}
// 设置是否跳转服务名称
if (item.getIsforservice() != null) {
switch (item.getIsforservice()) {
case 1:
item.setIsForServiceName("");
break;
case 2:
item.setIsForServiceName("");
break;
default:
item.setIsForServiceName("未知");
break;
}
}
// 设置是否可拼团名称
if (item.getIsgroup() != null) {
switch (item.getIsgroup()) {
case 1:
item.setIsGroupName("");
break;
case 2:
item.setIsGroupName("");
break;
default:
item.setIsGroupName("未知");
break;
}
}
// 设置是否可设置次卡名称
if (item.getIsonce() != null) {
switch (item.getIsonce()) {
case 1:
item.setIsOnceName("");
break;
case 2:
item.setIsOnceName("");
break;
default:
item.setIsOnceName("未知");
break;
}
}
// 设置分佣模式名称
if (item.getCommissiontype() != null) {
switch (item.getCommissiontype()) {
case 1:
item.setCommissionTypeName("系统分佣");
break;
case 2:
item.setCommissionTypeName("独立分佣");
break;
case 3:
item.setCommissionTypeName("不分佣");
break;
default:
item.setCommissionTypeName("未知模式");
break;
}
}
// 设置派单模式名称
if (item.getDispatchtype() != null) {
switch (item.getDispatchtype()) {
case 1:
item.setDispatchTypeName("系统派单");
break;
case 2:
item.setDispatchTypeName("后台手动派单");
break;
case 3:
item.setDispatchTypeName("指定工人");
break;
default:
item.setDispatchTypeName("未知模式");
break;
}
}
// 设置是否为一口价名称
if (item.getIsfixed() != null) {
switch (item.getIsfixed()) {
case 1:
item.setIsFixedName("");
break;
case 2:
item.setIsFixedName("");
break;
default:
item.setIsFixedName("未知");
break;
}
}
// 处理问答数量
if (item.getQuestions() != null && !item.getQuestions().isEmpty()) {
try {
// 尝试解析JSON格式的问答数据计算数量
if (item.getQuestions().startsWith("[") && item.getQuestions().endsWith("]")) {
// 简单的JSON数组计数
String[] questions = item.getQuestions().split("\\{");
item.setQuestionCount(String.valueOf(questions.length - 1));
} else {
item.setQuestionCount("1");
}
} catch (Exception e) {
item.setQuestionCount("0");
}
} else {
item.setQuestionCount("0");
}
// 处理技能名称转换
if (item.getSkillIds() != null && !item.getSkillIds().trim().isEmpty()) {
try {
// 这里可以根据需要查询技能表获取技能名称
// 暂时设置为技能ID的显示
item.setSkillNames(item.getSkillIds());
} catch (Exception e) {
item.setSkillNames("技能解析失败");
}
} else {
item.setSkillNames("");
}
}
ExcelUtil<ServiceGoods> util = new ExcelUtil<ServiceGoods>(ServiceGoods.class);
util.exportExcel(response, list, "服务内容数据");
}
/**
* 获取服务内容详细信息
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:query')")
@GetMapping(value = "/selectServiceCateList/{type}")
public AjaxResult selectServiceCateList(@PathVariable("type") Integer type) {
ServiceCate serviceGoods = new ServiceCate();
if (type != null){
serviceGoods.setType(Long.valueOf(type));
}
return success(serviceCateService.selectServiceCateList(serviceGoods));
// return success(serviceCateService.selectServiceCateList(new ServiceCate()));
}
/**
* 获取服务内容详细信息
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:query')")
@GetMapping(value = "/selectList")
public AjaxResult selectList() {
ServiceGoods serviceGoods = new ServiceGoods();
serviceGoods.setIsfixed(1);
return success(serviceGoodsService.selectServiceGoodsList(serviceGoods));
}
/**
* 获取服务内容详细信息
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:query')")
@GetMapping(value = "/selectTypeList/{type}")
public AjaxResult selectTypeList(@PathVariable("type") Integer type) {
ServiceGoods serviceGoods = new ServiceGoods();
if (type != null){
serviceGoods.setType(type);
}
return success(serviceGoodsService.selectServiceGoodsList(serviceGoods));
}
/**
* 获取服务内容详细信息
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(id);
serviceGoods.setIcon(AppletControllerUtil.buildImageUrl(serviceGoods.getIcon()));
if (serviceGoods != null){
if (serviceGoods.getSkuType()==null){
serviceGoods.setSkuType(1);
JSONObject jsonObject =new JSONObject();
jsonObject.put("type","single");
serviceGoods.setSku(jsonObject.toJSONString());
serviceGoodsService.updateServiceGoods(serviceGoods);
}
if (serviceGoods.getSku()!=null){
if (serviceGoods.getSku().equals("{}")){
JSONObject jsonObject =new JSONObject();
jsonObject.put("type","single");
serviceGoods.setSku(jsonObject.toJSONString());
serviceGoodsService.updateServiceGoods(serviceGoods);
}
}
if(StringUtils.isNotBlank(serviceGoods.getSkillIds())){
serviceGoods.setSkillIds(AppletControllerUtil.convertToJSONArray(serviceGoods.getSkillIds()).toJSONString());
}
if(StringUtils.isNotBlank(serviceGoods.getImgs())){
serviceGoods.setImgs(AppletControllerUtil.convertToJSONArray(serviceGoods.getImgs()).toJSONString());
}
}
return success(serviceGoods);
}
/**
* 新增服务内容
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:add')")
@Log(title = "服务内容", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ServiceGoods serviceGoods) {
// 验证和处理基检现象数据格式
validateAndProcessBasicField(serviceGoods);
// 处理一级和二级分类ID
processCategoryIds(serviceGoods);
if (serviceGoods.getPostage()==null){
serviceGoods.setPostage(BigDecimal.ZERO);
}
if(StringUtils.isNotBlank(serviceGoods.getSkillIds())){
serviceGoods.setSkillIds(AppletControllerUtil.convertToJSONArray(serviceGoods.getSkillIds()).toJSONString());
}
if(StringUtils.isNotBlank(serviceGoods.getImgs())){
serviceGoods.setImgs(AppletControllerUtil.convertToJSONArray(serviceGoods.getImgs()).toJSONString());
}
return toAjax(serviceGoodsService.insertServiceGoods(serviceGoods));
}
/**
* 修改服务内容
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:edit')")
@Log(title = "服务内容", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ServiceGoods serviceGoods) {
// 验证和处理基检现象数据格式
validateAndProcessBasicField(serviceGoods);
if(StringUtils.isNotBlank(serviceGoods.getSkillIds())){
serviceGoods.setSkillIds(AppletControllerUtil.convertToJSONArray(serviceGoods.getSkillIds()).toJSONString());
}
if(StringUtils.isNotBlank(serviceGoods.getImgs())){
serviceGoods.setImgs(AppletControllerUtil.convertToJSONArray(serviceGoods.getImgs()).toJSONString());
}
// 处理一级和二级分类ID
processCategoryIds(serviceGoods);
return toAjax(serviceGoodsService.updateServiceGoods(serviceGoods));
}
/**
* 定时任务状态修改
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:changeStatus')")
@Log(title = "修改状态", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public AjaxResult changeStatus(@RequestBody ServiceGoods serviceGoods) {
ServiceGoods newServiceGoods = serviceGoodsService.selectServiceGoodsById(serviceGoods.getId());
newServiceGoods.setStatus(serviceGoods.getStatus());
return toAjax(serviceGoodsService.updateServiceGoods(newServiceGoods));
}
/**
* 删除服务内容
*/
@PreAuthorize("@ss.hasPermi('system:ServiceGoods:remove')")
@Log(title = "服务内容", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(serviceGoodsService.deleteServiceGoodsByIds(ids));
}
/**
* 验证和处理基检现象数据格式
* 确保基检现象字段为有效的JSON数组字符串格式
*/
private void validateAndProcessBasicField(ServiceGoods serviceGoods) {
String basic = serviceGoods.getBasic();
if (basic != null && !basic.trim().isEmpty()) {
try {
// 尝试解析为JSON数组验证格式是否正确
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
Object parsed = mapper.readValue(basic, Object.class);
if (parsed instanceof java.util.List) {
// 如果是有效的JSON数组保持不变
// 可以在这里进行额外的数据清理,比如去除空字符串
@SuppressWarnings("unchecked")
java.util.List<String> list = (java.util.List<String>) parsed;
list.removeIf(item -> item == null || item.trim().isEmpty());
// 重新序列化,确保格式统一
String cleanedBasic = mapper.writeValueAsString(list);
serviceGoods.setBasic(cleanedBasic);
} else {
// 如果不是数组格式设置为null
serviceGoods.setBasic(null);
}
} catch (Exception e) {
// 如果JSON解析失败尝试按逗号分隔的字符串处理兼容旧数据
String[] items = basic.split(",");
java.util.List<String> list = new java.util.ArrayList<>();
for (String item : items) {
String trimmed = item.trim();
if (!trimmed.isEmpty()) {
list.add(trimmed);
}
}
if (!list.isEmpty()) {
try {
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
String jsonArray = mapper.writeValueAsString(list);
serviceGoods.setBasic(jsonArray);
} catch (Exception ex) {
// 转换失败设置为null
serviceGoods.setBasic(null);
}
} else {
serviceGoods.setBasic(null);
}
}
}
}
/**
* 处理一级和二级分类ID
* 根据选择的分类自动设置一级和二级分类ID
* 如果选择的是一级分类则一级分类ID记录二级分类ID设为0
* 如果选择的是二级分类则记录一级分类ID和二级分类ID
*/
private void processCategoryIds(ServiceGoods serviceGoods) {
Long cateId = serviceGoods.getCateId();
if (cateId != null && cateId > 0) {
try {
// 查询当前选择的分类信息
ServiceCate currentCate = serviceCateService.selectServiceCateById(cateId);
if (currentCate != null) {
// 判断是否为一级分类parentId为null或0
if (currentCate.getParentId() == null || currentCate.getParentId() == 0) {
// 选择的是一级分类
serviceGoods.setFirstCateId(cateId);
serviceGoods.setSecondCateId(0L);
} else {
// 选择的是二级分类
serviceGoods.setFirstCateId(currentCate.getParentId());
serviceGoods.setSecondCateId(cateId);
}
} else {
// 分类不存在设置为null
serviceGoods.setFirstCateId(null);
serviceGoods.setSecondCateId(null);
}
} catch (Exception e) {
// 异常情况下设置为null
serviceGoods.setFirstCateId(null);
serviceGoods.setSecondCateId(null);
}
} else {
// 没有选择分类
serviceGoods.setFirstCateId(null);
serviceGoods.setSecondCateId(null);
}
}
}