包含完整功能模块: - 设备激活(直销激活码模式 + 代销免激活码模式) - 微信支付 + 天卡订单 - 天卡池管理 + 异步橘视厅SDK激活 - 第三方合作伙伴接口(代销模式) - 签名鉴权(appKey/appSecret + nonce防重放) - 天卡消耗(事务 + 幂等 + 并发控制) - 媒资接口(三级授权过滤) - 审计日志 - 定价策略(3层:门店 > 渠道 > 平台) - 分账(微信分账 + 分润规则) - Docker部署(含Redis容器)
188 lines
6.5 KiB
Java
188 lines
6.5 KiB
Java
package io.as.modules.daycard.controller;
|
||
|
||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||
import io.as.common.exception.ASException;
|
||
import io.as.common.utils.PageUtils;
|
||
import io.as.common.utils.Query;
|
||
import io.as.common.utils.R;
|
||
import io.as.modules.daycard.constants.DayCardConstants;
|
||
import io.as.modules.daycard.dao.ProfitSharingDetailDao;
|
||
import io.as.modules.daycard.dao.ProfitSharingOrderDao;
|
||
import io.as.modules.daycard.entity.ProfitSharingDetailEntity;
|
||
import io.as.modules.daycard.entity.ProfitSharingOrderEntity;
|
||
import io.as.modules.sys.dao.SysOrgDao;
|
||
import io.as.modules.sys.entity.SysOrgEntity;
|
||
import io.swagger.annotations.Api;
|
||
import io.swagger.annotations.ApiOperation;
|
||
import org.apache.commons.lang.StringUtils;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.web.bind.annotation.*;
|
||
|
||
import java.math.BigDecimal;
|
||
import java.util.*;
|
||
|
||
/**
|
||
* 分账记录查询 Controller
|
||
*/
|
||
@Api(tags = "分账记录查询")
|
||
@RestController
|
||
@RequestMapping("/manage/profit-sharing")
|
||
public class ProfitSharingQueryController {
|
||
|
||
@Autowired
|
||
private ProfitSharingOrderDao profitSharingOrderDao;
|
||
|
||
@Autowired
|
||
private ProfitSharingDetailDao profitSharingDetailDao;
|
||
|
||
@Autowired
|
||
private SysOrgDao sysOrgDao;
|
||
|
||
/**
|
||
* 分页查询分账单(支持 orderNo/status 筛选),返回详情列表
|
||
*/
|
||
@ApiOperation("分页查询分账单")
|
||
@GetMapping("/list")
|
||
public R list(@RequestParam Map<String, Object> params) {
|
||
IPage<ProfitSharingOrderEntity> page = new Query<ProfitSharingOrderEntity>().getPage(params, "created_at", false);
|
||
|
||
QueryWrapper<ProfitSharingOrderEntity> wrapper = new QueryWrapper<>();
|
||
wrapper.eq("delete_flag", DayCardConstants.DELETE_FLAG_UNDEL);
|
||
|
||
String orderNo = (String) params.get("orderNo");
|
||
if (StringUtils.isNotBlank(orderNo)) {
|
||
wrapper.eq("pay_order_no", orderNo);
|
||
}
|
||
String status = (String) params.get("status");
|
||
if (StringUtils.isNotBlank(status)) {
|
||
wrapper.eq("status", status);
|
||
}
|
||
String outOrderNo = (String) params.get("outOrderNo");
|
||
if (StringUtils.isNotBlank(outOrderNo)) {
|
||
wrapper.eq("out_order_no", outOrderNo);
|
||
}
|
||
|
||
IPage<ProfitSharingOrderEntity> result = profitSharingOrderDao.selectPage(page, wrapper);
|
||
|
||
// 填充明细列表
|
||
for (ProfitSharingOrderEntity order : result.getRecords()) {
|
||
QueryWrapper<ProfitSharingDetailEntity> detailWrapper = new QueryWrapper<>();
|
||
detailWrapper.eq("sharing_order_id", order.getId());
|
||
List<ProfitSharingDetailEntity> details = profitSharingDetailDao.selectList(detailWrapper);
|
||
order.setDetails(details);
|
||
}
|
||
|
||
Map<String, Object> data = new HashMap<>();
|
||
data.put("page", new PageUtils(result));
|
||
return R.dataSuccess(data);
|
||
}
|
||
|
||
/**
|
||
* 分账单详情 + details 子表
|
||
*/
|
||
@ApiOperation("分账单详情")
|
||
@GetMapping("/info/{id}")
|
||
public R info(@PathVariable("id") Long id) {
|
||
ProfitSharingOrderEntity order = profitSharingOrderDao.selectById(id);
|
||
if (order == null) {
|
||
throw new ASException("分账单不存在");
|
||
}
|
||
QueryWrapper<ProfitSharingDetailEntity> detailWrapper = new QueryWrapper<>();
|
||
detailWrapper.eq("sharing_order_id", id);
|
||
List<ProfitSharingDetailEntity> details = profitSharingDetailDao.selectList(detailWrapper);
|
||
order.setDetails(details);
|
||
Map<String, Object> data = new HashMap<>();
|
||
data.put("order", order);
|
||
return R.dataSuccess(data);
|
||
}
|
||
|
||
/**
|
||
* 统计(参数 startDate, endDate, groupBy)
|
||
* 返回: { summary: {totalCount, totalAmount, successCount, successAmount}, groups: [{orgId, orgName, orgType, count, amount}] }
|
||
*/
|
||
@ApiOperation("分账统计")
|
||
@GetMapping("/stats")
|
||
public R stats(@RequestParam(value = "startDate", required = false) String startDate,
|
||
@RequestParam(value = "endDate", required = false) String endDate,
|
||
@RequestParam(value = "groupBy", required = false) String groupBy) {
|
||
QueryWrapper<ProfitSharingOrderEntity> wrapper = new QueryWrapper<>();
|
||
wrapper.eq("delete_flag", DayCardConstants.DELETE_FLAG_UNDEL);
|
||
|
||
if (StringUtils.isNotBlank(startDate)) {
|
||
wrapper.ge("created_at", startDate + " 00:00:00");
|
||
}
|
||
if (StringUtils.isNotBlank(endDate)) {
|
||
wrapper.le("created_at", endDate + " 23:59:59");
|
||
}
|
||
|
||
List<ProfitSharingOrderEntity> orders = profitSharingOrderDao.selectList(wrapper);
|
||
|
||
// 汇总
|
||
int totalCount = orders.size();
|
||
int totalAmount = 0;
|
||
int successCount = 0;
|
||
int successAmount = 0;
|
||
for (ProfitSharingOrderEntity order : orders) {
|
||
if (order.getTotalAmount() != null) {
|
||
totalAmount += order.getTotalAmount();
|
||
}
|
||
if (DayCardConstants.SETTLE_STATUS_SUCCESS.equals(order.getStatus())) {
|
||
successCount++;
|
||
if (order.getTotalAmount() != null) {
|
||
successAmount += order.getTotalAmount();
|
||
}
|
||
}
|
||
}
|
||
|
||
Map<String, Object> summary = new HashMap<>();
|
||
summary.put("totalCount", totalCount);
|
||
summary.put("totalAmount", totalAmount);
|
||
summary.put("successCount", successCount);
|
||
summary.put("successAmount", successAmount);
|
||
|
||
// 分组统计
|
||
List<Map<String, Object>> groups = new ArrayList<>();
|
||
if (StringUtils.isNotBlank(groupBy) && "org".equals(groupBy)) {
|
||
// 按组织分组:查询所有明细,按 orgId 聚合
|
||
Map<Long, Map<String, Object>> orgMap = new HashMap<>();
|
||
for (ProfitSharingOrderEntity order : orders) {
|
||
QueryWrapper<ProfitSharingDetailEntity> detailWrapper = new QueryWrapper<>();
|
||
detailWrapper.eq("sharing_order_id", order.getId());
|
||
List<ProfitSharingDetailEntity> details = profitSharingDetailDao.selectList(detailWrapper);
|
||
for (ProfitSharingDetailEntity detail : details) {
|
||
Long orgId = detail.getOrgId();
|
||
if (orgId == null) {
|
||
continue;
|
||
}
|
||
Map<String, Object> group = orgMap.get(orgId);
|
||
if (group == null) {
|
||
group = new HashMap<>();
|
||
group.put("orgId", orgId);
|
||
group.put("count", 0);
|
||
group.put("amount", 0);
|
||
group.put("orgRole", detail.getOrgRole());
|
||
// 查询组织名称
|
||
SysOrgEntity org = sysOrgDao.selectById(orgId);
|
||
if (org != null) {
|
||
group.put("orgName", org.getName());
|
||
group.put("orgType", org.getType());
|
||
}
|
||
orgMap.put(orgId, group);
|
||
}
|
||
group.put("count", (Integer) group.get("count") + 1);
|
||
if (detail.getAmount() != null) {
|
||
group.put("amount", (Integer) group.get("amount") + detail.getAmount());
|
||
}
|
||
}
|
||
}
|
||
groups.addAll(orgMap.values());
|
||
}
|
||
|
||
Map<String, Object> result = new HashMap<>();
|
||
result.put("summary", summary);
|
||
result.put("groups", groups);
|
||
return R.dataSuccess(result);
|
||
}
|
||
}
|