UserBillingController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. package com.ruoyi.app.pay;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.ruoyi.app.order.ZaloPayCommonService;
  10. import com.ruoyi.app.utils.DateUtil;
  11. import com.ruoyi.app.utils.IpUtils;
  12. import com.ruoyi.app.utils.Md5Pay;
  13. import com.ruoyi.app.utils.zaloPay.ZaloPay;
  14. import com.ruoyi.app.utils.zaloPay.ZaloPayConfig;
  15. import com.ruoyi.app.utils.zaloPay.ZaloPayCreateOrderResponse;
  16. import com.ruoyi.common.annotation.Anonymous;
  17. import com.ruoyi.common.annotation.Log;
  18. import com.ruoyi.common.annotation.RepeatSubmit;
  19. import com.ruoyi.common.core.controller.BaseController;
  20. import com.ruoyi.common.core.domain.AjaxResult;
  21. import com.ruoyi.common.core.page.TableDataInfo;
  22. import com.ruoyi.common.enums.BusinessType;
  23. import com.ruoyi.common.utils.MessageUtils;
  24. import com.ruoyi.common.utils.poi.ExcelUtil;
  25. import com.ruoyi.system.domain.PosOrder;
  26. import com.ruoyi.system.domain.UserBilling;
  27. import com.ruoyi.system.domain.vo.BillDTO;
  28. import com.ruoyi.system.mapper.UserBillingMapper;
  29. import com.ruoyi.system.service.IInfoUserService;
  30. import com.ruoyi.system.service.IPosOrderService;
  31. import com.ruoyi.system.service.IUserBillingService;
  32. import com.ruoyi.system.utils.Auth;
  33. import com.ruoyi.system.utils.JwtUtil;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.security.access.prepost.PreAuthorize;
  36. import org.springframework.web.bind.annotation.*;
  37. import jakarta.servlet.http.HttpServletRequest;
  38. import jakarta.servlet.http.HttpServletResponse;
  39. import java.math.BigDecimal;
  40. import java.util.List;
  41. import java.util.stream.Collectors;
  42. /**
  43. * BillingController
  44. *
  45. * @author ruoyi
  46. * @date 2023-09-06
  47. */
  48. @RestController
  49. @RequestMapping("/Billing/billing")
  50. public class UserBillingController extends BaseController
  51. {
  52. @Autowired
  53. private IUserBillingService userBillingService;
  54. @Autowired
  55. private UserBillingMapper userBillingMapper;
  56. @Autowired
  57. private IPosOrderService posOrderService;
  58. @Autowired
  59. private IInfoUserService infoUserService;
  60. @Autowired
  61. private ZaloPayCommonService zaloPayCommonService;
  62. @Autowired
  63. private ZaloPayConfig zaloPayConfig;
  64. @Autowired
  65. private ZaloPay zaloPay;
  66. /**
  67. * 商家日账单数据
  68. * @param token
  69. * @param page
  70. * @param size
  71. * @param riqi
  72. * @return
  73. */
  74. @Anonymous
  75. @Auth
  76. @GetMapping("/getzddaylist")
  77. public AjaxResult getzddaylist(@RequestHeader String token,
  78. @RequestParam Long page,
  79. @RequestParam Long size,
  80. @RequestParam String riqi)
  81. {
  82. JwtUtil jwtUtil = new JwtUtil();
  83. Long id = Long.valueOf(jwtUtil.getusid(token));
  84. List<UserBilling> list = userBillingMapper.getdaylist(id,riqi,(page-1)*size,size);
  85. setYhInfo(list);
  86. BillDTO sum = userBillingMapper.getdaysum(id,riqi);
  87. JSONObject org = new JSONObject();
  88. org.put("shul",sum.getSul());
  89. org.put("sum",sum.getShouru());
  90. org.put("list",list);
  91. return success(MessageUtils.message("no.success"), org);
  92. }
  93. /**
  94. * 商家周账单数据
  95. * @param token
  96. * @param page
  97. * @param size
  98. * @param riqi
  99. * @return
  100. */
  101. @Anonymous
  102. @Auth
  103. @GetMapping("/getzdmeeklist")
  104. public AjaxResult getzdmeeklist(@RequestHeader String token,
  105. @RequestParam Long page,
  106. @RequestParam Long size,
  107. @RequestParam String riqi)
  108. {
  109. JwtUtil jwtUtil = new JwtUtil();
  110. Long id = Long.valueOf(jwtUtil.getusid(token));
  111. List<UserBilling> list = userBillingMapper.getmeeklist(id,riqi,(page-1)*size,size);
  112. setYhInfo(list);
  113. BillDTO sum = userBillingMapper.getmeeksum(id,riqi);
  114. JSONObject org = new JSONObject();
  115. org.put("shul",sum.getSul());
  116. org.put("sum",sum.getShouru());
  117. org.put("list",list);
  118. return success(MessageUtils.message("no.success"), org);
  119. }
  120. private void setYhInfo(List<UserBilling> list) {
  121. if(!list.isEmpty()){
  122. List<String> orderIds=list.stream().map(UserBilling::getDdId).collect(Collectors.toList());
  123. LambdaQueryWrapper<PosOrder> query = new LambdaQueryWrapper<>();
  124. query.in(PosOrder::getDdId,orderIds);
  125. List<PosOrder> orders = posOrderService.list(query);
  126. list.forEach(billing -> {
  127. orders.stream().filter(o -> o.getDdId().toString().equals(billing.getDdId())).findFirst().ifPresent(o -> {
  128. billing.setActivity(o.getActivity());
  129. billing.setMdActivity(o.getMdActivity());
  130. billing.setMdActivity(o.getMdActivity());
  131. billing.setYhId(o.getYhId());
  132. billing.setYhName(o.getYhName());
  133. billing.setDiscountAmount(o.getDiscountAmount());
  134. billing.setMdYhId(o.getMdYhId());
  135. billing.setMdYhName(o.getMdYhName());
  136. billing.setMdDiscountAmount(o.getMdDiscountAmount());
  137. billing.setSalesName(o.getSalesName());
  138. billing.setMdSalesName(o.getMdSalesName());
  139. billing.setSalesReduction(o.getSalesReduction());
  140. billing.setMdSalesReduction(o.getMdSalesReduction());
  141. billing.setPoints(o.getPoints());
  142. billing.setPointsReduction(o.getPointsReduction());
  143. });
  144. });
  145. }
  146. }
  147. /**
  148. * 商家月账单数据
  149. * @param token
  150. * @param page
  151. * @param size
  152. * @param riqi
  153. * @return
  154. */
  155. @Anonymous
  156. @Auth
  157. @GetMapping("/getzdmatlist")
  158. public AjaxResult getzdmatlist(@RequestHeader String token,
  159. @RequestParam Long page,
  160. @RequestParam Long size,
  161. @RequestParam String riqi)
  162. {
  163. JwtUtil jwtUtil = new JwtUtil();
  164. Long id = Long.valueOf(jwtUtil.getusid(token));
  165. List<UserBilling> list = userBillingMapper.getmatlist(id,riqi,(page-1)*size,size);
  166. setYhInfo(list);
  167. BillDTO sum = userBillingMapper.getmatsum(id,riqi);
  168. JSONObject org = new JSONObject();
  169. org.put("shul",sum.getSul());
  170. org.put("sum",sum.getShouru());
  171. org.put("list",list);
  172. return success(MessageUtils.message("no.success"), org);
  173. }
  174. //充值
  175. @Anonymous
  176. @Auth
  177. @RepeatSubmit(interval = 1000, message = "请求过于频繁")
  178. @RequestMapping(value = "/userRecharge", method = {RequestMethod.GET,RequestMethod.POST})
  179. public AjaxResult userRecharge(@RequestHeader String token, @RequestParam String language, @RequestParam Long amount, HttpServletRequest request)
  180. {
  181. JwtUtil jwtUtil = new JwtUtil();
  182. IpUtils ipUtils = new IpUtils();
  183. String ip = ipUtils.getIpAddr(request);
  184. String id = jwtUtil.getusid(token);
  185. Long timeLong = System.currentTimeMillis();
  186. Md5Pay md5Pay = new Md5Pay();
  187. String orderid = "CZ"+timeLong;
  188. System.out.println("orderid:"+orderid);
  189. String obj = md5Pay.VNPay(language,orderid,String.valueOf(amount),ip);
  190. UserBilling billing = new UserBilling();
  191. billing.setUserId(Long.valueOf(id));
  192. billing.setType(String.valueOf(1));
  193. billing.setDdId(orderid);
  194. billing.setAmount(Double.valueOf(amount));
  195. billing.setState(String.valueOf(3));
  196. billing.setIllustrate("用户充值");
  197. billing.setPaymentMethod("app线上充值");
  198. billing.setUrl(obj);
  199. Boolean reg = userBillingService.saveOrUpdate(billing);
  200. if(reg){
  201. return success(MessageUtils.message("no.order.create.success"), obj);
  202. }else {
  203. return error();
  204. }
  205. }
  206. /**
  207. * 充值使用ZaloPay
  208. * @param token
  209. * @param language
  210. * @param amount
  211. * @param request
  212. * @return
  213. */
  214. @Anonymous
  215. @Auth
  216. @RepeatSubmit(interval = 1000, message = "请求过于频繁")
  217. @RequestMapping(value = "/userRechargeZaloPay", method = {RequestMethod.GET,RequestMethod.POST})
  218. public AjaxResult userRechargeZaloPay(@RequestHeader String token, @RequestParam String language, @RequestParam Long amount,@RequestParam String payType, HttpServletRequest request) throws Exception {
  219. JwtUtil jwtUtil = new JwtUtil();
  220. String userId = jwtUtil.getusid(token);
  221. Long timeLong = System.currentTimeMillis();
  222. String orderid = "CZ"+timeLong;
  223. System.out.println("orderid:"+orderid);
  224. ZaloPayCreateOrderResponse obj = zaloPay.createOrder(userId,orderid,amount,"user recharch by zalopay",zaloPayConfig.getZaloPayConfig(payType));
  225. zaloPayCommonService.setZaloPayOrder(orderid, JSON.toJSONString(obj),null,null,null,payType);
  226. UserBilling billing = new UserBilling();
  227. billing.setUserId(Long.valueOf(userId));
  228. billing.setType(String.valueOf(1));
  229. billing.setDdId(orderid);
  230. billing.setAmount(Double.valueOf(amount));
  231. billing.setState(String.valueOf(3));
  232. billing.setIllustrate("用户充值");
  233. billing.setPaymentMethod("zalopay线上充值");
  234. billing.setUrl(JSONObject.toJSONString(obj));
  235. Boolean reg = userBillingService.saveOrUpdate(billing);
  236. if(reg){
  237. return success(MessageUtils.message("no.order.create.success"), obj);
  238. }else {
  239. return error();
  240. }
  241. }
  242. //查询用户账户及余额
  243. @Anonymous
  244. @Auth
  245. @GetMapping("/getUsbalance")
  246. public AjaxResult getUsbalance(@RequestHeader String token,
  247. @RequestParam Integer page,
  248. @RequestParam Integer size,
  249. @RequestParam boolean sort,
  250. @RequestParam(defaultValue = "") String type) {
  251. JwtUtil jwtUtil = new JwtUtil();
  252. DateUtil dateUtil = new DateUtil();
  253. String id = jwtUtil.getusid(token);
  254. BigDecimal sum = userBillingService.getUserBalance(Long.valueOf(id));
  255. if (!"".equals(type)) {
  256. JSONObject org = new JSONObject();
  257. IPage<UserBilling> palist = new Page<>(page, size);
  258. QueryWrapper<UserBilling> wrapper = new QueryWrapper<>();
  259. int sumlist = userBillingMapper.gettypesum(Long.valueOf(id), Long.valueOf(type));
  260. wrapper.eq("user_id", id);
  261. wrapper.eq("type", type);
  262. wrapper.orderBy(true, sort, "cretim");
  263. IPage<UserBilling> mmlist = userBillingService.page(palist, wrapper);
  264. List<UserBilling> list = mmlist.getRecords();
  265. JSONArray arr = new JSONArray();
  266. for (int i = 0; i < list.size(); i++) {
  267. JSONObject ject = new JSONObject();
  268. ject.put("id", list.get(i).getId());
  269. ject.put("user", infoUserService.getById(list.get(i).getUserId()));
  270. ject.put("type", list.get(i).getType());
  271. PosOrder order = posOrderService.getById(list.get(i).getDdId());
  272. ject.put("ddId", order == null ? list.get(i).getDdId() : order.getDdId());
  273. ject.put("amount", list.get(i).getAmount());
  274. ject.put("divvy", list.get(i).getDivvy());
  275. ject.put("state", list.get(i).getState());
  276. ject.put("mdId", list.get(i).getMdId());
  277. ject.put("illustrate", list.get(i).getIllustrate());
  278. ject.put("paymentMethod", list.get(i).getPaymentMethod());
  279. ject.put("accountNumber", list.get(i).getAccountNumber());
  280. ject.put("url", list.get(i).getUrl());
  281. ject.put("cretim", dateUtil.setDate(list.get(i).getCretim()));
  282. arr.add(ject);
  283. }
  284. org.put("sum", sum);
  285. org.put("list", arr);
  286. return success(MessageUtils.message("no.success"), org);
  287. } else {
  288. JSONObject org = new JSONObject();
  289. IPage<UserBilling> palist = new Page<>(page, size);
  290. QueryWrapper<UserBilling> wrapper = new QueryWrapper<>();
  291. int zlist = userBillingMapper.gettypesum(Long.valueOf(id), 1L);
  292. int txlist = userBillingMapper.gettypesum(Long.valueOf(id), 2L);
  293. int xfei = userBillingMapper.gettypesum(Long.valueOf(id), 3L);
  294. wrapper.eq("user_id", id);
  295. wrapper.orderBy(true, sort, "cretim");
  296. IPage<UserBilling> mmlist = userBillingService.page(palist, wrapper);
  297. List<UserBilling> list = mmlist.getRecords();
  298. JSONArray arr = new JSONArray();
  299. for (int i = 0; i < list.size(); i++) {
  300. JSONObject ject = new JSONObject();
  301. ject.put("id", list.get(i).getId());
  302. ject.put("user", infoUserService.getById(list.get(i).getUserId()));
  303. ject.put("type", list.get(i).getType());
  304. PosOrder order = posOrderService.getById(list.get(i).getDdId());
  305. ject.put("ddId", order == null ? list.get(i).getDdId() : order.getDdId());
  306. ject.put("amount", list.get(i).getAmount());
  307. ject.put("divvy", list.get(i).getDivvy());
  308. ject.put("state", list.get(i).getState());
  309. ject.put("mdId", list.get(i).getMdId());
  310. ject.put("illustrate", list.get(i).getIllustrate());
  311. ject.put("paymentMethod", list.get(i).getPaymentMethod());
  312. ject.put("accountNumber", list.get(i).getAccountNumber());
  313. ject.put("cretim", dateUtil.setDate(list.get(i).getCretim()));
  314. ject.put("url", list.get(i).getUrl());
  315. arr.add(ject);
  316. }
  317. // int sum = zlist-txlist-xfei;
  318. org.put("sum", sum);
  319. org.put("list", arr);
  320. return success(MessageUtils.message("no.success"), org);
  321. }
  322. }
  323. /**
  324. * 查询Billing列表
  325. */
  326. @PreAuthorize("@ss.hasPermi('Billing:billing:list')")
  327. @GetMapping("/list")
  328. public TableDataInfo list(UserBilling userBilling)
  329. {
  330. startPage();
  331. List<UserBilling> list = userBillingService.selectUserBillingList(userBilling);
  332. return getDataTable(list);
  333. }
  334. /**
  335. * 导出Billing列表
  336. */
  337. @PreAuthorize("@ss.hasPermi('Billing:billing:export')")
  338. @Log(title = "Billing", businessType = BusinessType.EXPORT)
  339. @PostMapping("/export")
  340. public void export(HttpServletResponse response, UserBilling userBilling)
  341. {
  342. List<UserBilling> list = userBillingService.selectUserBillingList(userBilling);
  343. ExcelUtil<UserBilling> util = new ExcelUtil<UserBilling>(UserBilling.class);
  344. util.exportExcel(response, list, MessageUtils.message("no.export.excel.billing"));
  345. }
  346. /**
  347. * 获取Billing详细信息
  348. */
  349. @PreAuthorize("@ss.hasPermi('Billing:billing:query')")
  350. @GetMapping(value = "/{id}")
  351. public AjaxResult getInfo(@PathVariable("id") Long id)
  352. {
  353. return success(userBillingService.selectUserBillingById(id));
  354. }
  355. /**
  356. * 新增Billing
  357. */
  358. @PreAuthorize("@ss.hasPermi('Billing:billing:add')")
  359. @Log(title = "Billing", businessType = BusinessType.INSERT)
  360. @PostMapping
  361. public AjaxResult add(@RequestBody UserBilling userBilling)
  362. {
  363. return toAjax(userBillingService.insertUserBilling(userBilling));
  364. }
  365. /**
  366. * 修改Billing
  367. */
  368. @PreAuthorize("@ss.hasPermi('Billing:billing:edit')")
  369. @Log(title = "Billing", businessType = BusinessType.UPDATE)
  370. @PutMapping
  371. public AjaxResult edit(@RequestBody UserBilling userBilling)
  372. {
  373. return toAjax(userBillingService.updateUserBilling(userBilling));
  374. }
  375. /**
  376. * 删除Billing
  377. */
  378. @PreAuthorize("@ss.hasPermi('Billing:billing:remove')")
  379. @Log(title = "Billing", businessType = BusinessType.DELETE)
  380. @DeleteMapping("/{ids}")
  381. public AjaxResult remove(@PathVariable Long[] ids)
  382. {
  383. return toAjax(userBillingService.deleteUserBillingByIds(ids));
  384. }
  385. }