package com.ruoyi.system.controller; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson2.JSONArray; import com.ruoyi.system.ControllerUtil.GenerateCustomCode; import com.ruoyi.system.domain.*; import com.ruoyi.system.service.*; 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.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; import java.util.Map; /** * 次卡管理Controller * * @author ruoyi * @date 2025-07-02 */ @RestController @RequestMapping("/system/UserSecondaryCard") public class UserSecondaryCardController extends BaseController { @Autowired private IUserSecondaryCardService userSecondaryCardService; @Autowired private IServiceGoodsService serviceGoodsService; @Autowired private IServiceCateService serviceCateService; @Autowired private IUserUseSecondaryCardService userUseSecondaryCardService; @Autowired private IUsersService usersService; /** * 数字转中文工具方法 */ private String numberToChinese(Long num) { if (num == null || num <= 0) { return "零"; } String[] chineseNumbers = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"}; if (num <= 10) { return chineseNumbers[num.intValue()]; } else if (num < 20) { return "十" + (num > 10 ? chineseNumbers[Math.toIntExact((num - 10))] : ""); } else if (num < 100) { long tens = num / 10; long ones = num % 10; String result = chineseNumbers[(int)tens] + "十"; if (ones > 0) { result += chineseNumbers[(int)ones]; } return result; } else { // 对于大于100的数字,直接返回阿拉伯数字 return num.toString(); } } /** * 生成introduction字段 */ private String generateIntroduction(Long allnum, Long num) { if (allnum == null || num == null) { return ""; } String allnumChinese = numberToChinese(allnum); String numChinese = numberToChinese(num); return allnumChinese + "选" + numChinese; } /** * 查询次卡管理列表 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:list')") @GetMapping("/list") public TableDataInfo list(UserSecondaryCard userSecondaryCard) { startPage(); List list = userSecondaryCardService.selectUserSecondaryCardList(userSecondaryCard); JSONArray jsonArray = new JSONArray(); //JSONArray.parseArray(str); for(UserSecondaryCard t:list){ List idsList = com.alibaba.fastjson2.JSONArray.parseArray(t.getGoodsids(), String.class); t.setGoodsname(serviceGoodsService.selectTitlesJSONArrayByIds(idsList)); ServiceCate serviceCate = serviceCateService.selectServiceCateById(t.getType()); if(serviceCate!=null){ t.setTypename(serviceCate.getTitle()); } } return getDataTable(list); } /** * 导出次卡管理列表 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:export')") @Log(title = "次卡管理", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, UserSecondaryCard userSecondaryCard) { List list = userSecondaryCardService.selectUserSecondaryCardList(userSecondaryCard); // 处理导出数据,确保关联信息正确 for(UserSecondaryCard item : list) { // 处理服务名称 if (item.getGoodsids() != null && !item.getGoodsids().isEmpty()) { try { List idsList = com.alibaba.fastjson2.JSONArray.parseArray(item.getGoodsids(), String.class); item.setGoodsname(serviceGoodsService.selectTitlesJSONArrayByIds(idsList)); } catch (Exception e) { item.setGoodsname("数据解析错误"); } } // 处理分类名称 if (item.getType() != null) { ServiceCate serviceCate = serviceCateService.selectServiceCateById(item.getType()); if (serviceCate != null) { item.setTypename(serviceCate.getTitle()); } } // 设置可用/总数显示 if (item.getNum() != null && item.getAllnum() != null) { item.setServiceCountDisplay(item.getNum() + "/" + item.getAllnum()); } else { item.setServiceCountDisplay("0/0"); } // 处理状态显示 - 将数字状态转换为中文状态名称 if (item.getStatus() != null) { switch (item.getStatus().intValue()) { case 1: item.setStatusName("上线"); break; case 2: item.setStatusName("下线"); break; case 3: item.setStatusName("下架"); break; default: item.setStatusName("未知状态"); break; } } else { item.setStatusName("未知状态"); } } ExcelUtil util = new ExcelUtil(UserSecondaryCard.class); util.exportExcel(response, list, "次卡管理数据"); } /** * 导出次卡购买明细 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:export')") @Log(title = "次卡购买明细", businessType = BusinessType.EXPORT) @PostMapping("/exportPurchaseDetails") public void exportPurchaseDetails(HttpServletResponse response, Long cardId) { if (cardId == null) { throw new RuntimeException("次卡ID不能为空"); } List list = userUseSecondaryCardService.selectPurchaseDetailsByCardId(cardId.toString()); // 处理数据,设置状态名称和用户名称 for (UserUseSecondaryCard item : list) { // 设置状态名称 if (item.getStatus() != null) { switch (item.getStatus().intValue()) { case 1: item.setStatusName("可用"); break; case 2: item.setStatusName("已用完"); break; case 3: item.setStatusName("已退款"); break; case 4: item.setStatusName("未支付"); break; default: item.setStatusName("未知状态"); break; } } else { item.setStatusName("未知状态"); } // 设置用户名称 if (item.getUid() != null) { Users users = usersService.selectUsersById(item.getUid()); if (users != null) { item.setUserName(users.getName()); } else { item.setUserName("未知用户"); } } else { item.setUserName("未知用户"); } } ExcelUtil util = new ExcelUtil(UserUseSecondaryCard.class); util.exportExcel(response, list, "次卡购买明细"); } /** * 获取次卡管理详细信息 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { return success(userSecondaryCardService.selectUserSecondaryCardById(id)); } /** * 新增次卡管理 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:add')") @Log(title = "次卡管理", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody UserSecondaryCard userSecondaryCard) { // 数据验证 if (userSecondaryCard.getAllnum() == null || userSecondaryCard.getAllnum() <= 0) { return error("总服务数必须大于0"); } if (userSecondaryCard.getNum() == null || userSecondaryCard.getNum() <= 0) { return error("可提供服务数必须大于0"); } if (userSecondaryCard.getNum() > userSecondaryCard.getAllnum()) { return error("可提供服务数不能大于总服务数"); } if (userSecondaryCard.getShowMoney() != null && userSecondaryCard.getRealMoney() != null) { if (userSecondaryCard.getRealMoney().compareTo(userSecondaryCard.getShowMoney()) > 0) { return error("实付价格不能大于展示价格"); } } userSecondaryCard.setOrderid(GenerateCustomCode.generCreateOrder("CIKA")); userSecondaryCard.setCreattime(new Date()); // 自动生成introduction字段 String introduction = generateIntroduction(userSecondaryCard.getAllnum(), userSecondaryCard.getNum()); userSecondaryCard.setIntroduction(introduction); return toAjax(userSecondaryCardService.insertUserSecondaryCard(userSecondaryCard)); } /** * 修改次卡管理 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:edit')") @Log(title = "次卡管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody UserSecondaryCard userSecondaryCard) { // 数据验证 if (userSecondaryCard.getAllnum() != null && userSecondaryCard.getAllnum() <= 0) { return error("总服务数必须大于0"); } if (userSecondaryCard.getNum() != null && userSecondaryCard.getNum() <= 0) { return error("可提供服务数必须大于0"); } if (userSecondaryCard.getNum() != null && userSecondaryCard.getAllnum() != null) { if (userSecondaryCard.getNum() > userSecondaryCard.getAllnum()) { return error("可提供服务数不能大于总服务数"); } } if (userSecondaryCard.getShowMoney() != null && userSecondaryCard.getRealMoney() != null) { if (userSecondaryCard.getRealMoney().compareTo(userSecondaryCard.getShowMoney()) > 0) { return error("实付价格不能大于展示价格"); } } // 自动生成introduction字段 String introduction = generateIntroduction(userSecondaryCard.getAllnum(), userSecondaryCard.getNum()); userSecondaryCard.setIntroduction(introduction); return toAjax(userSecondaryCardService.updateUserSecondaryCard(userSecondaryCard)); } /** * 删除次卡管理 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:remove')") @Log(title = "次卡管理", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(userSecondaryCardService.deleteUserSecondaryCardByIds(ids)); } /** * 批量更新次卡状态 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:edit')") @Log(title = "批量更新次卡状态", businessType = BusinessType.UPDATE) @PutMapping("/batchStatus") public AjaxResult batchUpdateStatus(@RequestBody Map params) { List ids = (List) params.get("ids"); Integer status = (Integer) params.get("status"); if (ids == null || ids.isEmpty()) { return error("请选择要更新的次卡"); } if (status == null || status < 1 || status > 3) { return error("状态值无效"); } int result = 0; for (Long id : ids) { UserSecondaryCard card = new UserSecondaryCard(); card.setId(id); card.setStatus(status.longValue()); result += userSecondaryCardService.updateUserSecondaryCard(card); } return toAjax(result); } /** * 批量删除次卡 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:remove')") @Log(title = "批量删除次卡", businessType = BusinessType.DELETE) @DeleteMapping("/batchDelete") public AjaxResult batchDelete(@RequestBody List ids) { if (ids == null || ids.isEmpty()) { return error("请选择要删除的次卡"); } return toAjax(userSecondaryCardService.deleteUserSecondaryCardByIds(ids.toArray(new Long[0]))); } /** * 查询次卡购买详情 */ @PreAuthorize("@ss.hasPermi('system:UserSecondaryCard:query')") @GetMapping("/purchaseDetails/{id}") public AjaxResult getPurchaseDetails(@PathVariable("id") String id) { List list = userUseSecondaryCardService.selectPurchaseDetailsByCardId(id); for (UserUseSecondaryCard userUseSecondaryCard : list){ Users users = usersService.selectUsersById(userUseSecondaryCard.getUid()); if (users != null) { userUseSecondaryCard.setRemark(users.getName()); } } return success(list); //return success(userUseSecondaryCardService.selectPurchaseDetailsByCardId(id)); } }