Browse Source

Merge branch 'milestone-20260113-现金管理0109' of http://39.101.133.168:8807/huangqizhen/gold-java into lijianlin/feature-20260113-现金管理0109

lijianlin/feature-20260113-现金管理0109
lijianlin 1 month ago
parent
commit
e9f803e292
  1. 3
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  2. 17
      src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java
  3. 5
      src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
  4. 44
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  5. 16
      src/main/java/com/example/demo/controller/cash/CashRefundController.java
  6. 12
      src/main/java/com/example/demo/controller/coin/AdminController.java
  7. 21
      src/main/java/com/example/demo/controller/coin/ExportController.java
  8. 33
      src/main/java/com/example/demo/controller/coin/PermissionController.java
  9. 6
      src/main/java/com/example/demo/controller/coin/WorkbenchController.java
  10. 1
      src/main/java/com/example/demo/domain/entity/Admin.java
  11. 8
      src/main/java/com/example/demo/domain/entity/CashRecord.java
  12. 2
      src/main/java/com/example/demo/domain/entity/User.java
  13. 7
      src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
  14. 6
      src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
  15. 6
      src/main/java/com/example/demo/domain/vo/cash/FundsDTO.java
  16. 2
      src/main/java/com/example/demo/domain/vo/cash/PerformanceVO.java
  17. 2
      src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java
  18. 1
      src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java
  19. 2
      src/main/java/com/example/demo/domain/vo/coin/RefundUser.java
  20. 2
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  21. 2
      src/main/java/com/example/demo/service/bean/BeanConsumeService.java
  22. 4
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  23. 2
      src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java
  24. 6
      src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
  25. 86
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  26. 68
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  27. 14
      src/main/resources/cashMapper/CashCollectionMapper.xml
  28. 27
      src/main/resources/cashMapper/CashRefundMapper.xml
  29. 2
      src/main/resources/mapper/AdminMapper.xml
  30. 14
      src/main/resources/mapper/AuditMapper.xml
  31. 3
      src/main/resources/mapper/ConsumeMapper.xml
  32. 4
      src/main/resources/mapper/GoldDetailMapper.xml
  33. 2
      src/main/resources/mapper/WorkBenchMapper.xml

3
src/main/java/com/example/demo/Export/ExportServiceImpl.java

@ -11,6 +11,7 @@ import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.AdminService; import com.example.demo.service.coin.AdminService;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -309,7 +310,7 @@ public class ExportServiceImpl implements ExportService {
}else if (dto instanceof CashDTO cashDTO){ }else if (dto instanceof CashDTO cashDTO){
requestData.put(requestDataKey, cashDTO.getCashCollection()); requestData.put(requestDataKey, cashDTO.getCashCollection());
}else if (dto instanceof PerformanceDTO performanceDTO){ }else if (dto instanceof PerformanceDTO performanceDTO){
requestData.put(requestDataKey, performanceDTO.getPerformanceVO());
requestData.put(requestDataKey, performanceDTO);
}else if (dto instanceof FundDTO fundDTO){ }else if (dto instanceof FundDTO fundDTO){
requestData.put(requestDataKey, fundDTO.getFundsDTO()); requestData.put(requestDataKey, fundDTO.getFundsDTO());
} }

17
src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java

@ -87,7 +87,7 @@ public class ExcelHeaderTranslator {
headers.put("adminName", "提交人"); headers.put("adminName", "提交人");
headers.put("isRefundDescription", "是否退款"); headers.put("isRefundDescription", "是否退款");
headers.put("createTime", "消耗时间"); headers.put("createTime", "消耗时间");
headers.put("price", "折扣金币");
headers.put("price", "原价");
// 如果需要翻译则翻译表头 // 如果需要翻译则翻译表头
if (!isChineseLanguage(lang)) { if (!isChineseLanguage(lang)) {
@ -131,8 +131,6 @@ public class ExcelHeaderTranslator {
headers.put("taskGold", "任务金币"); headers.put("taskGold", "任务金币");
headers.put("remark", "备注"); headers.put("remark", "备注");
headers.put("adminName", "提交人"); headers.put("adminName", "提交人");
headers.put("price", "原价");
headers.put("linkId", "LinkId");
headers.put("auditTime", "退款时间"); headers.put("auditTime", "退款时间");
// 如果需要翻译则翻译表头 // 如果需要翻译则翻译表头
@ -150,7 +148,7 @@ public class ExcelHeaderTranslator {
return Arrays.asList( return Arrays.asList(
"orderCode", "name", "jwcode", "market", "goodsName", "orderCode", "name", "jwcode", "market", "goodsName",
"refundType", "refundModelDesc", "sumGold", "permanentGold", "refundType", "refundModelDesc", "sumGold", "permanentGold",
"freeGold", "taskGold", "remark", "adminName", "price", "linkId", "auditTime"
"freeGold", "taskGold", "remark", "adminName", "auditTime"
); );
} }
@ -302,7 +300,7 @@ public class ExcelHeaderTranslator {
headers.put("status", "订单状态"); headers.put("status", "订单状态");
headers.put("remark", "备注"); headers.put("remark", "备注");
headers.put("refundReason", "退款理由"); headers.put("refundReason", "退款理由");
headers.put("refundModel", "退款方式");
headers.put("refundModelDesc", "退款方式");
// 如果需要翻译则翻译表头 // 如果需要翻译则翻译表头
if (!isChineseLanguage(lang)) { if (!isChineseLanguage(lang)) {
@ -318,7 +316,7 @@ public class ExcelHeaderTranslator {
public List<String> getCashRecordColumnOrder() { public List<String> getCashRecordColumnOrder() {
return Arrays.asList( return Arrays.asList(
"goodsName", "goodsNum", "numUnit", "Submitter", "id", "jwcode", "name", "market", "goodsName", "goodsNum", "numUnit", "Submitter", "id", "jwcode", "name", "market",
"status", "remark", "refundReason", "refundModel"
"status", "remark", "refundReason", "refundModelDesc"
); );
} }
@ -411,7 +409,7 @@ public class ExcelHeaderTranslator {
headers.put("freeBean", "免费金豆数"); headers.put("freeBean", "免费金豆数");
headers.put("buyBean", "付费金豆数"); headers.put("buyBean", "付费金豆数");
headers.put("channel", "频道"); headers.put("channel", "频道");
headers.put("type", "会员类型");
headers.put("typeDesc", "会员类型");
headers.put("consumeTime", "加入时间"); headers.put("consumeTime", "加入时间");
// 如果需要翻译则翻译表头 // 如果需要翻译则翻译表头
@ -428,7 +426,7 @@ public class ExcelHeaderTranslator {
public List<String> getBeanConsumeFanColumnOrder() { public List<String> getBeanConsumeFanColumnOrder() {
return Arrays.asList( return Arrays.asList(
"id", "name", "jwcode", "dept", "beanNum", "freeBean", "buyBean", "id", "name", "jwcode", "dept", "beanNum", "freeBean", "buyBean",
"channel", "type", "consumeTime"
"channel", "typeDesc", "consumeTime"
); );
} }
@ -493,6 +491,7 @@ public class ExcelHeaderTranslator {
headers.put("taskGold", "任务金币"); headers.put("taskGold", "任务金币");
headers.put("adminName", "提交人"); headers.put("adminName", "提交人");
headers.put("auditTime", "更新时间"); headers.put("auditTime", "更新时间");
headers.put("price", "原价");
// 如果需要翻译则翻译表头 // 如果需要翻译则翻译表头
if (!isChineseLanguage(lang)) { if (!isChineseLanguage(lang)) {
@ -508,7 +507,7 @@ public class ExcelHeaderTranslator {
public List<String> getGoldDetailColumnOrder() { public List<String> getGoldDetailColumnOrder() {
return Arrays.asList( return Arrays.asList(
"name", "jwcode", "market", "payPlatform", "typeDesc", "sumGold", "name", "jwcode", "market", "payPlatform", "typeDesc", "sumGold",
"permanentGold", "freeGold", "taskGold", "adminName", "auditTime"
"permanentGold", "freeGold", "taskGold", "adminName", "auditTime","price"
); );
} }

5
src/main/java/com/example/demo/controller/bean/BeanConsumeController.java

@ -40,6 +40,11 @@ public class BeanConsumeController {
@Autowired @Autowired
private TranslationService translationService; private TranslationService translationService;
//获取角色的权限
@PostMapping("/getRoleChannel")
public Result getRoleChannel(@RequestBody Integer roleId){
return Result.success(beanConsumeService.getRoleChannel(roleId));
}
//获取消费用户分部信息 //获取消费用户分部信息
@PostMapping("/getDept") @PostMapping("/getDept")
public Result getDept(@RequestHeader(defaultValue = "zh_CN") String lang){ public Result getDept(@RequestHeader(defaultValue = "zh_CN") String lang){

44
src/main/java/com/example/demo/controller/cash/CashCollectionController.java

@ -53,13 +53,26 @@ public class CashCollectionController {
@PostMapping("/getNameAndMarket") @PostMapping("/getNameAndMarket")
public Result getNameAndMarket(@RequestBody Integer jwcode, @RequestHeader(defaultValue = "zh_CN") String lang) { public Result getNameAndMarket(@RequestBody Integer jwcode, @RequestHeader(defaultValue = "zh_CN") String lang) {
try { try {
return Result.success(cashCollectionService.getNameAndMarket(jwcode));
Result result = cashCollectionService.getNameAndMarket(jwcode, lang);
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof User) {
User user = (User) result.getData();
// 如果服务层未处理市场名称翻译在这里进行处理
if (user.getMarketName() != null) {
user.setMarketName(languageTranslationUtil.translate(user.getMarketName(), lang));
}
}
return result;
} catch (Exception e) { } catch (Exception e) {
String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
return Result.error(errorMsg);
String errorMsg = languageTranslationUtil.translate("查询失败", lang);
return Result.error(errorMsg + ": " + e.getMessage());
} }
} }
//获取收款活动列表 //获取收款活动列表
@PostMapping("/getActivityList") @PostMapping("/getActivityList")
public Result getActivityList() public Result getActivityList()
@ -296,10 +309,8 @@ public class CashCollectionController {
return result; return result;
} catch (Exception e) { } catch (Exception e) {
// 推送异常到飞书核心调用工具类
System.out.println(e.getMessage());
String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
throw new SecurityException();
return Result.error(errorMsg);
} }
} }
@ -418,6 +429,13 @@ public class CashCollectionController {
cashCollection.getReceivedMarket(), languageCode); cashCollection.getReceivedMarket(), languageCode);
cashCollection.setReceivedMarket(chineseMarket); cashCollection.setReceivedMarket(chineseMarket);
} }
// 转换所属地区名称
if (cashCollection.getMarketName() != null && !cashCollection.getMarketName().isEmpty()) {
String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
cashCollection.getMarketName(), languageCode);
cashCollection.setMarketName(chineseMarketName);
}
} }
} }
@ -481,6 +499,20 @@ public class CashCollectionController {
cashCollection.getPaymentCurrency(), languageCode); cashCollection.getPaymentCurrency(), languageCode);
cashCollection.setPaymentCurrency(chineseCurrency); cashCollection.setPaymentCurrency(chineseCurrency);
} }
// 转换提交人地区
if (cashCollection.getSubmitterMarket() != null && !cashCollection.getSubmitterMarket().isEmpty()) {
String chineseMarket = translationService.findChineseSimplifiedByTranslation(
cashCollection.getSubmitterMarket(), languageCode);
cashCollection.setSubmitterMarket(chineseMarket);
}
// 转换所属地区名称
if (cashCollection.getMarketName() != null && !cashCollection.getMarketName().isEmpty()) {
String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
cashCollection.getMarketName(), languageCode);
cashCollection.setMarketName(chineseMarketName);
}
} }
} }

16
src/main/java/com/example/demo/controller/cash/CashRefundController.java

@ -543,6 +543,11 @@ public class CashRefundController {
if (dto.getReceivedCurrency() != null) { if (dto.getReceivedCurrency() != null) {
dto.setReceivedCurrency(languageTranslationUtil.translate(dto.getReceivedCurrency(), lang)); dto.setReceivedCurrency(languageTranslationUtil.translate(dto.getReceivedCurrency(), lang));
} }
// 翻译退款方式
if (dto.getRefundModel() != null) {
String refundModelDesc = convertRefundModelToString(dto.getRefundModel());
dto.setRefundModelDesc(languageTranslationUtil.translate(refundModelDesc, lang));
}
} }
} }
} }
@ -726,4 +731,15 @@ public class CashRefundController {
} }
} }
/**
* 将退款模型数字转换为中文描述
*/
private String convertRefundModelToString(Byte refundModel) {
if (refundModel == null) return "";
switch (refundModel) {
case 0: return "全部退款";
case 1: return "部分退款";
default: return "未知退款方式";
}
}
} }

12
src/main/java/com/example/demo/controller/coin/AdminController.java

@ -84,11 +84,16 @@ public class AdminController {
// 对用户信息进行多语言转换 // 对用户信息进行多语言转换
if (userDetails instanceof Admin) { if (userDetails instanceof Admin) {
Admin admin = (Admin) userDetails; Admin admin = (Admin) userDetails;
// 如果不是中文环境先将翻译后的文本转换回中文进行处理
// 获取当前语言环境
String languageCode = parseLanguageCode(lang); String languageCode = parseLanguageCode(lang);
if (!"zh".equalsIgnoreCase(languageCode)) {
convertTranslatedFieldsToChinese(admin, languageCode);
// 如果是中文环境直接返回无需转换
if ("zh".equalsIgnoreCase(languageCode) || "zh_cn".equalsIgnoreCase(languageCode)) {
return userDetails;
} }
// 非中文环境下先将数据库中的中文市场信息转换为目标语言
translateAdminInfo(admin, lang); translateAdminInfo(admin, lang);
} }
return userDetails; return userDetails;
@ -97,7 +102,6 @@ public class AdminController {
} }
} }
//获取管理员ID //获取管理员ID
@Log("获取用户ID") @Log("获取用户ID")
@PostMapping("/adminId") @PostMapping("/adminId")

21
src/main/java/com/example/demo/controller/coin/ExportController.java

@ -13,10 +13,7 @@ import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.FundsDTO; import com.example.demo.domain.vo.cash.FundsDTO;
import com.example.demo.domain.vo.cash.PerformanceVO; import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.ConsumeUser;
import com.example.demo.domain.vo.coin.RechargeUser;
import com.example.demo.domain.vo.coin.RefundUser;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.service.coin.ExportExcelService; import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.Export.ExportService; import com.example.demo.Export.ExportService;
import com.example.demo.service.coin.TranslationService; import com.example.demo.service.coin.TranslationService;
@ -372,18 +369,18 @@ public class ExportController {
} }
@PostMapping("/exportPerformance") @PostMapping("/exportPerformance")
public Result exportPerformance(@Valid @RequestBody PerformanceDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) {
String lockKey = "export:lock:" + dto.getToken();
public Result exportPerformance(@Valid @RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
String lockKey = "export:lock:" + page.getPerformanceDTO().getToken();
String requestId = UUID.randomUUID().toString(); String requestId = UUID.randomUUID().toString();
long expireTime = 5000; long expireTime = 5000;
dto.setLang(lang);// 设置语言参数
page.getPerformanceDTO().setLang(lang);// 设置语言参数
// 解析语言代码 // 解析语言代码
String languageCode = parseLanguageCode(lang); String languageCode = parseLanguageCode(lang);
// 如果非中文环境将查询条件中的翻译文本转换为中文简体 // 如果非中文环境将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
convertPerformanceTranslatedFieldsToChinese(dto.getPerformanceVO(), languageCode);
convertPerformanceTranslatedFieldsToChinese(page.getPerformanceDTO().getPerformanceVO(), languageCode);
} }
try { try {
@ -393,7 +390,7 @@ public class ExportController {
throw new BusinessException(errorMsg); throw new BusinessException(errorMsg);
} }
// 执行业务逻辑 // 执行业务逻辑
return exportService.addExportPerformance(dto);
return exportService.addExportPerformance(page.getPerformanceDTO());
} finally { } finally {
// 释放锁 // 释放锁
redisLockUtil.unlock(lockKey, requestId); redisLockUtil.unlock(lockKey, requestId);
@ -597,10 +594,10 @@ public class ExportController {
} }
// 转换会员类型 // 转换会员类型
if (beanConsumeFan.getType() != null && !beanConsumeFan.getType().isEmpty()) {
if (beanConsumeFan.getTypeDesc() != null && !beanConsumeFan.getTypeDesc().isEmpty()) {
String chineseType = translationService.findChineseSimplifiedByTranslation( String chineseType = translationService.findChineseSimplifiedByTranslation(
beanConsumeFan.getType(), languageCode);
beanConsumeFan.setType(chineseType);
beanConsumeFan.getTypeDesc(), languageCode);
beanConsumeFan.setTypeDesc(chineseType);
} }
} }
} }

33
src/main/java/com/example/demo/controller/coin/PermissionController.java

@ -227,9 +227,10 @@ public class PermissionController {
private void translatePermissions(com.github.pagehelper.PageInfo<com.example.demo.domain.vo.coin.Permission> pageInfo, String lang) { private void translatePermissions(com.github.pagehelper.PageInfo<com.example.demo.domain.vo.coin.Permission> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) { if (pageInfo != null && pageInfo.getList() != null) {
for (com.example.demo.domain.vo.coin.Permission permission : pageInfo.getList()) { for (com.example.demo.domain.vo.coin.Permission permission : pageInfo.getList()) {
// 翻译市场名称
// 翻译市场名称支持多个市场
if (permission.getMarket() != null) { if (permission.getMarket() != null) {
permission.setMarket(languageTranslationUtil.translate(permission.getMarket(), lang));
String translatedMarket = translateMultipleMarkets(permission.getMarket(), lang);
permission.setMarket(translatedMarket);
} }
// 翻译职位 // 翻译职位
if (permission.getPostiton() != null) { if (permission.getPostiton() != null) {
@ -244,6 +245,34 @@ public class PermissionController {
} }
/** /**
* 翻译多个市场名称
*/
private String translateMultipleMarkets(String marketStr, String lang) {
if (marketStr == null || marketStr.trim().isEmpty()) {
return marketStr;
}
// 按逗号分割市场名称
String[] markets = marketStr.split(",");
StringBuilder translatedMarkets = new StringBuilder();
for (int i = 0; i < markets.length; i++) {
String market = markets[i].trim();
if (!market.isEmpty()) {
// 对每个市场名称进行翻译
String translatedMarket = languageTranslationUtil.translate(market, lang);
translatedMarkets.append(translatedMarket);
// 如果不是最后一个元素添加逗号
if (i < markets.length - 1) {
translatedMarkets.append(",");
}
}
}
return translatedMarkets.toString();
}
/**
* 转换职位名称为指定语言 * 转换职位名称为指定语言
*/ */
private void translatePositions(List<String> positions, String lang) { private void translatePositions(List<String> positions, String lang) {

6
src/main/java/com/example/demo/controller/coin/WorkbenchController.java

@ -90,9 +90,9 @@ public class WorkbenchController {
String languageCode = parseLanguageCode(lang); String languageCode = parseLanguageCode(lang);
// 如果不是中文环境将查询条件中的翻译文本转换为中文简体 // 如果不是中文环境将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
convertTranslatedFieldsToChinese(workbench, languageCode);
}
// if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
// convertTranslatedFieldsToChinese(workbench, languageCode);
//}
String account = admin.getAccount(); String account = admin.getAccount();
List<String> markets = workbenchService.getAdminMarket(account); List<String> markets = workbenchService.getAdminMarket(account);

1
src/main/java/com/example/demo/domain/entity/Admin.java

@ -27,6 +27,7 @@ public class Admin implements UserDetails, Serializable {
private Byte adminStatus; // 状态启用/不启用 private Byte adminStatus; // 状态启用/不启用
private List<String> market; // 地区列表 private List<String> market; // 地区列表
private String markets; // 地区 private String markets; // 地区
private String marketName; // 地区名称
private String roleKey; private String roleKey;
private String postiton; // 职位 private String postiton; // 职位
private String remark; // 备注 private String remark; // 备注

8
src/main/java/com/example/demo/domain/entity/CashRecord.java

@ -37,13 +37,15 @@ public class CashRecord implements Serializable {
private String goodsName; // 商品名称 private String goodsName; // 商品名称
private Integer goodNum; // 产品数量 private Integer goodNum; // 产品数量
private String numUnit; // 数量单位 // private String numUnit; // 数量单位 //
private Integer permanentGold; // 永久金币数量
private Integer freeGold; // 免费金币数量
private String payload; //平台
private Integer permanentGold; // 永久金币数量
private Integer freeGold; // 免费金币数量
private String payload; //平台
// 金额信息 // 金额信息
private String paymentCurrency; // 付款币种 private String paymentCurrency; // 付款币种
private BigDecimal paymentAmount; // 付款金额 private BigDecimal paymentAmount; // 付款金额
private String paymentCurrencyOrig; // 原始付款币种
private BigDecimal paymentAmountOrig; // 原始付款金额
private String receivedCurrency; // 到账币种 private String receivedCurrency; // 到账币种
private BigDecimal receivedAmount; // 到账金额 private BigDecimal receivedAmount; // 到账金额
private BigDecimal handlingCharge; // 手续费 private BigDecimal handlingCharge; // 手续费

2
src/main/java/com/example/demo/domain/entity/User.java

@ -27,7 +27,7 @@ public class User implements Serializable {
private String name; // 客户姓名 private String name; // 客户姓名
private String market; // 所属地区 private String market; // 所属地区
@ExcelIgnore @ExcelIgnore
private String marketName; // 所属地区
private String marketName; // 所属地区
@ExcelIgnore @ExcelIgnore
private BigDecimal sumPermanentGold; // 历史永久金币 private BigDecimal sumPermanentGold; // 历史永久金币
@ExcelIgnore @ExcelIgnore

7
src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java

@ -1,8 +1,6 @@
package com.example.demo.domain.vo.bean; package com.example.demo.domain.vo.bean;
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.example.demo.config.MemberTypeStringConverter;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data; import lombok.Data;
@ -36,8 +34,9 @@ public class BeanConsumeFan implements Serializable {
private String freeBean; //免费金豆 private String freeBean; //免费金豆
private String buyBean; //付费金豆 private String buyBean; //付费金豆
private String channel; //频道名称source_name private String channel; //频道名称source_name
@ExcelProperty(value = "", converter = MemberTypeStringConverter.class)
private String type; //类型source_type 7单月8连续包月
@ExcelIgnore
private Integer type; //类型source_type 7单月8连续包月
private String typeDesc;
//@ExcelProperty("支付方式") //@ExcelProperty("支付方式")
@ExcelIgnore @ExcelIgnore
private Integer payType; //支付方式直播12345铁粉7文章8 private Integer payType; //支付方式直播12345铁粉7文章8

6
src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java

@ -4,7 +4,6 @@ import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.example.demo.config.MarketConverter; import com.example.demo.config.MarketConverter;
import com.example.demo.config.OrderStatusConverter; import com.example.demo.config.OrderStatusConverter;
import com.example.demo.config.RefundModelConverter;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -182,8 +181,9 @@ public class CashRecordDTO{
/** /**
* 退款方式0全额/1部分 * 退款方式0全额/1部分
*/ */
@ExcelProperty(value = "",converter = RefundModelConverter.class)
private Integer refundModel;
@ExcelIgnore
private Byte refundModel;
private String refundModelDesc; //退款方式转换
/** /**
* 退款执行人OA号 * 退款执行人OA号

6
src/main/java/com/example/demo/domain/vo/cash/FundsDTO.java

@ -67,4 +67,10 @@ public class FundsDTO {
private BigDecimal permanentGold; private BigDecimal permanentGold;
@ExcelIgnore @ExcelIgnore
private BigDecimal freeGold; private BigDecimal freeGold;
@ExcelIgnore
private String sortField;
@ExcelIgnore
private String sortOrder;
@ExcelIgnore
private List<String> localMarket;
} }

2
src/main/java/com/example/demo/domain/vo/cash/PerformanceVO.java

@ -33,7 +33,5 @@ public class PerformanceVO {
private String receivedCurrency; // 到账币种 private String receivedCurrency; // 到账币种
private BigDecimal receivedAmount; // 到账金额 private BigDecimal receivedAmount; // 到账金额
private BigDecimal handlingCharge; // 手续费 private BigDecimal handlingCharge; // 手续费
private String token;
private String lang;
} }

2
src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java

@ -76,7 +76,7 @@ public class ConsumeUser implements Serializable {
private List<String> markets; // 地区列表 private List<String> markets; // 地区列表
@ExcelIgnore @ExcelIgnore
private Integer flag; //是否为员工号 private Integer flag; //是否为员工号
private BigDecimal price; // 折扣金币
private BigDecimal price; // 原价
@ExcelIgnore @ExcelIgnore
private Integer redMoney; //是否用红包 private Integer redMoney; //是否用红包
@ExcelIgnore @ExcelIgnore

1
src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java

@ -68,6 +68,7 @@ public class GoldDetail implements Serializable {
@ExcelIgnore @ExcelIgnore
private String goodsName; private String goodsName;
private BigDecimal price; private BigDecimal price;
@ExcelIgnore
private String linkId; private String linkId;
} }

2
src/main/java/com/example/demo/domain/vo/coin/RefundUser.java

@ -45,7 +45,9 @@ public class RefundUser implements Serializable {
@ExcelIgnore @ExcelIgnore
private Integer adminId; //提交人Id private Integer adminId; //提交人Id
private String adminName; //提交人姓名 private String adminName; //提交人姓名
@ExcelIgnore
private BigDecimal price; //原价 private BigDecimal price; //原价
@ExcelIgnore
private String linkId; //LinkId private String linkId; //LinkId
@ExcelIgnore @ExcelIgnore

2
src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java

@ -25,6 +25,8 @@ import java.util.Set;
@Mapper @Mapper
public interface CashCollectionMapper { public interface CashCollectionMapper {
//ceshi //ceshi
// 检查用户是否存在
int checkUserExists(@Param("jwcode") Integer jwcode);
//根据jwcode获取所属地区 //根据jwcode获取所属地区
String getMarketByJwcode(@Param("jwcode") Integer jwcode); String getMarketByJwcode(@Param("jwcode") Integer jwcode);
//新增收款订单 //新增收款订单

2
src/main/java/com/example/demo/service/bean/BeanConsumeService.java

@ -39,4 +39,6 @@ public interface BeanConsumeService {
//筛选查询小黄车消费 //筛选查询小黄车消费
Object selectCartBy(Integer pageNum, Integer pageSize, BeanConsumeCartDTO beanConsumeCartDTO); Object selectCartBy(Integer pageNum, Integer pageSize, BeanConsumeCartDTO beanConsumeCartDTO);
//根据角色id获取角色频道
Object getRoleChannel(Integer roleId);
} }

4
src/main/java/com/example/demo/service/cash/CashCollectionService.java

@ -4,9 +4,9 @@ import com.example.demo.domain.DTO.PerformanceDTO;
import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity; import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.PerformanceVO; import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.Result;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import java.util.List; import java.util.List;
@ -34,7 +34,7 @@ public interface CashCollectionService {
//补全手续费等 //补全手续费等
String complete(CashRecord cashRecord); String complete(CashRecord cashRecord);
//根据精网号获取姓名和地区 //根据精网号获取姓名和地区
User getNameAndMarket(Integer jwcode);
Result getNameAndMarket(Integer jwcode,String lang);
//获取活动列表 //获取活动列表
List<RechargeActivity> getActivityList(); List<RechargeActivity> getActivityList();
//同步g_order订单到cash_record表 //同步g_order订单到cash_record表

2
src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java

@ -382,7 +382,7 @@ public class RedServiceImpl implements RedService {
userGoldRecord.setTaskGold(-consumeUser.getTaskGold().intValue()); userGoldRecord.setTaskGold(-consumeUser.getTaskGold().intValue());
userGoldRecord.setRemark(consumeUser.getRemark()); userGoldRecord.setRemark(consumeUser.getRemark());
userGoldRecord.setType((byte) 1); userGoldRecord.setType((byte) 1);
userGoldRecord.setIsRefund((byte) 0);
userGoldRecord.setIsRefund((byte) 1);
userGoldRecord.setPayPlatform("金币系统"); userGoldRecord.setPayPlatform("金币系统");
userGoldRecord.setAdminId(consumeUser.getAdminId()); userGoldRecord.setAdminId(consumeUser.getAdminId());
userGoldRecord.setAuditStatus(1); userGoldRecord.setAuditStatus(1);

6
src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java

@ -209,6 +209,12 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
return new PageInfo<>(beanConsumeCarts); return new PageInfo<>(beanConsumeCarts);
} }
//根据角色id获取角色频道
@Override
public Object getRoleChannel(Integer roleId) {
return roleMapper.getChannel(roleId);
}
@Override @Override
public BeanConsumeGold sumConsumeGold(Page page) { public BeanConsumeGold sumConsumeGold(Page page) {
BeanConsumeGold gold = new BeanConsumeGold(); BeanConsumeGold gold = new BeanConsumeGold();

86
src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java

@ -10,6 +10,7 @@ import com.example.demo.domain.vo.cash.CashCollectionMessage;
import com.example.demo.domain.vo.cash.PerformanceVO; import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.GoldUser; import com.example.demo.domain.vo.coin.GoldUser;
import com.example.demo.domain.vo.coin.Messages; import com.example.demo.domain.vo.coin.Messages;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.cash.CashCollectionMapper; import com.example.demo.mapper.cash.CashCollectionMapper;
import com.example.demo.mapper.coin.MarketMapper; import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.UserMapper; import com.example.demo.mapper.coin.UserMapper;
@ -32,6 +33,7 @@ import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -351,6 +353,11 @@ public class CashCollectionServiceImpl implements CashCollectionService {
public String complete(CashRecord cashRecord) { public String complete(CashRecord cashRecord) {
if (!Objects.equals(cashRecord.getPaymentCurrency(), cashRecord.getReceivedCurrency())
&& ("Stripe".equals(cashRecord.getPayType()) || "Paypal".equals(cashRecord.getPayType()))) {
return "支付币种与收款币种不一致";
}
int rows = cashCollectionMapper.complete(cashRecord); int rows = cashCollectionMapper.complete(cashRecord);
String goodsName = cashCollectionMapper.selectGoodsNameByCode(cashRecord.getOrderCode()); String goodsName = cashCollectionMapper.selectGoodsNameByCode(cashRecord.getOrderCode());
if (goodsName .equals("金币充值")) { if (goodsName .equals("金币充值")) {
@ -363,34 +370,63 @@ public class CashCollectionServiceImpl implements CashCollectionService {
} }
//根据精网号查询姓名和地区 //根据精网号查询姓名和地区
@Override
public User getNameAndMarket(Integer jwcode) {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
if (admin != null) {
List<String> list = Arrays.asList(admin.getMarkets().split(","));
List<String> markets = marketMapper.getMarketIds(list);
if (markets.contains("9") || markets.contains("9999")) {
markets = null;
}
GoldUser gUser = userMapper.selectUserCard(jwcode.toString(), markets);
if (gUser != null) {
User user = new User();
user.setMarket(cashCollectionMapper.getMarketByJwcode(jwcode));
user.setName(cashCollectionMapper.getNameByJwcode(jwcode));
user.setMarketName(cashCollectionMapper.getMarketNameByJwcode(jwcode));
return user;
@Override
public Result getNameAndMarket(Integer jwcode,@RequestHeader(defaultValue = "zh_CN") String lang) {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
if (admin != null) {
List<String> list = Arrays.asList(admin.getMarkets().split(","));
List<String> markets = marketMapper.getMarketIds(list);
// 检查用户是否存在
int userCount = cashCollectionMapper.checkUserExists(jwcode);
if (userCount == 0) {
String message = languageTranslationUtil.translate("精网号有误!请检查", lang);
return Result.error(message);
}
if (markets.contains("9") || markets.contains("9999")) {
// 有特殊权限可访问所有用户
User user = new User();
user.setMarket(cashCollectionMapper.getMarketByJwcode(jwcode));
user.setName(cashCollectionMapper.getNameByJwcode(jwcode));
user.setMarketName(cashCollectionMapper.getMarketNameByJwcode(jwcode));
return Result.success(user);
} else {
// 检查用户所在市场是否在管理员权限范围内
String userMarket = cashCollectionMapper.getMarketByJwcode(jwcode);
if (userMarket != null && markets.contains(userMarket)) {
// 有权限访问返回用户信息
User user = new User();
user.setMarket(userMarket);
user.setName(cashCollectionMapper.getNameByJwcode(jwcode));
user.setMarketName(cashCollectionMapper.getMarketNameByJwcode(jwcode));
return Result.success(user);
} else {
// 无权限返回用户所属地区
String userMarketName = cashCollectionMapper.getMarketNameByJwcode(jwcode);
String translatedMarketName = languageTranslationUtil.translate(userMarketName, lang);
String message = languageTranslationUtil.translate("无权限访问", lang);
return Result.errorWithData(message, java.util.Map.of("market", translatedMarketName));
}
}
} else {
// admin null即权限验证失败
String userMarketName = cashCollectionMapper.getMarketNameByJwcode(jwcode);
String translatedMarketName = languageTranslationUtil.translate(userMarketName, lang);
String message = languageTranslationUtil.translate("无权限访问", lang);
return Result.errorWithData(message, java.util.Map.of("market", translatedMarketName));
} }
} catch (Exception e) {
e.printStackTrace();
String errorMessage = languageTranslationUtil.translate("精网号有误!请检查", lang);
return Result.error(errorMessage);
} }
} catch (Exception e) {
e.printStackTrace();
} }
// 如果没有返回有效用户信息则抛出异常
throw new RuntimeException("无法获取用户信息");
}
//获取收款活动列表 //获取收款活动列表
@Override @Override

68
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -419,12 +419,12 @@ public class ExportExcelServiceImpl implements ExportExcelService {
try { try {
JsonNode rootNode = objectMapper.readTree(message); JsonNode rootNode = objectMapper.readTree(message);
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode beanRechargeNode = requestDataNode.path("performanceDTO");
PerformanceDTO performanceDTO = objectMapper.treeToValue(beanRechargeNode, PerformanceDTO.class);
JsonNode performanceDTONode = requestDataNode.path("performanceDTO");
PerformanceDTO performanceDTO = objectMapper.treeToValue(performanceDTONode, PerformanceDTO.class);
page.setPerformanceDTO(performanceDTO); page.setPerformanceDTO(performanceDTO);
// 从请求数据中获取语言设置如果没有则使用默认值
// 从请求数据中获取语言设置
String lang = "zh_CN"; String lang = "zh_CN";
JsonNode langNode = requestDataNode.path("lang");
JsonNode langNode = rootNode.path("lang");
if (langNode != null && !langNode.asText().isEmpty()) { if (langNode != null && !langNode.asText().isEmpty()) {
lang = langNode.asText(); lang = langNode.asText();
} }
@ -852,6 +852,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 添加铁粉用户翻译支持 // 添加铁粉用户翻译支持
if ("fanUser".equals(exportType) && list.get(0) instanceof BeanConsumeFan) { if ("fanUser".equals(exportType) && list.get(0) instanceof BeanConsumeFan) {
fillUserMemberStatusDescriptions((List<BeanConsumeFan>) list);
translateBeanConsumeFanList((List<BeanConsumeFan>) list, lang); translateBeanConsumeFanList((List<BeanConsumeFan>) list, lang);
} }
@ -874,6 +875,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 添加财务退款翻译支持 // 添加财务退款翻译支持
if ("financeUser".equals(exportType) && list.get(0) instanceof CashRecordDTO) { if ("financeUser".equals(exportType) && list.get(0) instanceof CashRecordDTO) {
fillRechargeUserIsRefund((List<CashRecordDTO>) list);
translateCashRecordDTOList((List<CashRecordDTO>) list, lang); translateCashRecordDTOList((List<CashRecordDTO>) list, lang);
} }
@ -1047,7 +1049,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
case "cashUser": case "cashUser":
return CashCollection.class; return CashCollection.class;
case "performanceUser": case "performanceUser":
return PerformanceDTO.class;
return PerformanceVO.class;
case "fundUser": case "fundUser":
return FundsDTO.class; return FundsDTO.class;
default: default:
@ -1056,6 +1058,31 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
/** /**
* 填充用户会员的状态描述
*/
private void fillUserMemberStatusDescriptions(List<BeanConsumeFan> fans) {
if (fans != null && !fans.isEmpty()) {
for (BeanConsumeFan fan : fans) {
if (fan.getType() != null) {
fan.setTypeDesc(fanTypeToString(fan.getType()));
}
}
}
}
/**
* 将会员类型数字转换为中文描述
*/
private String fanTypeToString(Integer type) {
if (type == null) return "";
switch (type) {
case 7: return "单次付费";
case 8: return "连续包月";
default: return "其他";
}
}
/**
* 填充用户数据的状态描述 * 填充用户数据的状态描述
*/ */
private void fillUserStatusDescriptions(List<FundsDTO> funds) { private void fillUserStatusDescriptions(List<FundsDTO> funds) {
@ -1067,6 +1094,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
} }
} }
/** /**
* 将类型数字转换为中文描述 * 将类型数字转换为中文描述
*/ */
@ -1106,6 +1134,20 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
/** /**
* 填充财务退款用户数据的退款方式描述
*/
private void fillRechargeUserIsRefund(List<CashRecordDTO> cashRecords) {
if (cashRecords != null && !cashRecords.isEmpty()) {
for (CashRecordDTO cashRecord : cashRecords) {
if (cashRecord.getRefundModel() != null) {
String modelDesc = convertRefundModelToString(cashRecord.getRefundModel());
cashRecord.setRefundModelDesc(modelDesc);
}
}
}
}
/**
* 填充退款用户数据的退款方式描述 * 填充退款用户数据的退款方式描述
*/ */
private void fillRefundUserModelDescriptions(List<RefundUser> refundUsers) { private void fillRefundUserModelDescriptions(List<RefundUser> refundUsers) {
@ -1179,7 +1221,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
private String convertIsRefundToString(Integer isRefund) { private String convertIsRefundToString(Integer isRefund) {
if (isRefund == null) return ""; if (isRefund == null) return "";
switch (isRefund) { switch (isRefund) {
case 0: return "未退款";
case 0: return "正常";
case 1: return "已退款"; case 1: return "已退款";
default: return "未知状态"; default: return "未知状态";
} }
@ -1224,6 +1266,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
} }
} }
/** /**
* 将充值平台数字转换为中文描述 * 将充值平台数字转换为中文描述
*/ */
@ -1257,8 +1300,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
if (type == null) return ""; if (type == null) return "";
switch (type) { switch (type) {
case 9, 10: return "打赏"; case 9, 10: return "打赏";
case 11: return "付费";
default: return "未知";
case 11: return "付费购买";
default: return "其他";
} }
} }
// 各种实体类的翻译方法 // 各种实体类的翻译方法
@ -1448,8 +1491,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
// 翻译会员类型 // 翻译会员类型
if (item.getType() != null && !item.getType().isEmpty()) {
item.setType(languageTranslationUtil.translate(item.getType(), lang));
if (item.getTypeDesc() != null && !item.getTypeDesc().isEmpty()) {
item.setTypeDesc(languageTranslationUtil.translate(item.getTypeDesc(), lang));
} }
} }
} }
@ -1555,6 +1598,11 @@ public class ExportExcelServiceImpl implements ExportExcelService {
if (item.getRefundRemark() != null && !item.getRefundRemark().isEmpty()) { if (item.getRefundRemark() != null && !item.getRefundRemark().isEmpty()) {
item.setRefundRemark(languageTranslationUtil.translate(item.getRefundRemark(), lang)); item.setRefundRemark(languageTranslationUtil.translate(item.getRefundRemark(), lang));
} }
// 翻译退款方式
if (item.getRefundModelDesc() != null && !item.getRefundModelDesc().isEmpty()) {
item.setRefundModelDesc(languageTranslationUtil.translate(item.getRefundModelDesc(), lang));
}
} }
} }

14
src/main/resources/cashMapper/CashCollectionMapper.xml

@ -72,6 +72,10 @@
<if test="cashRecordCollection.paymentAmount != 0"> <if test="cashRecordCollection.paymentAmount != 0">
payment_amount = #{cashRecordCollection.paymentAmount}, payment_amount = #{cashRecordCollection.paymentAmount},
</if> </if>
payment_currency_orig = #{cashRecordCollection.paymentCurrencyOrig},
<if test="cashRecordCollection.paymentAmountOrig != 0">
payment_amount_orig = #{cashRecordCollection.paymentAmountOrig},
</if>
<!-- 只有 这些字段全部非空才更新状态 --> <!-- 只有 这些字段全部非空才更新状态 -->
status = CASE status = CASE
WHEN WHEN
@ -105,6 +109,12 @@
set is_synced = 1 set is_synced = 1
where id = #{orderId} where id = #{orderId}
</update> </update>
<!-- 检查用户是否存在 -->
<select id="checkUserExists" resultType="int">
SELECT COUNT(*)
FROM user
WHERE jwcode = #{jwcode}
</select>
<!--根据jwcode获取所属地区--> <!--根据jwcode获取所属地区-->
<select id="getMarketByJwcode" resultType="java.lang.String"> <select id="getMarketByJwcode" resultType="java.lang.String">
select market from user where jwcode=#{jwcode} select market from user where jwcode=#{jwcode}
@ -209,7 +219,7 @@
ORDER BY ${cashCollection.sortField} ${cashCollection.sortOrder} ORDER BY ${cashCollection.sortField} ${cashCollection.sortOrder}
</when> </when>
<otherwise> <otherwise>
ORDER BY create_time DESC
ORDER BY pay_time DESC
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
@ -324,7 +334,7 @@
<!-- adminMarket筛选:如果adminMarket列表不为空且不包含研发部或总部,则筛选market表中的name等于adminMarket列表中的内容 --> <!-- adminMarket筛选:如果adminMarket列表不为空且不包含研发部或总部,则筛选market表中的name等于adminMarket列表中的内容 -->
<if test="adminMarket != null and adminMarket.size() > 0"> <if test="adminMarket != null and adminMarket.size() > 0">
<choose> <choose>
<when test="adminMarket.contains('研发部') or adminMarket.contains('总部')">
<when test="adminMarket.contains('研发部'.toString()) or adminMarket.contains('总部'.toString())">
<!-- 如果包含研发部或总部,则不筛选 --> <!-- 如果包含研发部或总部,则不筛选 -->
</when> </when>
<otherwise> <otherwise>

27
src/main/resources/cashMapper/CashRefundMapper.xml

@ -172,6 +172,9 @@
crc.pay_time, crc.pay_time,
crc.voucher, crc.voucher,
crc.remark, crc.remark,
crr.refund_reason,
crr.refund_remark,
crr.reject_reason,
crc.payment_currency, crc.payment_currency,
crc.payment_amount crc.payment_amount
from cash_record_refund crr from cash_record_refund crr
@ -224,7 +227,7 @@
ORDER BY ${sortField} ${sortOrder} ORDER BY ${sortField} ${sortOrder}
</when> </when>
<otherwise> <otherwise>
ORDER BY crr.create_time DESC
ORDER BY crr.update_time DESC
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
@ -247,6 +250,7 @@
crr.free_gold, crr.free_gold,
crr.audit_id, crr.audit_id,
crr.related_id, crr.related_id,
crr.reject_reason,
la.area_servise, la.area_servise,
la.area_finance, la.area_finance,
la.area_charge, la.area_charge,
@ -304,7 +308,7 @@
ORDER BY ${sortField} ${sortOrder} ORDER BY ${sortField} ${sortOrder}
</when> </when>
<otherwise> <otherwise>
ORDER BY crr.create_time DESC
ORDER BY crr.update_time DESC
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
@ -333,10 +337,13 @@
crr.refund_voucher, crr.refund_voucher,
crr.refund_time, crr.refund_time,
crr.executor, crr.executor,
crr.permanent_gold,
crr.free_gold,
crr.status, crr.status,
crr.audit_id, crr.audit_id,
crr.submitter_id, crr.submitter_id,
crr.related_id, crr.related_id,
crr.refund_reason,
la.area_servise, la.area_servise,
la.area_finance, la.area_finance,
la.area_charge, la.area_charge,
@ -441,11 +448,17 @@
and crc.jwcode = #{jwcode} and crc.jwcode = #{jwcode}
</if> </if>
<if test="markets!= null and markets.size > 0"> <if test="markets!= null and markets.size > 0">
AND crc.market IN
AND crc.received_market IN
<foreach collection="markets" item="markets" open="(" separator="," close=")"> <foreach collection="markets" item="markets" open="(" separator="," close=")">
#{markets} #{markets}
</foreach> </foreach>
</if> </if>
<if test="localMarket != null and localMarket.size > 0">
AND crc.market IN
<foreach collection="localMarket" item="localMarket" open="(" separator="," close=")">
#{localMarket}
</foreach>
</if>
<if test="startTime != null and endTime != null"> <if test="startTime != null and endTime != null">
and crc.`pay_time` BETWEEN #{startTime} AND #{endTime} and crc.`pay_time` BETWEEN #{startTime} AND #{endTime}
</if> </if>
@ -462,6 +475,14 @@
</foreach> </foreach>
</if> </if>
</where> </where>
<choose>
<when test="sortField != null and sortField.length > 0 or sortOrder != null and sortOrder.length > 0">
ORDER BY ${sortField} ${sortOrder}
</when>
<otherwise>
ORDER BY crc.create_time DESC
</otherwise>
</choose>
</select> </select>
<select id="selectRefundCount" resultType="com.example.demo.domain.vo.cash.FundsDTO"> <select id="selectRefundCount" resultType="com.example.demo.domain.vo.cash.FundsDTO">
select crr.refund_currency, select crr.refund_currency,

2
src/main/resources/mapper/AdminMapper.xml

@ -11,6 +11,7 @@
machine_id as machineId, machine_id as machineId,
admin_status as adminStatus, admin_status as adminStatus,
market as markets, market as markets,
market as marketName,
postiton as postiton, postiton as postiton,
remark as remark, remark as remark,
create_time as createTime, create_time as createTime,
@ -27,6 +28,7 @@
machine_id as machineId, machine_id as machineId,
admin_status as adminStatus, admin_status as adminStatus,
market as markets, market as markets,
market as marketName,
postiton as postiton, postiton as postiton,
remark as remark, remark as remark,
create_time as createTime, create_time as createTime,

14
src/main/resources/mapper/AuditMapper.xml

@ -160,8 +160,18 @@
</foreach> </foreach>
) )
</if> </if>
<if test="refundAudit.startTime != null and refundAudit.endTime != null ">
AND ugr.audit_time between #{refundAudit.startTime} and #{refundAudit.endTime}
<if test="refundAudit.startTime != null and refundAudit.endTime != null">
<choose>
<when test="refundAudit.auditStatus == 1 or refundAudit.auditStatus == 2">
AND ugr.audit_time between #{refundAudit.startTime} and #{refundAudit.endTime}
</when>
<when test="refundAudit.auditStatus == 0 or refundAudit.auditStatus == 4">
AND ugr.create_time between #{refundAudit.startTime} and #{refundAudit.endTime}
</when>
<otherwise>
<!-- 如果auditStatus不是这些值,则不添加时间条件 -->
</otherwise>
</choose>
</if> </if>
<if test="refundAudit.market != null and refundAudit.market != ''"> <if test="refundAudit.market != null and refundAudit.market != ''">
AND m.id = #{refundAudit.market} AND m.id = #{refundAudit.market}

3
src/main/resources/mapper/ConsumeMapper.xml

@ -87,7 +87,8 @@
ugr.remark AS remark, ugr.remark AS remark,
a.admin_name AS adminName, a.admin_name AS adminName,
ugr.create_time AS createTime, ugr.create_time AS createTime,
ugr.is_refund AS isRefund
ugr.is_refund AS isRefund,
COALESCE( ugr.price,0)/100 AS price
FROM user_gold_record ugr FROM user_gold_record ugr
left JOIN left JOIN
user u ON u.jwcode = ugr.jwcode user u ON u.jwcode = ugr.jwcode

4
src/main/resources/mapper/GoldDetailMapper.xml

@ -30,7 +30,9 @@
`ugr`.type, `ugr`.type,
`ugr`.is_refund, `ugr`.is_refund,
`ugr`.order_code, `ugr`.order_code,
`ugr`.goods_name,`ugr`.price,`ugr`.link_id,
`ugr`.goods_name,
ROUND(`ugr`.price/100.0, 2) AS price,
`ugr`.link_id,
Round((`ugr`.free_june + `ugr`.free_december) / 100.0, 2) AS freeGold, Round((`ugr`.free_june + `ugr`.free_december) / 100.0, 2) AS freeGold,
ROUND(`ugr`.sum_gold / 100.0, 2) AS SumGold, ROUND(`ugr`.sum_gold / 100.0, 2) AS SumGold,
ROUND(`ugr`.permanent_gold / 100.0, 2) AS PermanentGold, ROUND(`ugr`.permanent_gold / 100.0, 2) AS PermanentGold,

2
src/main/resources/mapper/WorkBenchMapper.xml

@ -185,7 +185,7 @@
WHERE cr.received_currency IN (2,3,4,5,6,7,8) -- 只统计这7种币 WHERE cr.received_currency IN (2,3,4,5,6,7,8) -- 只统计这7种币
AND m.name IN AND m.name IN
<foreach item="market" collection="markets" open="(" separator="," close=")">#{market}</foreach> <foreach item="market" collection="markets" open="(" separator="," close=")">#{market}</foreach>
AND cr.audit_time BETWEEN #{startDate} AND #{endDate}
AND cr.received_time BETWEEN #{startDate} AND #{endDate}
AND cr.order_type=1 AND cr.order_type=1
AND cr.status IN (0,1,3,4,6) AND cr.status IN (0,1,3,4,6)
GROUP BY m.name; GROUP BY m.name;

Loading…
Cancel
Save