DeptBalanceServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.ydtech.core.page.HttpResult;
  8. import com.ydtech.modules.admin.dao.*;
  9. import com.ydtech.modules.admin.model.*;
  10. import com.ydtech.modules.admin.model.dto.DeptBalanceDto;
  11. import com.ydtech.modules.admin.model.dto.MySumAmountQueryDto;
  12. import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
  13. import com.ydtech.modules.admin.model.po.SysUserAccount;
  14. import com.ydtech.modules.admin.model.vo.*;
  15. import com.ydtech.modules.admin.service.*;
  16. import com.ydtech.modules.base.model.vo.PageVo;
  17. import com.ydtech.modules.order.entity.InsAreaCompany;
  18. import com.ydtech.modules.order.entity.InsOrders;
  19. import com.ydtech.modules.order.service.InsOrdersService;
  20. import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
  21. import com.ydtech.utils.StringUtils;
  22. import io.swagger.annotations.ApiModelProperty;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25. import javax.annotation.Resource;
  26. import java.math.BigDecimal;
  27. import java.math.RoundingMode;
  28. import java.text.SimpleDateFormat;
  29. import java.util.*;
  30. import java.util.stream.Collectors;
  31. @Service
  32. public class DeptBalanceServiceImpl implements DeptBalanceService {
  33. @Autowired
  34. private SysAgencyLeaderService sysAgencyLeaderService;
  35. @Autowired
  36. private DeptBalanceMapper deptBalanceMapper;
  37. @Autowired
  38. private SysRelationPersonMapper sysRelationPersonMapper;
  39. @Autowired
  40. private SysPartnerMapper sysPartnerMapper;
  41. @Autowired
  42. private InsOrdersService insOrdersService;
  43. @Autowired
  44. private SysUserService sysUserService;
  45. @Autowired
  46. private SysAmountAuditingService sysAmountAuditingService;
  47. @Autowired
  48. private InsFeeOrderNewService insFeeOrderNewService;
  49. @Autowired
  50. private SysUserAccountService sysUserAccountService;
  51. @Resource
  52. private SysAgencyLeaderMapper sysAgencyLeaderMapper;
  53. @Autowired
  54. private SysAgencyFeeApprovalMapper sysAgencyFeeApprovalMapper;
  55. /**
  56. * @version
  57. * @author: whp
  58. * @Date: 2024/08/14 9:04
  59. * @Description: 机构负责人统计
  60. */
  61. @Override
  62. public HttpResult<IPage<DeptBalanceDto>> queryDeptLeaderStatistics(DeptBalanceVo deptBalanceVo) {
  63. try {
  64. PageVo<DeptBalanceDto> pageVo = new PageVo<>();
  65. Page page = new Page(deptBalanceVo.getPageNum(), deptBalanceVo.getPageSize());
  66. pageVo.setPageNum(deptBalanceVo.getPageNum());
  67. pageVo.setPageSize(deptBalanceVo.getPageSize());
  68. //通过机构id 用户等条件机构负责人集合
  69. IPage<DeptBalanceDto> sysLeaderPage = sysAgencyLeaderMapper.queryPage(page, deptBalanceVo);
  70. List<DeptBalanceDto> records = sysLeaderPage.getRecords();
  71. List<DeptBalanceDto> newList =new ArrayList<>();
  72. if (records !=null && records.size()>0) {
  73. for (DeptBalanceDto itemLeader : records) {
  74. BigDecimal allTotalIncome = BigDecimal.ZERO; // 总保费
  75. BigDecimal allDeptManagementFee = BigDecimal.ZERO;//机构管理费
  76. BigDecimal allWithdrawn = BigDecimal.ZERO;//已体现
  77. BigDecimal allNotWithdrawn = BigDecimal.ZERO;//未提现
  78. String deptId = itemLeader.getDeptId();
  79. String proportional = itemLeader.getProportional();
  80. Date updateTime = itemLeader.getUpdateTime();
  81. Date createTime = itemLeader.getCreateTime();
  82. String dateStr = "";
  83. if (updateTime != null) {
  84. dateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(updateTime);
  85. } else {
  86. dateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime);
  87. }
  88. HashMap<String, BigDecimal> orderAmount = deptBalanceMapper.getByDeptId(deptId, dateStr,deptBalanceVo.getBeginDate(),deptBalanceVo.getEndDate());
  89. if (orderAmount != null && !orderAmount.isEmpty()) {
  90. BigDecimal totalIncome = orderAmount.get("totalIncome")==null ? BigDecimal.ZERO : orderAmount.get("totalIncome");
  91. allTotalIncome = totalIncome.multiply(new BigDecimal(proportional))
  92. .divide(new BigDecimal("100")).setScale(2, RoundingMode.DOWN);
  93. allDeptManagementFee = this.calculateTotal(orderAmount.get("deptManagementFee"), allDeptManagementFee, null);
  94. }
  95. // 填充 已提现抽成费用和可提现抽成费用
  96. List<SysAgencyFeeApproval> sysAgencyFeeApprovals = sysAgencyFeeApprovalMapper.selectList(new LambdaQueryWrapper<SysAgencyFeeApproval>()
  97. .eq(SysAgencyFeeApproval::getUserId, itemLeader.getUserId())
  98. .eq(SysAgencyFeeApproval::getStatus, 1));
  99. if (sysAgencyFeeApprovals.size() > 0) {
  100. for (SysAgencyFeeApproval sysAgencyFeeApproval : sysAgencyFeeApprovals) {
  101. allWithdrawn = allWithdrawn.add(sysAgencyFeeApproval.getHistoryFee());
  102. }
  103. }
  104. //可提现 = 总抽成-已提现
  105. allNotWithdrawn = allTotalIncome.subtract(allWithdrawn);
  106. itemLeader.setDeptManagementFee(allTotalIncome);
  107. itemLeader.setTotalIncome(allDeptManagementFee);
  108. itemLeader.setWithdrawn(allWithdrawn);
  109. itemLeader.setNotWithdrawn(allNotWithdrawn);
  110. newList.add(itemLeader);
  111. }
  112. }
  113. sysLeaderPage.setRecords(newList);
  114. return HttpResult.ok(sysLeaderPage);
  115. } catch (Exception e) {
  116. e.printStackTrace();
  117. return HttpResult.error("查询异常");
  118. }
  119. }
  120. /**
  121. * @version
  122. * @author: whp
  123. * @Date: 2024/08/23 9:04
  124. * @Description: 合伙人统计
  125. */
  126. @Override
  127. public HttpResult<IPage<SysPartnerConsoleDto>> queryPartnerStatistics(DeptBalanceVo deptBalanceVo) {
  128. try {
  129. PageVo<SysPartnerConsoleDto> pageVo = new PageVo<>();
  130. Page page = new Page(deptBalanceVo.getPageNum(), deptBalanceVo.getPageSize());
  131. pageVo.setPageNum(deptBalanceVo.getPageNum());
  132. pageVo.setPageSize(deptBalanceVo.getPageSize());
  133. //通过机构id 用户等条件查询合伙人集合
  134. IPage<SysPartnerConsoleDto> sysPartnersPage = sysPartnerMapper.queryPage(page, deptBalanceVo);
  135. List<SysPartnerConsoleDto> sysPartners = sysPartnersPage.getRecords();
  136. for (SysPartnerConsoleDto item : sysPartners) {
  137. BigDecimal allTotalIncome = BigDecimal.ZERO; // 总保费
  138. BigDecimal allDeptManagementFee = BigDecimal.ZERO;//机构管理费
  139. BigDecimal allWithdrawn = BigDecimal.ZERO;//已体现
  140. BigDecimal allNotWithdrawn = BigDecimal.ZERO;//未提现
  141. List<SysAgencyLeader> deptLeader = sysRelationPersonMapper.selectListByLeaderId(item.getUserId(),1);
  142. // 机构负责人
  143. for (SysAgencyLeader itemLeader : deptLeader) {
  144. String deptId = itemLeader.getDeptId();
  145. if (StringUtils.isNotEmpty(deptId)) {
  146. String proportional = item.getProportional();
  147. Date updateTime = itemLeader.getUpdateTime();
  148. Date createTime = itemLeader.getCreateTime();
  149. String dateStr="";
  150. if(updateTime!=null){
  151. dateStr= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(updateTime);
  152. }else{
  153. dateStr= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime);
  154. }
  155. HashMap<String, BigDecimal> orderAmount = deptBalanceMapper.getByDeptId(deptId,dateStr,deptBalanceVo.getBeginDate(),deptBalanceVo.getEndDate());
  156. if (orderAmount != null && !orderAmount.isEmpty()) {
  157. BigDecimal totalIncome = orderAmount.get("totalIncome")==null ? BigDecimal.ZERO : orderAmount.get("totalIncome");
  158. allTotalIncome = totalIncome.multiply(new BigDecimal(proportional))
  159. .divide(new BigDecimal("100")).setScale(2, RoundingMode.DOWN);
  160. allDeptManagementFee = this.calculateTotal(orderAmount.get("deptManagementFee"), allDeptManagementFee, null);
  161. }
  162. // 填充 已提现抽成费用和可提现抽成费用
  163. List<SysAgencyFeeApproval> sysAgencyFeeApprovals = sysAgencyFeeApprovalMapper.selectList(new LambdaQueryWrapper<SysAgencyFeeApproval>()
  164. .eq(SysAgencyFeeApproval::getUserId, item.getUserId())
  165. .eq(SysAgencyFeeApproval::getStatus, 1));
  166. if (!sysAgencyFeeApprovals.isEmpty()) {
  167. for (SysAgencyFeeApproval sysAgencyFeeApproval : sysAgencyFeeApprovals) {
  168. allWithdrawn = allWithdrawn.add(sysAgencyFeeApproval.getHistoryFee());
  169. }
  170. }
  171. //可提现 = 总抽成-已提现
  172. allNotWithdrawn = allTotalIncome.subtract(allWithdrawn);
  173. }
  174. }
  175. item.setTotalIncome(allDeptManagementFee);
  176. item.setDeptManagementFee(allTotalIncome);
  177. item.setWithdrawn(allWithdrawn);
  178. item.setNotWithdrawn(allNotWithdrawn);
  179. }
  180. return HttpResult.ok(sysPartnersPage);
  181. } catch (Exception e) {
  182. e.printStackTrace();
  183. return HttpResult.error("查询异常");
  184. }
  185. }
  186. private List<String> recursion(String userId) {
  187. QueryWrapper<SysRelationPerson> objectQueryWrapper = new QueryWrapper<>();
  188. // 合伙人
  189. QueryWrapper<SysRelationPerson> sysRelationPerson = objectQueryWrapper.eq("suggest_id", userId)
  190. .eq("type", "0");
  191. List<SysRelationPerson> sysRelationPeople = this.sysRelationPersonMapper.selectList(sysRelationPerson);
  192. List<String> collect = sysRelationPeople.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
  193. collect.add(userId);
  194. return collect;
  195. }
  196. private BigDecimal calculateTotal(BigDecimal value1, BigDecimal value2, BigDecimal value3) {
  197. BigDecimal total = BigDecimal.ZERO;
  198. if (value1 != null) {
  199. total = total.add(value1);
  200. }
  201. if (value2 != null) {
  202. total = total.add(value2);
  203. }
  204. if (value3 != null) {
  205. total = total.add(value3);
  206. }
  207. return total;
  208. }
  209. /**
  210. * @version
  211. * @author: whp
  212. * @Date: 2024/08/26
  213. * @Description: 机构树形
  214. */
  215. @Override
  216. public List<SysPartnerConsoleDto> getTreeDeptUser(PartnerBalanceVo deptBalanceVo) {
  217. // 所有最上级合伙人
  218. List<SysPartnerConsoleDto> result = sysPartnerMapper.getTreeDeptUser(deptBalanceVo);
  219. // 合伙人的下级
  220. for (SysPartnerConsoleDto item : result) {
  221. this.treeRecursion(item);
  222. }
  223. return result;
  224. }
  225. private void treeRecursion(SysPartnerConsoleDto item) {
  226. String userId = item.getUserId();
  227. if (StringUtils.isNotEmpty(userId)) {
  228. // 合伙人
  229. SysPartnerConsoleDto sysPartnerConsoleDto = new SysPartnerConsoleDto();
  230. sysPartnerConsoleDto.setUserId(userId);
  231. sysPartnerConsoleDto.setType("0");
  232. List<SysPartnerConsoleDto> sysPartnerList = this.sysRelationPersonMapper.getBySuggestId(sysPartnerConsoleDto);
  233. item.setChildrenList(sysPartnerList);
  234. // 机构负责人
  235. sysPartnerConsoleDto.setType("1");
  236. List<SysPartnerConsoleDto> sysHeadList = this.sysRelationPersonMapper.getBySuggestId(sysPartnerConsoleDto);
  237. List<SysPartnerConsoleDto> childrenList = item.getChildrenList();
  238. childrenList.addAll(sysHeadList);
  239. if (!sysPartnerList.isEmpty()) {
  240. for (SysPartnerConsoleDto sysPartnerItem : sysPartnerList) {
  241. this.treeRecursion(sysPartnerItem);
  242. }
  243. }
  244. }
  245. }
  246. /**
  247. * @version
  248. * @author: whp
  249. * @Date: 2024/08/26
  250. * @Description: 钱包代理人
  251. */
  252. @Override
  253. public IPage<SysPartnerConsoleDto> getWalletAgent(DeptBalanceVo deptBalanceVo) {
  254. PageVo<SysPartnerConsoleDto> pageVo = new PageVo<>();
  255. Page page = new Page(deptBalanceVo.getPageNum(), deptBalanceVo.getPageSize());
  256. pageVo.setPageNum(deptBalanceVo.getPageNum());
  257. pageVo.setPageSize(deptBalanceVo.getPageSize());
  258. IPage<SysPartnerConsoleDto> sysUserListPage = deptBalanceMapper.getWalletAgent(page, deptBalanceVo);
  259. List<SysPartnerConsoleDto> records = sysUserListPage.getRecords();
  260. if (!records.isEmpty()) {
  261. for (SysPartnerConsoleDto record : records) {
  262. String userId = record.getUserId();
  263. HashMap<String, BigDecimal> orderAmount = deptBalanceMapper.getWalletAgentAmount(userId,deptBalanceVo.getBeginDate(),deptBalanceVo.getEndDate());
  264. // 总金额
  265. if (orderAmount != null && !orderAmount.isEmpty()) {
  266. record.setTotalIncome(orderAmount.get("totalIncome"));
  267. }
  268. // 已提现
  269. BigDecimal ysTXAmount= insFeeOrderNewService.findMyAmountYTXmountByDate(record.getUserId(),"3",deptBalanceVo.getBeginDate(),deptBalanceVo.getEndDate());
  270. // 未提现
  271. MySumAmountQueryDto mySumAmountQueryDto = new MySumAmountQueryDto();
  272. mySumAmountQueryDto.setAuditstatus("1");
  273. SysUserAccount sysUserAccountEntity = sysUserAccountService.getById(record.getUserId());
  274. BigDecimal ssKTAmount =BigDecimal.ZERO;
  275. BigDecimal txzTXAmount= insFeeOrderNewService.findMyAmountYTXmountByDate(mySumAmountQueryDto.getUserId(),"2",deptBalanceVo.getBeginDate(),deptBalanceVo.getEndDate());
  276. if(sysUserAccountEntity!=null){
  277. ssKTAmount = sysUserAccountEntity.getSumAmount()==null?BigDecimal.ZERO: sysUserAccountEntity.getSumAmount();
  278. }
  279. BigDecimal sumAmount=ysTXAmount.add(ssKTAmount).add(txzTXAmount);
  280. record.setWithdrawn(ysTXAmount);
  281. record.setNotWithdrawn(ssKTAmount);
  282. record.setTotalIncome(sumAmount);
  283. record.setWithdrawingAmount(txzTXAmount);
  284. }
  285. }
  286. return sysUserListPage;
  287. }
  288. }