Browse Source

Merge remote-tracking branch 'origin/milestone-20260113-现金管理0109' into milestone-20260113-现金管理0109

milestone-20260113-现金管理0109
sunjiabei 4 weeks ago
parent
commit
e23c41616d
  1. 3
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  2. 25
      src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java
  3. 5
      src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
  4. 62
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  5. 54
      src/main/java/com/example/demo/controller/cash/CashRefundController.java
  6. 12
      src/main/java/com/example/demo/controller/coin/AdminController.java
  7. 28
      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. 31
      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. 7
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  21. 2
      src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
  22. 2
      src/main/java/com/example/demo/service/bean/BeanConsumeService.java
  23. 4
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  24. 1
      src/main/java/com/example/demo/service/cash/RefundService.java
  25. 2
      src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java
  26. 6
      src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
  27. 94
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  28. 87
      src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
  29. 176
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  30. 38
      src/main/resources/cashMapper/CashCollectionMapper.xml
  31. 33
      src/main/resources/cashMapper/CashRefundMapper.xml
  32. 2
      src/main/resources/mapper/AdminMapper.xml
  33. 14
      src/main/resources/mapper/AuditMapper.xml
  34. 13
      src/main/resources/mapper/ConsumeMapper.xml
  35. 4
      src/main/resources/mapper/GoldDetailMapper.xml
  36. 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());
} }

25
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"
); );
} }
@ -294,15 +292,17 @@ public class ExcelHeaderTranslator {
headers.put("goodsName", "产品名称"); headers.put("goodsName", "产品名称");
headers.put("goodsNum", "产品数量"); headers.put("goodsNum", "产品数量");
headers.put("numUnit", "产品单位"); headers.put("numUnit", "产品单位");
headers.put("permanentGold", "永久金币数量");
headers.put("freeGold", "免费金币数量");
headers.put("Submitter", "提交人"); headers.put("Submitter", "提交人");
headers.put("id", "序号"); headers.put("id", "序号");
headers.put("jwcode", "精网号"); headers.put("jwcode", "精网号");
headers.put("name", "姓名"); headers.put("name", "姓名");
headers.put("market", "所属地区");
headers.put("status", "订单状态");
headers.put("marketName", "所属地区");
headers.put("statusDesc", "订单状态");
headers.put("remark", "备注"); headers.put("remark", "备注");
headers.put("refundReason", "退款理由"); headers.put("refundReason", "退款理由");
headers.put("refundModel", "退款方式");
headers.put("refundModelDesc", "退款方式");
// 如果需要翻译则翻译表头 // 如果需要翻译则翻译表头
if (!isChineseLanguage(lang)) { if (!isChineseLanguage(lang)) {
@ -317,8 +317,8 @@ 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",
"status", "remark", "refundReason", "refundModel"
"goodsName", "goodsNum", "numUnit", "permanentGold", "freeGold", "Submitter", "id", "jwcode", "name", "marketName",
"statusDesc", "remark", "refundReason", "refundModelDesc"
); );
} }
@ -411,7 +411,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 +428,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 +493,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 +509,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){

62
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);
} }
} }
@ -340,6 +351,10 @@ public class CashCollectionController {
if (collection.getPaymentCurrency() != null) { if (collection.getPaymentCurrency() != null) {
collection.setPaymentCurrency(languageTranslationUtil.translate(collection.getPaymentCurrency(), lang)); collection.setPaymentCurrency(languageTranslationUtil.translate(collection.getPaymentCurrency(), lang));
} }
// 翻译数量单位
if (collection.getNumUnit() != null) {
collection.setNumUnit(languageTranslationUtil.translate(collection.getNumUnit(), lang));
}
} }
} }
@ -418,6 +433,20 @@ 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);
}
// 转换数量单位
if (cashCollection.getNumUnit() != null && !cashCollection.getNumUnit().isEmpty()) {
String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
cashCollection.getNumUnit(), languageCode);
cashCollection.setNumUnit(chineseNumUnit);
}
} }
} }
@ -481,6 +510,27 @@ 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);
}
// 转换数量单位
if (cashCollection.getNumUnit() != null && !cashCollection.getNumUnit().isEmpty()) {
String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
cashCollection.getNumUnit(), languageCode);
cashCollection.setNumUnit(chineseNumUnit);
}
} }
} }

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

@ -381,7 +381,7 @@ public class CashRefundController {
return Result.error(errorMsg); return Result.error(errorMsg);
} }
Result result = Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
Result result = Result.success(refundService.financeSelect2(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
// 对返回结果进行多语言转换 // 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) { if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) {
@ -543,6 +543,19 @@ 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));
}
// 翻译商品单位
if (dto.getNumUnit() != null) {
dto.setNumUnit(languageTranslationUtil.translate(dto.getNumUnit(), lang));
}
// 翻译退款币种
if (dto.getRefundCurrency() != null) {
dto.setRefundCurrency(languageTranslationUtil.translate(dto.getRefundCurrency(), lang));
}
} }
} }
} }
@ -635,6 +648,20 @@ public class CashRefundController {
cashRecordDTO.getPaymentCurrency(), languageCode); cashRecordDTO.getPaymentCurrency(), languageCode);
cashRecordDTO.setPaymentCurrency(chineseCurrency); cashRecordDTO.setPaymentCurrency(chineseCurrency);
} }
// 转换商品单位
if (cashRecordDTO.getNumUnit() != null && !cashRecordDTO.getNumUnit().isEmpty()) {
String chineseNumUnit = translationService.findChineseSimplifiedByTranslation(
cashRecordDTO.getNumUnit(), languageCode);
cashRecordDTO.setNumUnit(chineseNumUnit);
}
// 转换退款币种
if (cashRecordDTO.getRefundCurrency() != null && !cashRecordDTO.getRefundCurrency().isEmpty()) {
String chineseCurrency = translationService.findChineseSimplifiedByTranslation(
cashRecordDTO.getRefundCurrency(), languageCode);
cashRecordDTO.setRefundCurrency(chineseCurrency);
}
} }
} }
@ -670,6 +697,20 @@ public class CashRefundController {
cashRecordRefund.getRefundCurrency(), languageCode); cashRecordRefund.getRefundCurrency(), languageCode);
cashRecordRefund.setRefundCurrency(chineseCurrency); cashRecordRefund.setRefundCurrency(chineseCurrency);
} }
// 转换所属地区
if (cashRecordRefund.getMarketName() != null && !cashRecordRefund.getMarketName().isEmpty()) {
String chineseMarket = translationService.findChineseSimplifiedByTranslation(
cashRecordRefund.getMarketName(), languageCode);
cashRecordRefund.setMarketName(chineseMarket);
}
// 转换提交人地区
if (cashRecordRefund.getSubmitterMarket() != null && !cashRecordRefund.getSubmitterMarket().isEmpty()) {
String chineseMarket = translationService.findChineseSimplifiedByTranslation(
cashRecordRefund.getSubmitterMarket(), languageCode);
cashRecordRefund.setSubmitterMarket(chineseMarket);
}
} }
} }
@ -726,4 +767,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")

28
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);
} }
} }
} }
@ -784,6 +781,13 @@ public class ExportController {
cashCollection.getRejectReason(), languageCode); cashCollection.getRejectReason(), languageCode);
cashCollection.setRejectReason(chineseRejectReason); cashCollection.setRejectReason(chineseRejectReason);
} }
// 转换提交人地区
if (cashCollection.getSubmitterMarket() != null && !cashCollection.getSubmitterMarket().isEmpty()) {
String chineseMarket = translationService.findChineseSimplifiedByTranslation(
cashCollection.getSubmitterMarket(), languageCode);
cashCollection.setSubmitterMarket(chineseMarket);
}
} }
} }

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

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

@ -1,10 +1,6 @@
package com.example.demo.domain.vo.cash; package com.example.demo.domain.vo.cash;
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.example.demo.config.MarketConverter;
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;
@ -32,6 +28,8 @@ public class CashRecordDTO{
private String goodsName;// 商品名称 private String goodsName;// 商品名称
private Integer goodsNum;// 商品数量 private Integer goodsNum;// 商品数量
private String numUnit;// 商品单位 private String numUnit;// 商品单位
private BigDecimal permanentGold;//永久金币
private BigDecimal freeGold;// 免费金币
@ExcelIgnore @ExcelIgnore
private BigDecimal gold;//永久金币 private BigDecimal gold;//永久金币
@ExcelIgnore @ExcelIgnore
@ -97,8 +95,9 @@ public class CashRecordDTO{
/** /**
* 所属地区 * 所属地区
*/ */
@ExcelProperty(value = "",converter = MarketConverter.class)
@ExcelIgnore
private Integer market; private Integer market;
private String marketName;
/** /**
* 金币订单号 * 金币订单号
@ -113,18 +112,6 @@ public class CashRecordDTO{
private String bankCode; private String bankCode;
/** /**
* 永久金币
*/
@ExcelIgnore
private BigDecimal permanentGold;
/**
* 免费金币
*/
@ExcelIgnore
private BigDecimal freeGold;
/**
* 审核人id * 审核人id
*/ */
@ExcelIgnore @ExcelIgnore
@ -142,8 +129,9 @@ public class CashRecordDTO{
30总部财务待审核32总部财务驳回 30总部财务待审核32总部财务驳回
40执行人待处理41执行人已处理退款结束 40执行人待处理41执行人已处理退款结束
*/ */
@ExcelProperty(value="",converter = OrderStatusConverter.class)
@ExcelIgnore
private Integer status; private Integer status;
private String statusDesc;
/** /**
* 提交人id * 提交人id
@ -182,8 +170,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号
@ -267,8 +256,6 @@ public class CashRecordDTO{
@ExcelIgnore @ExcelIgnore
private String executorName; private String executorName;
@ExcelIgnore @ExcelIgnore
private String marketName;
@ExcelIgnore
private List<Integer> statuses; private List<Integer> statuses;
@ExcelIgnore @ExcelIgnore
private String processInstanceId; // 流程实例ID private String processInstanceId; // 流程实例ID

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

7
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);
//新增收款订单 //新增收款订单
@ -86,5 +88,8 @@ public interface CashCollectionMapper {
List<String> selectStripeList(); List<String> selectStripeList();
List<String> selectStripe2List(); List<String> selectStripe2List();
List<String> selectPaymentList(); List<String> selectPaymentList();
//补全手续费后修改金币订单
void updateGoldOrder(@Param("cashRecordCollection")CashRecord cashRecord);
//根据订单号查询商品名称
String selectGoodsNameByCode(String orderCode);
} }

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

@ -42,4 +42,6 @@ public interface CashRefundMapper {
List<FundsDTO> selectfunds(FundsDTO fundsDTO); List<FundsDTO> selectfunds(FundsDTO fundsDTO);
List<FundsDTO> selectRefundCount(List<Integer> needQueryIds); List<FundsDTO> selectRefundCount(List<Integer> needQueryIds);
void updategold(String orderCode);
} }

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表

1
src/main/java/com/example/demo/service/cash/RefundService.java

@ -32,6 +32,7 @@ public interface RefundService {
int finalreview(CashRecordDone cashRecordDone, String lang); int finalreview(CashRecordDone cashRecordDone, String lang);
PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
PageInfo<CashRecordDTO> financeSelect2(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
//新增线上退款记录 //新增线上退款记录

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();

94
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;
@ -239,6 +241,8 @@ public class CashCollectionServiceImpl implements CashCollectionService {
if (cashRecord.getGoodsName().equals("金币充值")) { if (cashRecord.getGoodsName().equals("金币充值")) {
if (cashRecord.getPermanentGold() == 0 && cashRecord.getFreeGold() == 0) { if (cashRecord.getPermanentGold() == 0 && cashRecord.getFreeGold() == 0) {
throw new IllegalArgumentException("金币数量不能为空"); throw new IllegalArgumentException("金币数量不能为空");
}if (cashRecord.getPermanentGold() == 0){
throw new IllegalArgumentException("永久金币数量不能为空");
} }
} }
@ -349,40 +353,80 @@ 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());
if (goodsName .equals("金币充值")) {
cashRecord.setOrderCode(cashRecord.getOrderCode().replace("XJ_", "XJCZ_"));
//修改金币订单
cashCollectionMapper.updateGoldOrder(cashRecord);
}
return rows > 0 ? "编辑成功" : "编辑失败"; return rows > 0 ? "编辑成功" : "编辑失败";
} }
//根据精网号查询姓名和地区 //根据精网号查询姓名和地区
@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

87
src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java

@ -354,14 +354,25 @@ CashRecordDone cashRecordDone1 = new CashRecordDone();
cashRefundMapper.updateStatus(cashRecordDone1); cashRefundMapper.updateStatus(cashRecordDone1);
}} }}
if (cashRecordDone.getGoodsName() != null &&cashRecordDone.getStatus() ==40 && if (cashRecordDone.getGoodsName() != null &&cashRecordDone.getStatus() ==40 &&
(cashRecordDone.getGoodsName().equals("金币充值") ||
cashRecordDone.getGoodsName().contains("金币充值"))) {
(cashRecordDone.getGoodsName().equals(languageTranslationUtil.translate("金币充值", lang))||
cashRecordDone.getGoodsName().contains(languageTranslationUtil.translate("金币充值", lang)))) {
UserGoldRecord userGoldRecord = new UserGoldRecord(); UserGoldRecord userGoldRecord = new UserGoldRecord();
userGoldRecord.setOrderCode(cashRecordDone.getOrderCode()); userGoldRecord.setOrderCode(cashRecordDone.getOrderCode());
String orderCode = cashRecordDone.getOrderCode();
if (orderCode != null && orderCode.length() > 2 && orderCode.startsWith("TK")) {
orderCode = orderCode.substring(2);
}
userGoldRecord.setType((byte) 2); userGoldRecord.setType((byte) 2);
userGoldRecord.setIsRefund((byte) 1); userGoldRecord.setIsRefund((byte) 1);
userGoldRecord.setRefundType("金币退款"); userGoldRecord.setRefundType("金币退款");
userGoldRecord.setCrefundModel(cashRecordDone.getRefundModel());
if (cashRecordDone.getRefundModel() == 1){
userGoldRecord.setRefundModel(Byte.valueOf("1"));
}
else if (cashRecordDone.getRefundModel() == 0){
userGoldRecord.setRefundModel(Byte.valueOf("0"));
}
userGoldRecord.setJwcode(cashRecordDone.getJwcode()); userGoldRecord.setJwcode(cashRecordDone.getJwcode());
userGoldRecord.setSumGold(cashRecordDone.getPermanentGold()+cashRecordDone.getFreeGold()); userGoldRecord.setSumGold(cashRecordDone.getPermanentGold()+cashRecordDone.getFreeGold());
userGoldRecord.setPermanentGold(cashRecordDone.getPermanentGold()); userGoldRecord.setPermanentGold(cashRecordDone.getPermanentGold());
@ -375,7 +386,7 @@ CashRecordDone cashRecordDone1 = new CashRecordDone();
userGoldRecord.setFreeJune(cashRecordDone.getFreeGold()); userGoldRecord.setFreeJune(cashRecordDone.getFreeGold());
userGoldRecord.setFreeDecember(0); userGoldRecord.setFreeDecember(0);
} }
userGoldRecord.setGoodsName(cashRecordDone.getGoodsName());
userGoldRecord.setGoodsName("金币充值");
userGoldRecord.setPayPlatform("金币系统"); userGoldRecord.setPayPlatform("金币系统");
userGoldRecord.setRemark(cashRecordDone.getRemark()); userGoldRecord.setRemark(cashRecordDone.getRemark());
userGoldRecord.setAdminId(cashRecordDone.getAdminId()); userGoldRecord.setAdminId(cashRecordDone.getAdminId());
@ -385,6 +396,7 @@ CashRecordDone cashRecordDone1 = new CashRecordDone();
userGoldRecord.setUpdateTime(new Date()); userGoldRecord.setUpdateTime(new Date());
String auditName = auditMapper.getName(cashRecordDone.getAuditId()); String auditName = auditMapper.getName(cashRecordDone.getAuditId());
refundMapper.add(userGoldRecord); refundMapper.add(userGoldRecord);
cashRefundMapper.updategold(orderCode);
User user = new User(); User user = new User();
user.setJwcode(userGoldRecord.getJwcode()); user.setJwcode(userGoldRecord.getJwcode());
user.setCurrentPermanentGold(BigDecimal.valueOf(-userGoldRecord.getPermanentGold())); //当前永久金币 user.setCurrentPermanentGold(BigDecimal.valueOf(-userGoldRecord.getPermanentGold())); //当前永久金币
@ -484,6 +496,73 @@ CashRecordDone cashRecordDone1 = new CashRecordDone();
} }
@Override @Override
public PageInfo<CashRecordDTO> financeSelect2(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
// System.out.println(goldDetail.getMarkets());
List<CashRecordDTO> list = cashRefundMapper.financeSelect(cashRecordDTO);
if (list.isEmpty()) {
return new PageInfo<>(list);
}
// 批量收集ID
Set<Integer> relatedIds = new HashSet<>();
Set<Integer> marketIds = new HashSet<>();
Set<Integer> submitterIds = new HashSet<>();
Set<Integer> auditIds = new HashSet<>();
Set<Integer> executorIds = new HashSet<>();
list.forEach(item -> {
if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId());
if (item.getMarket() != null) marketIds.add(item.getMarket());
if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId());
if (item.getAuditId() != null) auditIds.add(item.getAuditId());
if (item.getExecutor() != null) executorIds.add(item.getExecutor());
});
// 批量查询
Map<Integer, CashCollection> cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
.stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
Map<Integer, String> marketNameMap = marketMapper.getMarketByIds(marketIds)
.stream().collect(Collectors.toMap(Market::getId, Market::getName));
Map<Integer, String> submitterNameMap = auditMapper.getNamesByIds(submitterIds)
.stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
Map<Integer, LhlAudit> auditMap = cashRefundMapper.getAuditBatch(auditIds)
.stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity()));
Map<String, String> executorNameMap = auditMapper.getNamesByJwcodes(executorIds)
.stream().collect(Collectors.toMap(Admin::getAccount, Admin::getAdminName));
// 处理数据
list.forEach(item -> {
CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId());
if (cashCollection != null) {
processCashCollection(item, cashCollection);
}
String marketName = marketNameMap.get(item.getMarket());
String submitter = submitterNameMap.get(item.getSubmitterId());
LhlAudit lhlAudit = auditMap.get(item.getAuditId());
String executorName = executorNameMap.get(String.valueOf(item.getExecutor()));
item.setMarketName(marketName != null ? marketName : "");
item.setSubmitter(submitter != null ? submitter : "");
item.setExecutorName(executorName != null ? executorName : "");
if (lhlAudit != null) {
item.setAreaServise(lhlAudit.getAreaServise());
item.setAreaFinance(lhlAudit.getAreaFinance());
item.setAreaCharge(lhlAudit.getAreaCharge());
item.setHeadFinance(lhlAudit.getHeadFinance());
}
});
return new PageInfo<>(list);
}
@Override
public PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { public PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
// System.out.println(goldDetail.getMarkets()); // System.out.println(goldDetail.getMarkets());

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

@ -29,7 +29,9 @@ import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.*; import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.coin.ExportMapper; import com.example.demo.mapper.coin.ExportMapper;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.service.coin.ExportExcelService; import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.service.coin.MarketService;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -43,6 +45,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
@ -88,6 +91,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
private static final int PAGE_SIZE = 5000; private static final int PAGE_SIZE = 5000;
@Autowired @Autowired
private ExportMapper exportMapper; private ExportMapper exportMapper;
@Autowired
private MarketService marketService;
@Transactional @Transactional
@Override @Override
@ -352,8 +357,36 @@ public class ExportExcelServiceImpl implements ExportExcelService {
JsonNode rootNode = objectMapper.readTree(message); JsonNode rootNode = objectMapper.readTree(message);
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode beanRechargeNode = requestDataNode.path("cashRecordDTO"); JsonNode beanRechargeNode = requestDataNode.path("cashRecordDTO");
String token = rootNode.path("token").asText();
CashRecordDTO cashRecordDTO = objectMapper.treeToValue(beanRechargeNode, CashRecordDTO.class); CashRecordDTO cashRecordDTO = objectMapper.treeToValue(beanRechargeNode, CashRecordDTO.class);
page.setCashRecordDTO(cashRecordDTO); page.setCashRecordDTO(cashRecordDTO);
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
List<String> markets = marketService.getMarketIds(userMarkets);
// 获取传入的市场列表
List<String> requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null;
// 权限校验逻辑
if (markets.contains("9") || markets.contains("9999")) {
// 特权市场9 9999跳过权限校验直接放行传入的 markets
// 如果业务需要也可以在这里做空值处理
if (page.getCashRecordDTO() != null) {
// 保持 requestedMarkets 不变原样接受
// 可选如果 requestedMarkets null可设为默认值或保持 null
}
} else {
// 普通用户必须校验权限
if (requestedMarkets == null || requestedMarkets.isEmpty()) {
page.getCashRecordDTO().setMarkets(markets);
}
if (!markets.containsAll(requestedMarkets)) {
String errorMsg = "无权限!请求的市场不在授权范围内。";
return Result.error(errorMsg);
}
// 校验通过保持 requestedMarkets 不变
}
// 从请求数据中获取语言设置如果没有则使用默认值 // 从请求数据中获取语言设置如果没有则使用默认值
String lang = "zh_CN"; String lang = "zh_CN";
JsonNode langNode = requestDataNode.path("lang"); JsonNode langNode = requestDataNode.path("lang");
@ -397,8 +430,36 @@ public class ExportExcelServiceImpl implements ExportExcelService {
JsonNode rootNode = objectMapper.readTree(message); JsonNode rootNode = objectMapper.readTree(message);
JsonNode requestDataNode = rootNode.path("requestData"); JsonNode requestDataNode = rootNode.path("requestData");
JsonNode beanRechargeNode = requestDataNode.path("fundsDTO"); JsonNode beanRechargeNode = requestDataNode.path("fundsDTO");
String token = rootNode.path("token").asText();
FundsDTO fundsDTO = objectMapper.treeToValue(beanRechargeNode, FundsDTO.class); FundsDTO fundsDTO = objectMapper.treeToValue(beanRechargeNode, FundsDTO.class);
page.setFundsDTO(fundsDTO); page.setFundsDTO(fundsDTO);
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
List<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
List<String> markets = marketService.getMarketIds(userMarkets);
// 获取传入的市场列表
List<String> requestedMarkets = page.getFundsDTO() != null ? page.getFundsDTO().getMarkets() : null;
// 权限校验逻辑
if (markets.contains("9") || markets.contains("9999")) {
// 特权市场9 9999跳过权限校验直接放行传入的 markets
// 如果业务需要也可以在这里做空值处理
if (page.getFundsDTO() != null) {
// 保持 requestedMarkets 不变原样接受
// 可选如果 requestedMarkets null可设为默认值或保持 null
}
} else {
// 普通用户必须校验权限
if (requestedMarkets == null || requestedMarkets.isEmpty()) {
page.getFundsDTO().setMarkets(markets);
}
if (!markets.containsAll(requestedMarkets)) {
String errorMsg = "无权限!请求的市场不在授权范围内。";
return Result.error(errorMsg);
}
// 校验通过保持 requestedMarkets 不变
}
// 从请求数据中获取语言设置如果没有则使用默认值 // 从请求数据中获取语言设置如果没有则使用默认值
String lang = "zh_CN"; String lang = "zh_CN";
JsonNode langNode = requestDataNode.path("lang"); JsonNode langNode = requestDataNode.path("lang");
@ -419,12 +480,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 +913,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 +936,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);
} }
@ -893,7 +956,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
// 添加资金流水翻译支持 // 添加资金流水翻译支持
if ("fundsUser".equals(exportType) && list.get(0) instanceof FundsDTO) {
if ("fundUser".equals(exportType) && list.get(0) instanceof FundsDTO) {
fillUserStatusDescriptions((List<FundsDTO>) list); fillUserStatusDescriptions((List<FundsDTO>) list);
translateFundsList((List<FundsDTO>) list, lang); translateFundsList((List<FundsDTO>) list, lang);
} }
@ -1047,7 +1110,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 +1119,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 +1155,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
} }
} }
/** /**
* 将类型数字转换为中文描述 * 将类型数字转换为中文描述
*/ */
@ -1106,6 +1195,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 +1282,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 +1327,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
} }
} }
} }
/** /**
* 将充值平台数字转换为中文描述 * 将充值平台数字转换为中文描述
*/ */
@ -1257,10 +1361,38 @@ 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 "其他";
} }
} }
/**
* 根据状态值获取状态描述
*/
private String getStatusDescription(Integer status) {
if (status == null) return "";
switch (status) {
case 0: return "线下财务待审核";
case 1: return "线下财务审核通过待填手续费";
case 2: return "线下财务审核驳回";
case 3: return "link线上财务复核待填手续费";
case 4: return "收款流程全部结束";
case 5: return "手动撤回待编辑提交";
case 6: return "退款";
case 10: return "地区财务待审核";
case 11: return "地区财务手动撤回待编辑提交";
case 12: return "地区财务驳回";
case 20: return "地区负责人待审核";
case 22: return "地区负责人驳回";
case 30: return "总部财务待审核";
case 32: return "总部财务驳回";
case 40: return "执行人待处理";
case 41: return "执行人已处理,退款结束";
default: return "未知状态(" + status + ")";
}
}
// 各种实体类的翻译方法 // 各种实体类的翻译方法
/** /**
@ -1448,8 +1580,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 +1687,28 @@ 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));
}
// 翻译所属地区名称
if (item.getMarketName() != null && !item.getMarketName().isEmpty()) {
item.setMarketName(languageTranslationUtil.translate(item.getMarketName(), lang));
}
// 翻译订单状态首先获取状态的中文描述然后进行多语言翻译
if (item.getStatus() != null) {
String statusDesc = getStatusDescription(item.getStatus());
String translatedStatus = languageTranslationUtil.translate(statusDesc, lang);
item.setStatusDesc(translatedStatus);
}
// 翻译商品单位
if (item.getNumUnit() != null && !item.getNumUnit().isEmpty()) {
item.setNumUnit(languageTranslationUtil.translate(item.getNumUnit(), lang));
}
} }
} }

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

@ -9,12 +9,12 @@
cash_record_collection(order_type,jwcode,name,market,activity, cash_record_collection(order_type,jwcode,name,market,activity,
order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold, order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,received_market, payment_currency,payment_amount,received_market,
pay_type,pay_time,status,submitter_id,submitter_market,payload,
pay_type,pay_time,status,submitter_id,submitter_market,payload,audit_time,
voucher,remark) voucher,remark)
values(#{orderType},#{jwcode},#{name},#{market},#{activity}, values(#{orderType},#{jwcode},#{name},#{market},#{activity},
#{orderCode},#{bankCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency}, #{orderCode},#{bankCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{paymentAmount},#{receivedMarket},#{payType},#{payTime}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime},
#{status},#{submitterId},#{submitterMarket},#{payload},#{voucher},#{remark})
#{status},#{submitterId},#{submitterMarket},#{payload},#{auditTime},#{voucher},#{remark})
</insert> </insert>
<!-- <insert id="syncToCashRecord"> <!-- <insert id="syncToCashRecord">
insert into cash_record(order_type,jwcode,name,market,activity, insert into cash_record(order_type,jwcode,name,market,activity,
@ -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
@ -88,12 +92,29 @@
WHERE order_code = #{cashRecordCollection.orderCode} WHERE order_code = #{cashRecordCollection.orderCode}
AND status IN (1, 3) AND status IN (1, 3)
</update> </update>
<!--提交手续费时修改金币订单-->
<update id="updateGoldOrder">
UPDATE user_gold_record
<set>
rate_id=#{cashRecordCollection.paymentCurrency},
<if test="cashRecordCollection.paymentAmount != 0">
money = #{cashRecordCollection.paymentAmount}
</if>
</set>
WHERE order_code = #{cashRecordCollection.orderCode}
</update>
<!--设置gOrder订单为已同步--> <!--设置gOrder订单为已同步-->
<update id="markSynced"> <update id="markSynced">
update g_order update g_order
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}
@ -198,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>
@ -230,8 +251,8 @@
success_time,ios_environment,ios_transaction_id,ios_receipt_data,firstdata_ipgTransactionId, success_time,ios_environment,ios_transaction_id,ios_receipt_data,firstdata_ipgTransactionId,
add_time,is_synced add_time,is_synced
from g_order from g_order
where is_synced=0 and state=1 and pay_style in(3,5,6,7,9)
and success_time>=1763136000
where is_synced=0 and state=1 and pay_style in(3,5,6,7,9,10,15)
and success_time>=1767196800
limit #{size} limit #{size}
</select> </select>
<select id="selectById" resultType="com.example.demo.domain.vo.cash.CashCollection"> <select id="selectById" resultType="com.example.demo.domain.vo.cash.CashCollection">
@ -313,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>
@ -364,6 +385,10 @@
<select id="selectIpayList" resultType="com.example.demo.domain.vo.cash.CashCollection"> <select id="selectIpayList" resultType="com.example.demo.domain.vo.cash.CashCollection">
select order_code,permanent_gold from cash_record_collection where payload='Ipay88' and order_no_status=1 select order_code,permanent_gold from cash_record_collection where payload='Ipay88' and order_no_status=1
</select> </select>
<!--根据订单号获取商品名称-->
<select id="selectGoodsNameByCode" resultType="java.lang.String">
select goods_name from cash_record_collection where order_code=#{orderCode}
</select>
<!--根据OrderCode订单号更新收款订单--> <!--根据OrderCode订单号更新收款订单-->
<update id="updateByGoldCoinOrderCodeByPayment"> <update id="updateByGoldCoinOrderCodeByPayment">
update cash_record_collection update cash_record_collection
@ -430,4 +455,5 @@
order_no_status=0 order_no_status=0
where order_code=#{orderNo} where order_code=#{orderNo}
</update> </update>
</mapper> </mapper>

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

@ -138,7 +138,11 @@
</set> </set>
where id = #{auditId} where id = #{auditId}
</update> </update>
<update id="updategold">
update user_gold_record
set is_refund = 1
where order_code = #{orderCode}
</update>
<select id="select" resultType="com.example.demo.domain.vo.cash.CashRecordDTO"> <select id="select" resultType="com.example.demo.domain.vo.cash.CashRecordDTO">
select select
@ -172,6 +176,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 +231,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 +254,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 +312,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 +341,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 +452,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 +479,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}

13
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
@ -166,11 +167,10 @@
<select id="selectRefund" resultType="com.example.demo.domain.vo.coin.ConsumeUser"> <select id="selectRefund" resultType="com.example.demo.domain.vo.coin.ConsumeUser">
SELECT SELECT
order_code, order_code,
sum_gold,
permanent_gold,
free_june,
free_december,
task_gold,
COALESCE(sum_gold, 0)/100 as sumGold,
COALESCE(permanent_gold, 0)/100 as permanentGold,
(COALESCE(free_june, 0) + COALESCE(free_december, 0))/100 as freeGold,
COALESCE(task_gold, 0)/100 as taskGold,
refund_model refund_model
FROM user_gold_record FROM user_gold_record
@ -183,6 +183,7 @@
</foreach> </foreach>
</if> </if>
AND type = 2 AND type = 2
AND audit_status = 1
AND flag = 1 AND flag = 1
</select> </select>
<!-- 查询筛选后消费记录 --> <!-- 查询筛选后消费记录 -->

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