Browse Source

Merge remote-tracking branch 'origin/milestone-20251104-现金管理二期' into milestone-20251104-现金管理二期

# Conflicts:
#	src/main/java/com/example/demo/serviceImpl/cash/CashAuditServiceImpl.java
#	src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
#	src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
sunjiabei/feature-20251021102635-银行接口
wangguorui 2 weeks ago
parent
commit
69e4ae3d92
  1. 4
      src/main/java/com/example/demo/Export/ExportService.java
  2. 44
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  3. 9
      src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java
  4. 21
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  5. 82
      src/main/java/com/example/demo/controller/cash/CashRefundController.java
  6. 38
      src/main/java/com/example/demo/controller/coin/ExportController.java
  7. 17
      src/main/java/com/example/demo/controller/coin/RoleController.java
  8. 39
      src/main/java/com/example/demo/domain/DTO/CashDTO.java
  9. 36
      src/main/java/com/example/demo/domain/DTO/FinanceDTO.java
  10. 2
      src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
  11. 245
      src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
  12. 10
      src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java
  13. 24
      src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java
  14. 13
      src/main/java/com/example/demo/domain/vo/coin/IdName.java
  15. 1
      src/main/java/com/example/demo/domain/vo/coin/RoleVo.java
  16. 3
      src/main/java/com/example/demo/mapper/cash/CashAuditMapper.java
  17. 8
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  18. 14
      src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
  19. 5
      src/main/java/com/example/demo/mapper/coin/AuditMapper.java
  20. 5
      src/main/java/com/example/demo/mapper/coin/MarketMapper.java
  21. 2
      src/main/java/com/example/demo/mapper/live/LiveMapper.java
  22. 2
      src/main/java/com/example/demo/security/SecurityConfig.java
  23. 4
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  24. 4
      src/main/java/com/example/demo/service/cash/RefundService.java
  25. 4
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  26. 2
      src/main/java/com/example/demo/service/coin/RoleService.java
  27. 36
      src/main/java/com/example/demo/service/listen/CashListener.java
  28. 36
      src/main/java/com/example/demo/service/listen/FinanceListener.java
  29. 6
      src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java
  30. 48
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  31. 16
      src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java
  32. 4
      src/main/resources/cashMapper/CashAuditMapper.xml
  33. 123
      src/main/resources/cashMapper/CashCollectionMapper.xml
  34. 141
      src/main/resources/cashMapper/CashRefundMapper.xml
  35. 7
      src/main/resources/liveMapper/LiveMapper.xml
  36. 76
      src/main/resources/mapper/AuditMapper.xml
  37. 14
      src/main/resources/mapper/MarketMapper.xml
  38. 16
      src/main/resources/mapper/RoleMapper.xml

4
src/main/java/com/example/demo/Export/ExportService.java

@ -28,4 +28,8 @@ public interface ExportService {
Result addExportBean(BeanRechargeDTO dto);
Result addExportOnline(OnlineDTO dto);
//现金负责人退款导出
Result addExportFinance(FinanceDTO dto);
Result addExportCash(CashDTO dto);
}

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

@ -124,6 +124,16 @@ public class ExportServiceImpl implements ExportService {
articleDTO.setUrl("");
articleDTO.setFileName(generateFileName("文章明细", adminName));
articleDTO.setDataNum(0);
} else if(dto instanceof FinanceDTO financeDTO){
financeDTO.setAccount(Integer.valueOf(account));
financeDTO.setUrl("");
financeDTO.setFileName(generateFileName("现金退款明细", adminName));
financeDTO.setDataNum(0);
} else if(dto instanceof CashDTO cashDTO){
cashDTO.setAccount(Integer.valueOf(account));
cashDTO.setUrl("");
cashDTO.setFileName(generateFileName("现金收款明细", adminName));
cashDTO.setDataNum(0);
}
}
@ -211,6 +221,26 @@ public class ExportServiceImpl implements ExportService {
onlineDTO.getFileName(),
onlineDTO.getDataNum()
);
}else if (dto instanceof FinanceDTO financeDTO){
goldDetailMapper.insertExportRecord(
idHolder,
account,
financeDTO.getType(),
financeDTO.getState(),
financeDTO.getUrl(),
financeDTO.getFileName(),
financeDTO.getDataNum()
);
}else if (dto instanceof CashDTO cashDTO){
goldDetailMapper.insertExportRecord(
idHolder,
account,
cashDTO.getType(),
cashDTO.getState(),
cashDTO.getUrl(),
cashDTO.getFileName(),
cashDTO.getDataNum()
);
}
}
@ -239,6 +269,10 @@ public class ExportServiceImpl implements ExportService {
requestData.put(requestDataKey, beanRechargeDTO.getBeanSystemRechargeInfo());
} else if (dto instanceof OnlineDTO onlineDTO){
requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo());
}else if(dto instanceof FinanceDTO financeDTO){
requestData.put(requestDataKey, financeDTO.getCashRecordDTO());
}else if (dto instanceof CashDTO cashDTO){
requestData.put(requestDataKey, cashDTO.getCashCollection());
}
exportData.put("requestData", requestData);
@ -294,4 +328,14 @@ public class ExportServiceImpl implements ExportService {
public Result addExportOnline(OnlineDTO dto) {
return addExport(dto, "在线明细", "online:queue:export_queue", "beanOnlineRechargeInfo");
}
@Override
public Result addExportFinance(FinanceDTO dto) {
return addExport(dto, "现金退款明细", "finance:queue:export_queue", "cashRecordDTO");
}
@Override
public Result addExportCash(CashDTO dto) {
return addExport(dto, "现金收款明细", "cash:queue:export_queue", "cashCollection");
}
}

9
src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java

@ -26,6 +26,7 @@ import java.time.LocalDateTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Date;
@Service
@ -64,7 +65,7 @@ public class MysqlServiceImpl implements MysqlService {
@Override
@Transactional(transactionManager = "mysqlTransactionManager") // 👈 保证插入和用户更新在一个事务
@Transactional(transactionManager = "mysqlTransactionManager",rollbackFor = Exception.class) // 👈 保证插入和用户更新在一个事务
public void getSqlserverData() throws Exception {
logger.info("开始从 SQL Server 同步数据到 MySQL");
@ -357,7 +358,7 @@ public class MysqlServiceImpl implements MysqlService {
if (validZeroTypes.contains(data.gtype)) {
stmt.setInt(13, 0);
stmt.setNull(20, 0);
stmt.setInt(20, 0);
stmt.setString(1, "ERPCZ_" + data.orderNumber);
} else if (validOneTypes.contains(data.gtype)) {
stmt.setInt(13, 1);
@ -415,8 +416,8 @@ public class MysqlServiceImpl implements MysqlService {
} else {
stmt.setInt(17, 1);
}
stmt.setTimestamp(18, data.cz_time);
Timestamp now = new Timestamp(System.currentTimeMillis());
stmt.setTimestamp(18, now);
stmt.setTimestamp(19, data.cz_time);
stmt.setString(21, data.uid);
}

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

@ -68,7 +68,7 @@ public class CashCollectionController {
}
//撤回未审核的收款订单
@PostMapping("/cancel")
public Result cancel(@RequestBody CashRecord cashRecord) {
public Result cancel(@RequestBody CashCollection cashRecord) {
try {
return Result.success( cashCollectionService.cancel(cashRecord.getOrderCode()));
@ -78,7 +78,7 @@ public class CashCollectionController {
}
//重新提交审核的收款订单
@PostMapping("/reSubmit")
public Result reSubmit(@RequestBody CashRecord cashRecord) {
public Result reSubmit(@RequestBody CashCollection cashRecord) {
try {
return Result.success(cashCollectionService.reSubmit(cashRecord));
}catch (Exception e){
@ -111,9 +111,24 @@ public class CashCollectionController {
return Result.error(e.getMessage());
}}
@PostMapping("/export")
public Result export(@RequestBody Page page) throws Exception {
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
}
return Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(),page.getCashCollection()));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
//补全手续费等
@PostMapping("/complete")
public Result complete(@RequestBody CashRecord cashRecord) {
public Result complete(@RequestBody CashCollection cashRecord) {
try {
return Result.success(cashCollectionService.complete(cashRecord));
}catch (Exception e){

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

@ -3,6 +3,7 @@ package com.example.demo.controller.cash;
import com.example.demo.Util.JWTUtil;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.CashRecordDone;
import com.example.demo.domain.vo.cash.CashRecordRefund;
import com.example.demo.domain.vo.coin.Page;
@ -44,6 +45,8 @@ public class CashRefundController {
private RefundService refundService;
@Autowired
MarketService marketService;
/**
* 当地财务负责人退款记录
*/
@ -67,20 +70,20 @@ public class CashRefundController {
}
// 获取传入的市场列表
List<String> requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null;
List<String> requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null;
// 权限校验逻辑
if (markets.contains("9") || markets.contains("9999")) {
// 特权市场9 9999跳过权限校验直接放行传入的 markets
// 如果业务需要也可以在这里做空值处理
if (page.getCashRecordDone() != null) {
if (page.getCashRecordDTO() != null) {
// 保持 requestedMarkets 不变原样接受
// 可选如果 requestedMarkets null可设为默认值或保持 null
}
} else {
// 普通用户必须校验权限
if (requestedMarkets == null || requestedMarkets.isEmpty()) {
page.getCashRecordDone().setMarkets(markets);
page.getCashRecordDTO().setMarkets(markets);
}
if (!markets.containsAll(requestedMarkets)) {
return Result.error("无权限!请求的市场不在授权范围内。");
@ -102,6 +105,50 @@ public class CashRefundController {
}
}
/**
* 执行人查看退款现金记录
*/
@PostMapping("/exSelect")
public Result executor(@RequestBody Page page) throws Exception {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
// 解析 token 获取用户信息
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);
// 校验分页参数
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
}
// 获取传入的市场列表
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)) {
return Result.error("无权限!请求的市场不在授权范围内。");
}
// 校验通过保持 requestedMarkets 不变
}
return Result.success(refundService.exSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
}
/**
* 查询客服提交现金记录
*/
@PostMapping("/selecta")
@ -161,4 +208,33 @@ public class CashRefundController {
}
}
/**
* 新增线上退款订单
*/
@PostMapping("/addOnline")
public Result addOnline(@RequestBody CashRecordRefund cashRecordRefund){
try {
return Result.success(refundService.add(cashRecordRefund));
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
@PostMapping("/export")
public Result export(@RequestBody Page page) throws Exception {
// 校验分页参数
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
}
return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO()));
}
@PostMapping("/ceshi")
public Result ceshi() {
return Result.success("测试消息");
}
}

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

@ -6,6 +6,7 @@ import com.example.demo.Util.RedisLockUtil;
import com.example.demo.domain.DTO.*;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.Export;
import com.example.demo.domain.DTO.CashDTO;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.service.coin.GoldDetailService;
@ -195,4 +196,41 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId);
}
}
/**
* 负责人退款导出
*/
@PostMapping("/exportFinance")
public Result exportFinance(@Valid @RequestBody FinanceDTO dto) {
String lockKey = "export:lock:" + dto.getToken();
String requestId = UUID.randomUUID().toString();
long expireTime = 5000;
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
throw new BusinessException("操作太频繁,请稍后重试");
}
// 执行业务逻辑
return exportService.addExportFinance(dto);
} finally {
// 释放锁
redisLockUtil.unlock(lockKey, requestId);
}
}
@PostMapping("/exportCash")
public Result exportCash(@Valid @RequestBody CashDTO dto) {
String lockKey = "export:lock:" + dto.getToken();
String requestId = UUID.randomUUID().toString();
long expireTime = 5000;
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
throw new BusinessException("操作太频繁,请稍后重试");
}
// 执行业务逻辑
return exportService.addExportCash(dto);
}finally {
// 释放锁
redisLockUtil.unlock(lockKey, requestId);
}
}
}

17
src/main/java/com/example/demo/controller/coin/RoleController.java

@ -115,4 +115,21 @@ public class RoleController {
}
}
//查询所有直播渠道
@PostMapping("/getChannel")
public Result getChannel(){
return Result.success(roleService.getChannel());
}
@Log("获取频道列表")
@PostMapping("/selectChannel")
public Result selectChannel(@RequestBody RoleVo roleVo) {
Integer id = roleVo.getId();
List<RoleVo> list=roleService.selectSubRole(id);
return Result.success(list);
}
}

39
src/main/java/com/example/demo/domain/DTO/CashDTO.java

@ -0,0 +1,39 @@
package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo;
import com.example.demo.domain.vo.cash.CashCollection;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName CashDTO
* @description:
* @author: huangqizhen
* @create: 202511-09 09:26
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CashDTO {
private String token;
private String url = "";
private String fileName = "";
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 13; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;
private String deptid = "";
@NotNull(message = "page不能为空")
private Integer page = 1;
@NotNull(message = "pageSize不能为空")
private Integer pageSize = 20;
private CashCollection cashCollection;
}

36
src/main/java/com/example/demo/domain/DTO/FinanceDTO.java

@ -0,0 +1,36 @@
package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.cash.CashRecordDTO;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName FinanceDTO
* @description:
* @author: huangqizhen
* @create: 202511-06 21:22
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class FinanceDTO {
private String token;
private String url = "";
private String fileName = "";
private Integer sort = 0;
private String field = "";
private Integer account;
private Integer type = 12; //类型
private Integer state = 0; //状态
private String text = ""; //关键词搜索
private Integer dataNum = 0;
private String deptid = "";
private CashRecordDTO cashRecordDTO;
@NotNull(message = "page不能为空")
private Integer page = 1;
@NotNull(message = "pageSize不能为空")
private Integer pageSize = 5000;
}

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

@ -61,7 +61,7 @@ public class CashCollection implements Serializable {
private String remark; // 备注
private String receivedRemark; //到账备注
private String rejectReason; // 驳回理由
private String auditId; //审核人id
private Integer auditId; //审核人id
private String auditName; //审核人id
private Integer cashRoleId; //角色id(0客服1地区财务/负责人2总部)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

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

@ -1,9 +1,14 @@
package com.example.demo.domain.vo.cash;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
@ -16,24 +21,228 @@ import java.util.List;
**/
@Data
@AllArgsConstructor
public class CashRecordDTO extends CashRecordRefund{
private Integer activity;
private String goodsName;
private Integer goodsNum;
private String numUnit;
private BigDecimal gold;
private BigDecimal free;
private String paymentCurrency;
private BigDecimal paymentAmount;
private String receiveCurrency;
private BigDecimal receiveAmount;
private BigDecimal handlingCharges;
private String payType;
private String receivedMarket;
private String payVoucher;
private String payRemark;
private List<String> goodsNames;
private List<String> markets;
@NoArgsConstructor
public class CashRecordDTO{
private String activity;// 活动
private String goodsName;// 商品名称
private Integer goodsNum;// 商品数量
private String numUnit;// 商品单位
private BigDecimal gold;//永久金币
private BigDecimal free;//免费金币
private String paymentCurrency;// 支付币种
private BigDecimal paymentAmount;// 支付金额
private String receivedCurrency;// 收款币种
private BigDecimal receivedAmount;// 收款金额
private BigDecimal handlingCharge;// 手续费
private String payBankCode;// 付款银行
private String payType;// 支付方式
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private LocalDateTime payTime;// 付款时间
private String receivedMarket;// 收款地区
private String payVoucher;// 支付凭证
private String payRemark;// 支付备注
//提交人
private String paySubmitter;
//提交人
private String Submitter;
//审核人
private String audit;
//到账日期
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private LocalDateTime receivedTime;
@ExcelIgnore
private List<String> goodsNames;// 商品名称
@ExcelIgnore
private List<String> markets;// 地区
/**
* 序号
*/
private Integer id;
/**
* 精网号
*/
private Integer jwcode;
/**
* 姓名
*/
private String userName;
private String name;
/**
* 所属地区
*/
private Integer market;
/**
* 金币订单号
*/
private String orderCode;
/**
* 银行流水订单号
*/
private String bankCode;
/**
* 永久金币
*/
private BigDecimal permanentGold;
/**
* 免费金币
*/
private BigDecimal freeGold;
/**
* 审核人id
*/
@ExcelIgnore
private Integer auditId;
/**
* 订单状态1位代表收款2位代表退款
0线下财务待审核1线下财务审核通过待填手续费2线下财务审核驳回5手动撤回待编辑提交
3link线上财务复核待填手续费
4收款流程全部结束
6退款
---------------------------------------------
10地区财务待审核;11:地区财务手动撤回待编辑提交12地区财务驳回
20地区负责人待审核22地区负责人驳回
30总部财务待审核32总部财务驳回
40执行人待处理41执行人已处理退款结束
*/
private Integer status;
/**
* 提交人id
*/
@ExcelIgnore
private Integer submitterId;
/**
* 提交人地区
*/
private String submitterMarket;
/**
* 转账凭证
*/
private String voucher;
/**
* 备注
*/
private String remark;
/**
* 驳回理由
*/
private String rejectReason;
/**
* 退款备注理由,客服填写
*/
private String refundReason;
/**
* 退款方式0全额/1部分
*/
private Integer refundModel;
/**
* 退款执行人OA号
*/
private Integer executor;
/**
* 退款途径
*/
private String refundChannels;
/**
* 退款日期到天
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date refundTime;
/**
* 退款备注执行人填写
*/
private String refundRemark;
/**
* 退款截图
*/
private String refundVoucher;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime;
/**
* 审核时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime;
/**
* 退款币种
*/
private String refundCurrency;
/**
* 退款金额
*/
private String refundAmount;
/**
* 关联收款id
*/
@ExcelIgnore
private Integer relatedId;
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date startTime; // 开始时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 结束时间
private String submitterName;
private String auditName;
private String executorName;
private String marketName;
@ExcelIgnore
private List<Integer> statuses;
@ExcelIgnore
private String processInstanceId; // 流程实例ID
@ExcelIgnore
private String currentTaskId; // 当前任务ID
private String areaServise;
private String areaFinance;
private String areaCharge;
private String headFinance;
@ExcelIgnore
private String sortField;
@ExcelIgnore
private String sortOrder;
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date sTime; // 开始时间
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date eTime; // 结束时间
}

10
src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java

@ -17,7 +17,6 @@ import lombok.NoArgsConstructor;
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CashRecordRefund {
/**
* 序号
@ -32,6 +31,7 @@ public class CashRecordRefund {
/**
* 姓名
*/
private String userName;
private String name;
/**
@ -126,6 +126,7 @@ public class CashRecordRefund {
/**
* 退款日期到天
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date refundTime;
/**
@ -141,16 +142,19 @@ public class CashRecordRefund {
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime;
/**
* 审核时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime;
/**
@ -188,10 +192,12 @@ public class CashRecordRefund {
private String headFinance;
private String sortField;
private String sortOrder;
@ExcelIgnore
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date sTime; // 开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date eTime; // 结束时间
private Integer partRefundGold;
private Integer partRefundFree;
}

24
src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java

@ -0,0 +1,24 @@
package com.example.demo.domain.vo.cash;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName LhlAudit
* @description:
* @author: huangqizhen
* @create: 202511-05 16:45
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LhlAudit {
private Integer id;
private String areaServise;//
private String areaFinance;
private String areaCharge;
private String headFinace;
}

13
src/main/java/com/example/demo/domain/vo/coin/IdName.java

@ -0,0 +1,13 @@
package com.example.demo.domain.vo.coin;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IdName {
private Integer id;
private String name;
}

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

@ -34,6 +34,7 @@ public class RoleVo implements Serializable {
private String fatherMarket;//父级角色市场
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 创建时间
private String channel;//所属渠道
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime; // 更新时间

3
src/main/java/com/example/demo/mapper/cash/CashAuditMapper.java

@ -1,6 +1,7 @@
package com.example.demo.mapper.cash;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.vo.cash.CashCollection;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -15,7 +16,7 @@ import org.apache.ibatis.annotations.Param;
@Mapper
public interface CashAuditMapper {
//审核收款订单
void updateOrder (CashRecord updateOrder);
void updateOrder (CashCollection updateOrder);
//根据id获取审核人姓名
String getAuditName(Integer auditId);
}

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

@ -1,5 +1,6 @@
package com.example.demo.mapper.cash;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity;
@ -9,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
/**
* @program: gold-java
@ -32,7 +34,7 @@ public interface CashCollectionMapper {
@Param("status") Integer status);
//编辑订单
// 编辑订单状态=5后重新提交
int updateByOrderCode(@Param("cashRecord") CashRecord cashRecord);
int updateByOrderCode(@Param("cashRecordCollection") CashCollection cashRecord);
//多条件查询收款订单列表
List<CashCollection> selectCollection1(@Param("pageNum") Integer pageNum,
@Param("pageSize") Integer pageSize,
@ -41,7 +43,7 @@ public interface CashCollectionMapper {
//根据订单号查询待审核的现金收款订单
CashRecord selectAuditByOrderCode(@Param("orderCode") String orderCode);
//补全手续费等信息
int complete(@Param("cashRecord") CashRecord cashRecord);
int complete(@Param("cashRecordCollection") CashCollection cashRecord);
//根据精网号获取姓名
String getNameByJwcode(@Param("jwcode") Integer jwcode);
//根据精网号获取市场名
@ -54,4 +56,6 @@ public interface CashCollectionMapper {
int markSynced(@Param("orderId") Integer orderId);
//根据id查询收款订单
CashCollection selectById(Integer id);
List<CashCollection> selectBatchIds(Set<Integer> relatedIds);
}

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

@ -1,13 +1,12 @@
package com.example.demo.mapper.cash;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.CashRecordDone;
import com.example.demo.domain.vo.cash.CashRecordRefund;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.vo.cash.*;
import com.example.demo.domain.vo.coin.RefundUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Set;
/**
* @program: GOLD
@ -32,4 +31,9 @@ public interface CashRefundMapper {
void addAudit(CashRecordDone cashRecordDone);
void updateAudit(CashRecordDone cashRecordDone);
List<CashRecordDTO> financeSelect(CashRecordDTO cashRecordDTO);
}
//获取各阶段审核人
LhlAudit getAudit(Integer id);
List<CashRecordDTO> exSelect(CashRecordDTO cashRecordDTO);
List<LhlAudit> getAuditBatch(Set<Integer> auditIds);
}

5
src/main/java/com/example/demo/mapper/coin/AuditMapper.java

@ -1,5 +1,7 @@
package com.example.demo.mapper.coin;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.coin.RechargeAudit;
@ -9,6 +11,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Set;
/**
* @program: gold-java
@ -46,4 +49,6 @@ public interface AuditMapper {
String getName(Integer auditId);
//更新首充日期
void updateFirstRecharge(Integer jwcode);
List<Admin> getNamesByIds(Set<Integer> submitterIds);
}

5
src/main/java/com/example/demo/mapper/coin/MarketMapper.java

@ -1,8 +1,11 @@
package com.example.demo.mapper.coin;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.entity.Market;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
public interface MarketMapper {
List<Market> getMarket();
@ -14,4 +17,6 @@ public interface MarketMapper {
Market getMarketIdDao(String country);
Market getMarketIdBytype(String market);
String getMarketById(String market);
List<Market> getMarketByIds(@Param("marketIds") Set<Integer> marketIds);
}

2
src/main/java/com/example/demo/mapper/live/LiveMapper.java

@ -21,6 +21,8 @@ public interface LiveMapper {
List<BeanConsumeLive> selectLiveBy(@Param("beanConsumeLive") BeanConsumeLive beanConsumeLive);
//获取直播礼物列表
List<String> getLiveGift();
//获取频道列表
List<String> getChannel();
//获取直播频道列表
List<String> getLiveChannel();
//计算直播消费金豆合计数

2
src/main/java/com/example/demo/security/SecurityConfig.java

@ -60,7 +60,7 @@ public class SecurityConfig {
request
.requestMatchers( HttpMethod.POST,
// 用户不登录就可以访问的路径
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/statistics/**","/Mysql").permitAll()
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/statistics/**","/Mysql/**").permitAll()
.requestMatchers(
"/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**"
).permitAll()

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

@ -24,11 +24,11 @@ public interface CashCollectionService {
//撤回未审核的收款订单
String cancel(String orderCode);
//编辑并重新提交收款订单
String reSubmit(CashRecord cashRecord);
String reSubmit(CashCollection cashRecord);
//多条件查询收款订单列表
PageInfo<CashCollection> selectCollection(Integer pageNum, Integer pageSize, CashCollection cashCollection);
//补全手续费等
String complete(CashRecord cashRecord);
String complete(CashCollection cashRecord);
//根据精网号获取姓名和地区
User getNameAndMarket(Integer jwcode);
//获取活动列表

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

@ -32,4 +32,8 @@ public interface RefundService {
int finalreview(CashRecordDone cashRecordDone);
PageInfo<CashRecordDTO> financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
PageInfo<CashRecordDTO> exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO);
//新增线上退款记录
void addOnline(CashRecordRefund cashRecordRefund);
}

4
src/main/java/com/example/demo/service/coin/ExportExcelService.java

@ -34,4 +34,8 @@ public interface ExportExcelService {
Exception OnlineExcel(String message) throws Exception;
//负责人退款导出
Exception FinanceExcel(String message) throws Exception;
Exception CashExcel(String message) throws Exception;
}

2
src/main/java/com/example/demo/service/coin/RoleService.java

@ -19,6 +19,8 @@ import java.util.List;
public interface RoleService {
//查询频道
List<String> getChannel();
//新增角色
Result addRole(RoleVo roleVo);
//新增角色二期替补

36
src/main/java/com/example/demo/service/listen/CashListener.java

@ -0,0 +1,36 @@
package com.example.demo.service.listen;
import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.ExportExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @program: GOLD
* @ClassName CashListener
* @description:
* @author: huangqizhen
* @create: 202511-09 09:42
* @Version 1.0
**/
@Component
public class CashListener extends BaseMessageListener<String> {
@Autowired
private ExportExcelService exportExcelService;
protected CashListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "cash:queue:export_queue");
}
@Override
protected void handleMessage(String message) {
validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.CashExcel(message);
} catch (Exception e) {
handleException(e, message);
}
}
}

36
src/main/java/com/example/demo/service/listen/FinanceListener.java

@ -0,0 +1,36 @@
package com.example.demo.service.listen;
import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.ExportExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @program: GOLD
* @ClassName FinanceListener
* @description:
* @author: huangqizhen
* @create: 202511-06 21:35
* @Version 1.0
**/
@Component
public class FinanceListener extends BaseMessageListener<String>{
@Autowired
private ExportExcelService exportExcelService;
@Autowired
public FinanceListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil, "finance:queue:export_queue");
}
@Override
protected void handleMessage(String message) {
validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.FinanceExcel(message);
} catch (Exception e) {
handleException(e, message);
}
}
}

6
src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java

@ -94,7 +94,6 @@ public class AdminServiceImpl implements AdminService {
//更新密码
@Override
public Result updatePassword(Password password) {
String oldPassword = password.getOldPassword();
String newPassword = password.getNewPassword();
String againPassword = password.getAgainPassword();
@ -129,15 +128,15 @@ public class AdminServiceImpl implements AdminService {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// 使用Spring管理的密码编码器不要手动new
String encodedPassword = passwordEncoder.encode(newPassword);
// 更新数据库中的密码
admin.setPassword(encodedPassword);
admin.setUpdateTime(new Date()); // 更新修改时间
adminMapper.updatePassword(admin);
return Result.success("密码修改成功");
} catch (BadCredentialsException e) {
// 旧密码验证失败
return Result.error("原密码错误,请重新输入");
@ -182,6 +181,7 @@ public class AdminServiceImpl implements AdminService {
}
//获取当前登录的管理员账号
public String getCurrentAdminAccount() {
// 1. Security 上下文获取认证信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

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

@ -8,6 +8,8 @@ import com.example.demo.Util.ExcelUploadUtil;
import com.example.demo.Util.JWTUtil;
import com.example.demo.controller.bean.BeanConsumeController;
import com.example.demo.controller.bean.BeanRechargeController;
import com.example.demo.controller.cash.CashCollectionController;
import com.example.demo.controller.cash.CashRefundController;
import com.example.demo.controller.coin.ConsumeController;
import com.example.demo.controller.coin.GoldDetailController;
import com.example.demo.controller.coin.RechargeController;
@ -18,10 +20,15 @@ import com.example.demo.domain.entity.User;
import com.example.demo.domain.export.Goldmingxi;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.cash.CashRefundMapper;
import com.example.demo.mapper.coin.ExportMapper;
import com.example.demo.service.cash.RefundService;
import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.serviceImpl.cash.CashRefundServiceImpl;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -32,6 +39,7 @@ import com.example.demo.service.coin.AiEmotionService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.Finance;
import org.apache.xmlbeans.impl.xb.xsdschema.Attribute;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -76,6 +84,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
private BeanRechargeController beanRechargeController;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private CashRefundController cashRefundController;
@Autowired
private CashCollectionController cashCollectionController;
// 每页查询的数据量
private static final int PAGE_SIZE = 5000;
@Autowired
@ -261,6 +273,38 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
@Override
public Exception FinanceExcel(String message) throws Exception {
return exportExcelGeneric(message, "financeUser", page -> {
try {
JsonNode rootNode = objectMapper.readTree(message);
JsonNode requestDataNode = rootNode.path("requestData");
JsonNode beanRechargeNode = requestDataNode.path("cashRecordDTO");
CashRecordDTO cashRecordDTO = objectMapper.treeToValue(beanRechargeNode, CashRecordDTO.class);
page.setCashRecordDTO(cashRecordDTO);
return cashRefundController.export(page);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public Exception CashExcel(String message) throws Exception {
return exportExcelGeneric(message, "cashUser", page -> {
try {
JsonNode rootNode = objectMapper.readTree(message);
JsonNode requestDataNode = rootNode.path("requestData");
JsonNode beanRechargeNode = requestDataNode.path("cashCollection");
CashCollection cashCollection = objectMapper.treeToValue(beanRechargeNode, CashCollection.class);
page.setCashCollection(cashCollection);
return cashCollectionController.export(page);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public List<Export> getExcel(Export export) {
List<Export> list = exportMapper.getExportRecord(export.getAccount(),export.getType());
System.out.println(list+"-------------------------------");
@ -497,6 +541,10 @@ public class ExportExcelServiceImpl implements ExportExcelService {
return BeanSystemRechargeInfo.class;
case "onlineUser":
return BeanOnlineRechargeInfo.class;
case "financeUser":
return CashRecordDTO.class;
case "cashUser":
return CashCollection.class;
default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType);
}

16
src/main/java/com/example/demo/serviceImpl/coin/RoleServiceImpl.java

@ -9,6 +9,7 @@ import com.example.demo.domain.vo.coin.Result;
import com.example.demo.domain.vo.coin.RoleVo;
import com.example.demo.mapper.coin.MenuMapper;
import com.example.demo.mapper.coin.RoleMapper;
import com.example.demo.mapper.live.LiveMapper;
import com.example.demo.service.coin.MenuService;
import com.example.demo.service.coin.RoleService;
import com.github.pagehelper.PageHelper;
@ -40,6 +41,16 @@ public class RoleServiceImpl implements RoleService {
private MenuService menuService;
@Autowired
private MenuMapper menuMapper;
@Autowired
private LiveMapper liveMapper;
//查询直播礼物
@Override
public List<String> getChannel() {
return liveMapper.getChannel();
}
//新增角色
@Override
@ -62,9 +73,8 @@ public class RoleServiceImpl implements RoleService {
if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) {
return Result.error("权限为空");
}
if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) {
return Result.error("所属市场为空");
}
if (roleVo.getFatherId() == null || roleVo.getFatherId() != 2) {
for (Integer menuId : roleVo.getMenuIds()) {

4
src/main/resources/cashMapper/CashAuditMapper.xml

@ -4,7 +4,7 @@
<!--审核收款订单-->
<update id="updateOrder">
update cash_record
update cash_record_collection
set status=#{status},
reject_reason=#{rejectReason},
audit_id=#{auditId},
@ -13,7 +13,7 @@
</update>
<select id="getAuditName" resultType="java.lang.String">
select a.admin_name from admin as a left join
cash_record cr on a.id=cr.audit_id
cash_record_collection cr on a.id=cr.audit_id
where a.id=#{auditId} limit 1
</select>
</mapper>

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

@ -6,13 +6,13 @@
<insert id="add" parameterType="com.example.demo.domain.entity.CashRecord"
useGeneratedKeys="true" keyProperty="id">
insert into
cash_record(order_type,jwcode,name,market,activity,
cash_record_collection(order_type,jwcode,name,market,activity,
order_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,received_market,
pay_type,pay_time,status,submitter_id,submitter_market,
voucher,remark)
values(#{orderType},#{jwcode},#{name},#{market},#{activity},
#{orderCode},#{goodsName},#{goodNum},#{NumUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{orderCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency},
#{paymentAmount},#{receivedMarket},#{payType},#{payTime},
#{status},#{submitterId},#{submitterMarket},#{voucher},#{remark})
</insert>
@ -29,57 +29,57 @@
<!--更新订单状态-->
<update id="updateStatus">
update cash_record
update cash_record_collection
set status=#{status}
where order_code=#{orderCode}
</update>
<!--更新订单-->
<update id="updateByOrderCode">
UPDATE cash_record
UPDATE cash_record_collection
<set>
jwcode = #{cashRecord.jwcode},
name = #{cashRecord.name},
market = #{cashRecord.market},
activity = #{cashRecord.activity},
goods_name = #{cashRecord.goodsName},
good_num = #{cashRecord.goodNum},
permanent_gold = #{cashRecord.permanentGold},
free_gold = #{cashRecord.freeGold},
Num_unit = #{cashRecord.NumUnit},
payment_currency = #{cashRecord.paymentCurrency},
payment_amount = #{cashRecord.paymentAmount},
received_market = #{cashRecord.receivedMarket},
pay_type = #{cashRecord.payType},
pay_time = #{cashRecord.payTime},
voucher = #{cashRecord.voucher},
remark = #{cashRecord.remark},
jwcode = #{cashRecordCollection.jwcode},
name = #{cashRecordCollection.name},
market = #{cashRecordCollection.market},
activity = #{cashRecordCollection.activity},
goods_name = #{cashRecordCollection.goodsName},
good_num = #{cashRecordCollection.goodNum},
num_unit = #{cashRecordCollection.numUnit},
permanent_gold = #{cashRecordCollection.permanentGold},
free_gold = #{cashRecordCollection.freeGold},
payment_currency = #{cashRecordCollection.paymentCurrency},
payment_amount = #{cashRecordCollection.paymentAmount},
received_market = #{cashRecordCollection.receivedMarket},
pay_type = #{cashRecordCollection.payType},
pay_time = #{cashRecordCollection.payTime},
voucher = #{cashRecordCollection.voucher},
remark = #{cashRecordCollection.remark},
status = 0,
</set>
WHERE order_code = #{cashRecord.orderCode}
WHERE order_code = #{cashRecordCollection.orderCode}
AND status = 5
</update>
<!--补全手续费等字段-->
<update id="complete">
UPDATE cash_record
UPDATE cash_record_collection
<set>
<if test="cashRecord.handlingCharge != null ">
handling_charge = #{cashRecord.handlingCharge},
<if test="cashRecordCollection.handlingCharge != null ">
handling_charge = #{cashRecordCollection.handlingCharge},
</if>
<if test="cashRecord.receivedCurrency != null and cashRecord.receivedCurrency != ''">
received_currency = #{cashRecord.receivedCurrency},
<if test="cashRecordCollection.receivedCurrency != null and cashRecordCollection.receivedCurrency != ''">
received_currency = #{cashRecordCollection.receivedCurrency},
</if>
<if test="cashRecord.receivedAmount != null and cashRecord.receivedAmount != ''">
received_amount = #{cashRecord.receivedAmount},
<if test="cashRecordCollection.receivedAmount != null and cashRecordCollection.receivedAmount != ''">
received_amount = #{cashRecordCollection.receivedAmount},
</if>
<if test="cashRecord.receivedTime != null">
received_time = #{cashRecord.receivedTime},
<if test="cashRecordCollection.receivedTime != null">
received_time = #{cashRecordCollection.receivedTime},
</if>
<if test="cashRecord.paymentCurrency != null and cashRecord.paymentCurrency != ''">
payment_currency = #{cashRecord.paymentCurrency},
<if test="cashRecordCollection.paymentCurrency != null and cashRecordCollection.paymentCurrency != ''">
payment_currency = #{cashRecordCollection.paymentCurrency},
</if>
<!-- 关键:null 就不拼这一列 -->
<if test="cashRecord.paymentAmount != null">
payment_amount = #{cashRecord.paymentAmount},
<if test="cashRecordCollection.paymentAmount != null">
payment_amount = #{cashRecordCollection.paymentAmount},
</if>
<!-- 只有 这些字段全部非空才更新状态 -->
status = CASE
@ -94,7 +94,7 @@
ELSE status
END
</set>
WHERE order_code = #{cashRecord.orderCode}
WHERE order_code = #{cashRecordCollection.orderCode}
AND status IN (1, 3)
</update>
<!--设置gOrder订单为已同步-->
@ -110,7 +110,7 @@
<!--根据订单号获取订单id与状态-->
<select id="selectByOrderCode" resultType="com.example.demo.domain.entity.CashRecord">
select id ,status
from cash_record
from cash_record_collection
where order_code=#{orderCode}
</select>
<!--多条件查询收款订单列表-->
@ -119,6 +119,7 @@
m1.name as marketName,
ra.activity_name as activity,cr.order_code,cr.bank_code,
cr.goods_name,cr.good_num,
cr.num_unit,
cr.permanent_gold/100 as permanentGold,cr.free_gold/100 as freeGold,cr.payment_amount/100 as paymentAmount,
r1.rate_name as paymentCurrency,
r2.rate_name as receivedCurrency,
@ -129,7 +130,7 @@
cr.audit_id,cr.create_time,cr.update_time,cr.audit_time,
a1.admin_name as submitterName,
a2.admin_name as auditName
from cash_record cr
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join market m1 on m1.id = cr.market
@ -211,12 +212,12 @@
</choose>
</select>
<select id="selectAuditByOrderCode" resultType="com.example.demo.domain.entity.CashRecord">
select cash_record.id, status,jwcode,name,market,ra.activity_name as activity,
order_code,bank_code,goods_name,good_num,permanent_gold,free_gold,
payment_currency,payment_amount,pay_type,pay_time,cash_record.status,submitter_id,
select crc.id,jwcode,name,market,ra.activity_name as activity,
order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,pay_type,pay_time,crc.status,submitter_id,
voucher,remark
from cash_record
left join recharge_activity ra on ra.id = cash_record.activity
from cash_record_collection crc
left join recharge_activity ra on ra.id = crc.activity
where order_code=#{orderCode}
</select>
<!--根据精网号获取姓名-->
@ -241,12 +242,36 @@
limit #{size}
</select>
<select id="selectById" resultType="com.example.demo.domain.vo.cash.CashCollection">
select id,jwcode,name,market,activity,
order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold,
payment_currency,payment_amount,received_currency,received_amount,handling_charge,
pay_type,received_market,pay_time,received_time,audit_id,status,submitter_id,
submitter_market,voucher,remark,audit_time
from cash_record
where id=#{id}
select cr.id,cr.jwcode,cr.name,cr.market,
cr.order_code,cr.bank_code,cr.goods_name,cr.good_num,cr.num_unit,cr.permanent_gold,cr.free_gold,
cr.payment_currency,cr.payment_amount,cr.received_currency,cr.received_amount,cr.handling_charge,
cr.pay_type,cr.received_market,cr.pay_time,cr.received_time,cr.audit_id,cr.status,cr.submitter_id,
cr.submitter_market,cr.voucher,cr.remark,cr.audit_time,a1.admin_name as submitterName,
a2.admin_name as auditName,ra.activity_name as activity
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join recharge_activity ra on ra.id = cr.activity
where cr.id=#{id}
</select>
<select id="selectBatchIds" resultType="com.example.demo.domain.vo.cash.CashCollection">
select cr.id,cr.jwcode,cr.name,cr.market,
cr.order_code,cr.bank_code,cr.goods_name,cr.good_num,cr.num_unit,cr.permanent_gold,cr.free_gold,
cr.payment_currency,cr.payment_amount,cr.received_currency,cr.received_amount,cr.handling_charge,
cr.pay_type,cr.received_market,cr.pay_time,cr.received_time,cr.audit_id,cr.status,cr.submitter_id,
cr.submitter_market,cr.voucher,cr.remark,cr.audit_time,a1.admin_name as submitterName,
a2.admin_name as auditName,ra.activity_name as activity
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join recharge_activity ra on ra.id = cr.activity
<where>
<if test="relatedIds != null and relatedIds.size() > 0">
cr.id IN
<foreach collection="relatedIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
</mapper>

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

@ -6,7 +6,6 @@
jwcode,
name,
market,
activity,
order_code,
bank_code,
permanent_gold,
@ -27,16 +26,15 @@
refund_amount,
related_id,
audit_id,
status,
status
) VALUES (
#{jwcode},
#{name},
#{market},
#{activity},
#{orderCode},
#{bankCode},
#{permanentGold},
#{freeGold},
#{partRefundGold},
#{partRefundFree},
#{submitterId},
#{submitterMarket},
#{voucher},
@ -53,7 +51,7 @@
#{refundAmount},
#{id},
#{auditId},
#{status},
#{status}
);
</insert>
<insert id="addAudit" parameterType="com.example.demo.domain.vo.cash.CashRecordDone" useGeneratedKeys="true" keyProperty="id">
@ -75,7 +73,7 @@
</insert>
<update id="update">
update cash_record
update cash_record_refund
set
status = 10,
refund_model = #{refundModel},
@ -83,15 +81,15 @@
where id = #{id}
</update>
<update id="withdraw">
update cash_record set status = 11
where order_type =2 and id = #{id}
update cash_record_refund set status = 11
where id = #{id}
</update>
<update id="review">
update cash_record set status = #{status},executor = #{executor},reject_reason = #{rejectReason}
where order_type =2 and id = #{id}
update cash_record_refund set status = #{status},executor = #{executor},reject_reason = #{rejectReason}
where id = #{id}
</update>
<update id="executor">
update cash_record set refund_currency = #{refundCurrency},
update cash_record_refund set refund_currency = #{refundCurrency},
refund_amount = #{refundAmount},
refund_channels = #{refundChannels},
refund_time = #{refundTime},
@ -99,10 +97,10 @@
refund_voucher = #{refundVoucher},
status = #{status},
executor = #{executor}
where order_type =2 and id = #{id}
where id = #{id}
</update>
<update id="updateStatus">
update cash_record
update cash_record_collection
set status = #{status}
<where>
<if test="id != null">
@ -158,14 +156,15 @@
la.head_finance,
crc.activity,
crc.goods_name,
crc.goods_num,
crc.good_num as goodsNum,
crc.num_unit,
crc.pay_type,
crc.pay_time,
crc.voucher,
crc.remark,
crc.payment_currency,
crc.payment_amount,
crc.payment_amount
from cash_record_refund crr
left join lhl_audit la on la.id = crr.audit_id
left join cash_record_collection crc on crc.id = crr.related_id
<where>
@ -215,7 +214,7 @@
ORDER BY ${sortField} ${sortOrder}
</when>
<otherwise>
ORDER BY create_time DESC
ORDER BY crr.create_time DESC
</otherwise>
</choose>
</select>
@ -225,7 +224,7 @@
crr.name,
crr.market,
crc.goods_name,
crc.goods_num,
crc.good_num as goodsNum,
crc.num_unit,
crr.refund_model,
crr.submitter_id,
@ -235,9 +234,14 @@
crr.permanent_gold,
crr.free_gold,
crr.audit_id,
crr.related_id
crr.related_id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from cash_record_refund crr
left join cash_record_collection crc on crc.id = crr.related_id
left join lhl_audit la on la.id = crr.audit_id
<where>
<if test="status != null">
and crr.status = #{status}
@ -285,8 +289,105 @@
ORDER BY ${sortField} ${sortOrder}
</when>
<otherwise>
ORDER BY create_time DESC
ORDER BY crr.create_time DESC
</otherwise>
</choose>
</select>
<select id="getAudit" resultType="com.example.demo.domain.vo.cash.LhlAudit">
select la.id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from lhl_audit la
where la.id = #{id}
</select>
<select id="exSelect" resultType="com.example.demo.domain.vo.cash.CashRecordDTO">
select crr.id,
crr.jwcode,
crr.name,
crr.market,
crc.goods_name,
crc.good_num as goodsNum,
crc.num_unit,
crr.refund_model,
crr.refund_currency,
crr.refund_amount,
crr.refund_channels,
crr.voucher,
crr.refund_time,
crr.status,
crr.audit_id,
crr.related_id,
la.area_servise,
la.area_finance,
la.area_charge,
la.head_finance
from cash_record_refund crr
left join cash_record_collection crc on crc.id = crr.related_id
left join lhl_audit la on la.id = crr.audit_id
<where>
<if test="status != null">
and crr.status = #{status}
</if>
<if test="name != null and name.length() > 0">
and crr.name = #{name}
</if>
<if test="jwcode != null">
and crr.jwcode = #{jwcode}
</if>
<if test="markets!= null and markets.size > 0">
AND crr.market IN
<foreach collection="markets" item="markets" open="(" separator="," close=")">
#{markets}
</foreach>
</if>
<if test="statuses!= null and statuses.size > 0">
AND crr.status IN
<foreach collection="statuses" item="statuses" open="(" separator="," close=")">
#{statuses}
</foreach>
</if>
<if test="goodsNames!= null and goodsNames.size > 0">
AND crc.goods_name IN
<foreach collection="goodsNames" item="goodsNames" open="(" separator="," close=")">
#{goodsNames}
</foreach>
</if>
<if test="refundCurrency != null and refundCurrency.size > 0">
AND crr.refund_currency = #{refundCurrency}
</if>
<if test="refundChannels != null and refundChannels.length()>0">
and crc.refund_channels = #{refundChannels}
</if>
<if test="startTime != null and endTime != null">
and crc.`refund_time` BETWEEN #{startTime} AND #{endTime}
</if>
<if test=" submitterId!= null">
and crr.submitter_id = #{submitterId}
</if>
</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 crr.create_time DESC
</otherwise>
</choose>
</select>
<select id="getAuditBatch" resultType="com.example.demo.domain.vo.cash.LhlAudit">
select * from lhl_audit
<where>
<if test="auditIds != null and auditIds.size() > 0">
id in
<foreach collection="auditIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
</mapper>

7
src/main/resources/liveMapper/LiveMapper.xml

@ -63,6 +63,13 @@
<select id="getLiveGift" resultType="java.lang.String">
select distinct name from live_gifts
</select>
<select id="getChannel" resultType="java.lang.String">
select distinct title
from live_pindao
where pd_id &lt; 999
and title is not null <!-- 可选:排除标题为空的记录 -->
and title != '' <!-- 可选:排除标题为空字符串的记录 -->
</select>
<!--获取直播频道列表-->
<select id="getLiveChannel" resultType="java.lang.String">
select distinct title from live_pindao where title is not null and title != ''

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

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.AuditMapper">
<!-- 修改订单审核人与审核状态-->
<update id="updateOrder">
update user_gold_record
set audit_id = #{auditId},
@ -12,43 +11,29 @@
order by create_time DESC
limit 1
</update>
<!--更新用户余额-->
<update id="updateUserGold">
update user
set sum_permanent_gold = sum_permanent_gold + COALESCE(#{sumPermanentGold},0),
sum_free_june = sum_free_june + COALESCE(#{sumFreeJune},0),
sum_free_december = sum_free_december + COALESCE(#{sumFreeDecember},0),
sum_task_gold = sum_task_gold + COALESCE(#{sumTaskGold},0),
current_permanent_gold = current_permanent_gold + COALESCE(#{currentPermanentGold},0),
current_free_june = current_free_june + COALESCE(#{currentFreeJune},0),
current_free_december = current_free_december + COALESCE(#{currentFreeDecember},0),
current_task_gold = current_task_gold + COALESCE(#{currentTaskGold},0),
recharge_num = recharge_num+COALESCE(#{rechargeNum},0)
<set>
<if test="currentPermanentGold != null">
current_permanent_gold = current_permanent_gold + #{currentPermanentGold},
</if>
<if test="currentFreeJune != null">
current_free_june = current_free_june + #{currentFreeJune},
</if>
<if test="currentFreeDecember != null">
current_free_december = current_free_december + #{currentFreeDecember},
</if>
<if test="currentTaskGold != null">
current_task_gold = current_task_gold + #{currentTaskGold},
</if>
</set>
where jwcode = #{jwcode}
</update>
<!--修改消费订单为已退款-->
<update id="updateOrderRefund">
update user_gold_record
set is_refund = #{isRefund}
where order_code = #{orderCode}
where order_code = #{orderCode} and type in (0,1)
</update>
<update id="updateFirstRecharge">
update user
set first_recharge = NOW()
where jwcode = #{jwcode}
</update>
<!--根据订单号查未审核订单-->
<select id="selectOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record
where order_code = #{orderCode} and audit_status = 0
and flag=1
ORDER BY create_time DESC
limit 1
</select>
<!--多条件查询充值审核订单-->
<select id="selectRechargeBy" resultType="com.example.demo.domain.vo.coin.RechargeAudit">
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -113,7 +98,6 @@
</otherwise>
</choose>
</select>
<!--多条件查询退款审核订单-->
<select id="selectRefundBy" resultType="com.example.demo.domain.vo.coin.RefundAudit">
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -180,17 +164,27 @@
</otherwise>
</choose>
</select>
<!--根据订单号查订单-->
<select id="selectAllOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record where order_code = #{orderCode} and flag=1
ORDER BY create_time DESC
limit 1
</select>
<select id="getAdminMarket" resultType="java.lang.String">
</select>
<select id="getName" resultType="java.lang.String">
select admin_name from admin where id = #{auditId}
</select>
</mapper>
<select id="getNamesByIds" resultType="com.example.demo.domain.entity.Admin">
select id, admin_name from admin
<where>
<if test="submitterIds != null and submitterIds.size() > 0">
id in
<foreach collection="submitterIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="submitterIds == null or submitterIds.size() == 0">
1=0
</if>
</where>
</select>
<update id="updateFirstRecharge">
update user set first_recharge = now() where jwcode = #{jwcode} and first_recharge is null
</update>
</mapper>

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

@ -35,4 +35,18 @@
<select id="getMarketIdBytype" resultType="com.example.demo.domain.entity.Market">
select * from market where parent_id=#{parentId}
</select>
<select id="getMarketById" resultType="java.lang.String">
select name from market where id=#{market}
</select>
<select id="getMarketByIds" resultType="com.example.demo.domain.entity.Market">
select id,name from market
<where>
<if test="marketIds != null and marketIds.size() > 0">
id in
<foreach collection="marketIds" item="marketId" open="(" separator="," close=")">
#{marketId}
</foreach>
</if>
</where>
</select>
</mapper>

16
src/main/resources/mapper/RoleMapper.xml

@ -7,7 +7,12 @@
<if test="roleName != null">
role_name = #{roleName},
</if>
<if test="market != null">
market = #{market},
</if>
<if test="channel != null">
channel = #{channel},
</if>
<if test="fatherId != null">
father_id = #{fatherId},
</if>
@ -32,7 +37,7 @@
</select>
<select id="selectAllRole" resultType="com.example.demo.domain.vo.coin.RoleVo">
SELECT id,role_name FROM role
SELECT id,role_name,market,channel FROM role
<where>
<!-- 判断 market 是否不为总部且 markets 不为空 -->
<if test="markets != null and markets.size() > 0 and '总部' not in markets and '研发部' not in markets">
@ -44,7 +49,7 @@
</where>
</select>
<select id="selectByFatherId" resultType="com.example.demo.domain.vo.coin.RoleVo">
SELECT id,role_name FROM role
SELECT id,role_name,market,channel FROM role
<where>
father_id = #{id}
</where>
@ -54,8 +59,8 @@
<!-- 插入角色信息 -->
<insert id="addRole" parameterType="com.example.demo.domain.vo.coin.RoleVo" useGeneratedKeys="true" keyProperty="id">
INSERT INTO role
(role_name,father_id, market)
VALUES (#{roleName}, #{fatherId}, #{market})
(role_name,father_id, market,channel)
VALUES (#{roleName}, #{fatherId}, #{market},#{channel})
</insert>
<!-- 删除 role_menu 表中对应角色的数据 -->
@ -75,6 +80,7 @@
r.market AS market,
r.create_time AS createTime,
r.update_time AS updateTime,
r.channel AS channel,
-- 通过自连接查询父角色名称
father.role_name AS fatherName
FROM role r

Loading…
Cancel
Save