ApiMerchantUserController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. package org.springblade.modules.api.controller;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.util.DesensitizedUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
  8. import io.swagger.annotations.Api;
  9. import io.swagger.annotations.ApiOperation;
  10. import io.swagger.annotations.ApiParam;
  11. import lombok.AllArgsConstructor;
  12. import org.springblade.common.base.BaseEntity;
  13. import org.springblade.common.constant.CommonConstant;
  14. import org.springblade.common.enums.AuditStatusEnum;
  15. import org.springblade.common.enums.FacilityStatusEnum;
  16. import org.springblade.core.mp.support.Condition;
  17. import org.springblade.core.mp.support.Query;
  18. import org.springblade.core.secure.utils.AuthUtil;
  19. import org.springblade.core.tool.api.R;
  20. import org.springblade.core.tool.utils.DigestUtil;
  21. import org.springblade.core.tool.utils.WebUtil;
  22. import org.springblade.modules.api.request.AddChildAccountRequest;
  23. import org.springblade.modules.api.request.AlertChildAccountRequest;
  24. import org.springblade.modules.api.request.TimeRangeReq;
  25. import org.springblade.modules.api.response.MerchantPieRes;
  26. import org.springblade.modules.api.response.TurnoverRes;
  27. import org.springblade.modules.api.utils.TimeRangeReqUtils;
  28. import org.springblade.modules.api.vo.ChildDealtVO;
  29. import org.springblade.modules.api.vo.MerchantIncomeVO;
  30. import org.springblade.modules.api.vo.PageMemberVO;
  31. import org.springblade.modules.auth.enums.UserEnum;
  32. import org.springblade.modules.auth.utils.TokenUtil;
  33. import org.springblade.modules.business.entity.Facility;
  34. import org.springblade.modules.business.entity.Shop;
  35. import org.springblade.modules.business.service.IFacilityService;
  36. import org.springblade.modules.business.service.IShopService;
  37. import org.springblade.modules.finance.entity.OrderGoods;
  38. import org.springblade.modules.finance.service.IOrderGoodsService;
  39. import org.springblade.modules.system.entity.User;
  40. import org.springblade.modules.system.entity.UserMerchant;
  41. import org.springblade.modules.system.service.IUserMerchantService;
  42. import org.springblade.modules.system.service.IUserService;
  43. import org.springblade.modules.system.vo.UserMerchantVO;
  44. import org.springframework.transaction.annotation.Transactional;
  45. import org.springframework.util.Assert;
  46. import org.springframework.web.bind.annotation.*;
  47. import javax.validation.Valid;
  48. import java.util.*;
  49. import java.util.stream.Collectors;
  50. /**
  51. * Author pangqijun
  52. * Date 2024/7/16
  53. * Description
  54. */
  55. @RestController
  56. @AllArgsConstructor
  57. @RequestMapping(CommonConstant.API_URL)
  58. @Api(value = "商家端", tags = "商家端用户接口")
  59. public class ApiMerchantUserController extends BaseController {
  60. private final IUserMerchantService iUserMerchantService;
  61. private final IUserService iUserService;
  62. private final IOrderGoodsService orderGoodsService;
  63. private final IFacilityService facilityService;
  64. private final IShopService shopService;
  65. @GetMapping("/merchant/get")
  66. @ApiOperationSupport(order = 1)
  67. @ApiOperation(value = "获取商家用户信息")
  68. public R<UserMerchantVO> getMerchantUserInfo() {
  69. User user = iUserService.getById(AuthUtil.getUserId());
  70. Assert.notNull(user, "未查询到用户信息");
  71. UserMerchantVO vo = iUserMerchantService.getByUserId(user.getId());
  72. vo.setAvatar(user.getAvatar());
  73. vo.setName(user.getName());
  74. vo.setRealName(vo.getRealName());
  75. vo.setPhone(user.getPhone());
  76. return R.data(vo);
  77. }
  78. @PostMapping("/merchant/update")
  79. @ApiOperationSupport(order = 2)
  80. @ApiOperation(value = "更新用户信息")
  81. public R<Void> updateUserInfo(@RequestBody UserMerchantVO userMerchantVO) {
  82. User user = iUserService.getById(AuthUtil.getUserId());
  83. Assert.notNull(user, "未查询到用户信息");
  84. // UserMerchantVO vo = iUserMerchantService.getByUserId(AuthUtil.getUserId());
  85. // Assert.notNull(user, "未查询到商户信息");
  86. user.setAvatar(userMerchantVO.getAvatar());
  87. // if (!isMerchant()){//子账号可以更新身份证号码
  88. // UserMerchantVO userMerchantVO1 = iUserMerchantService.getByUserId(user.getId());
  89. // userMerchantVO1.setIdCard(userMerchantVO.getIdCard());
  90. // iUserMerchantService.updateById(userMerchantVO1);
  91. // }
  92. return R.status(iUserService.updateById(user));
  93. }
  94. @PostMapping("/childDealt")
  95. @ApiOperationSupport(order = 3)
  96. @ApiOperation(value = "子账号详情", notes = "传入id")
  97. public R<ChildDealtVO> childDealt(@ApiParam(value = "主键集合", required = true) @RequestParam Long childAccountId) {
  98. UserMerchant userMerchant = iUserMerchantService.getById(childAccountId);
  99. Assert.notNull(userMerchant, "子账号数据异常");
  100. //查询用户信息
  101. User user = iUserService.getById(userMerchant.getUserId());
  102. Assert.notNull(user, "未查询到用户信息");
  103. ChildDealtVO childDealtVO = new ChildDealtVO();
  104. childDealtVO.setId(userMerchant.getId());
  105. childDealtVO.setPhone(user.getPhone());
  106. childDealtVO.setNickname(user.getName());
  107. childDealtVO.setRealName(user.getRealName());
  108. childDealtVO.setCover(user.getAvatar());
  109. //查询授权门店
  110. LambdaQueryWrapper<Shop> wrapper = Wrappers.lambdaQuery(Shop.class);
  111. wrapper.eq(Shop::getMerchantId, AuthUtil.getUserId());
  112. if (!isMerchant()) {
  113. wrapper.in(BaseEntity::getId, iUserMerchantService.getAuthShopId(AuthUtil.getUserId()));
  114. } else {
  115. wrapper.eq(Shop::getMerchantId, AuthUtil.getUserId());
  116. }
  117. List<Shop> list = shopService.list(wrapper);
  118. childDealtVO.setAuthShops(list);
  119. return R.data(childDealtVO);
  120. }
  121. @PostMapping("/addChildAccount")
  122. @ApiOperationSupport(order = 3)
  123. @ApiOperation(value = "添加子账号", notes = "传入userMerchant")
  124. public R<Void> addChildAccount(@Valid @RequestBody AddChildAccountRequest request) {
  125. if (!request.getPassword().equals(request.getRePassword())) {
  126. return R.fail("密码不一致");
  127. }
  128. List<User> query1 = iUserService.lambdaQuery().eq(User::getAccount, request.getPhone()).list();
  129. if (CollectionUtil.isNotEmpty(query1)) {
  130. return R.fail("手机号已注册,请更换其他手机号!");
  131. }
  132. if (!isMerchant()) {
  133. return R.fail("没有添加子账号权限!");
  134. }
  135. String tenantId = WebUtil.getRequest().getHeader(TokenUtil.TENANT_HEADER_KEY);
  136. User user = new User();
  137. user.setAccount(request.getPhone());
  138. user.setPhone(request.getPhone());
  139. user.setAvatar(request.getCover());
  140. user.setTenantId(tenantId);
  141. user.setUserType(UserEnum.MERCHANT.getCategory());
  142. user.setPassword(DigestUtil.encrypt(request.getPassword()));
  143. user.setName(request.getNickname() == null ? DesensitizedUtil.mobilePhone(request.getPhone()) : request.getNickname());
  144. user.setRealName(request.getRealName());
  145. iUserService.save(user);
  146. UserMerchant userMerchant = new UserMerchant();
  147. userMerchant.setUserId(user.getId());
  148. userMerchant.setParentId(AuthUtil.getUserId());
  149. userMerchant.setAuditStatus(AuditStatusEnum.PASS.getValue());
  150. userMerchant.setAuthShop(request.getAuthShopIds());
  151. //复制主账号信息
  152. UserMerchant myUserMerchant = iUserMerchantService.getByUserId(AuthUtil.getUserId());
  153. userMerchant.setAuthShop(request.getAuthShopIds());
  154. userMerchant.setMerchantName(myUserMerchant.getMerchantName());
  155. userMerchant.setBusinessLicence(myUserMerchant.getBusinessLicence());
  156. userMerchant.setAddress(myUserMerchant.getAddress());
  157. iUserMerchantService.save(userMerchant);
  158. return R.success("添加成功");
  159. }
  160. @Transactional
  161. @PostMapping("/updateChildAccount")
  162. @ApiOperationSupport(order = 4)
  163. @ApiOperation(value = "修改子账号", notes = "alertChildAccountRequest")
  164. public R<Void> deleteChildAccount(@Valid @RequestBody AlertChildAccountRequest request) {
  165. UserMerchant userMerchant = iUserMerchantService.getById(request.getId());
  166. if (Objects.isNull(userMerchant)) {
  167. return R.fail("子账号不存在");
  168. }
  169. if (!isMerchant()) {
  170. return R.fail("没有编辑子账号权限!");
  171. }
  172. //获取子账号用户信息
  173. User user = iUserService.getById(userMerchant.getUserId());
  174. user.setAvatar(request.getCover());
  175. user.setRealName(request.getRealName());
  176. user.setName(request.getNickname() == null ? DesensitizedUtil.mobilePhone(user.getAccount()) : request.getNickname());
  177. iUserService.updateById(user);
  178. userMerchant.setParentId(AuthUtil.getUserId());
  179. userMerchant.setAuditStatus(AuditStatusEnum.PASS.getValue());
  180. userMerchant.setAuthShop(request.getAuthShopIds());
  181. //复制主账号信息
  182. UserMerchant myUserMerchant = iUserMerchantService.getByUserId(AuthUtil.getUserId());
  183. userMerchant.setAuthShop(request.getAuthShopIds());
  184. userMerchant.setMerchantName(myUserMerchant.getMerchantName());
  185. userMerchant.setBusinessLicence(myUserMerchant.getBusinessLicence());
  186. userMerchant.setAddress(myUserMerchant.getAddress());
  187. iUserMerchantService.updateById(userMerchant);
  188. return R.success("修改成功");
  189. }
  190. @Transactional
  191. @PostMapping("/deleteChildAccount")
  192. @ApiOperationSupport(order = 5)
  193. @ApiOperation(value = "删除子账号", notes = "传入ids")
  194. public R<Void> deleteChildAccount(@ApiParam(value = "主键集合", required = true) @RequestParam Long childAccountId) {
  195. UserMerchant child = iUserMerchantService.getById(childAccountId);
  196. Assert.notNull(child, "未查询到子账号信息");
  197. iUserMerchantService.removeById(childAccountId);
  198. return R.status(iUserService.removeById(child.getUserId()));
  199. }
  200. /**
  201. * 自定义分页 商家用户表
  202. */
  203. @GetMapping("/childAccount/list")
  204. @ApiOperationSupport(order = 6)
  205. @ApiOperation(value = "子账号列表", notes = "传入userMerchant")
  206. public R<IPage<UserMerchantVO>> page(UserMerchantVO userMerchant, Query query) {
  207. userMerchant.setParentId(AuthUtil.getUserId());
  208. IPage<UserMerchantVO> pages = iUserMerchantService.selectUserMerchantPage(Condition.getPage(query), userMerchant);
  209. return R.data(pages);
  210. }
  211. /**
  212. * 可提现金额
  213. */
  214. @GetMapping("/getCash")
  215. @ApiOperationSupport(order = 7)
  216. @ApiOperation(value = "可提现金额", notes = "可提现金额")
  217. public R cash() {
  218. return R.data(iUserMerchantService.getCash());
  219. }
  220. /**
  221. * 我的钱包收益记录
  222. */
  223. @GetMapping("/pageIncome")
  224. @ApiOperationSupport(order = 7)
  225. @ApiOperation(value = "我的钱包收益记录-分页", notes = "我的钱包收益记录-分页")
  226. public R<IPage<MerchantIncomeVO>> pageIncome(Query query) {
  227. IPage<MerchantIncomeVO> pages = iUserMerchantService.pageIncome(Condition.getPage(query), AuthUtil.getUserId());
  228. return R.data(pages);
  229. }
  230. /**
  231. * 商家端-首页
  232. */
  233. @PostMapping("/pie")
  234. @ApiOperationSupport(order = 8)
  235. @ApiOperation(value = "商家端-首页-饼图", notes = "商家端-首页-饼图")
  236. public R<List<MerchantPieRes>> pie(@Valid @RequestBody TimeRangeReq timeRangeReq) {
  237. TimeRangeReqUtils.setTimeRangeReq(timeRangeReq);
  238. /*
  239. * 数据格式
  240. [
  241. { value: 0, name: '展现', itemStyle: { color: '#1890ff' } },
  242. { value: 0, name: '点击', itemStyle: { color: '#91cb74' } },
  243. { value: 0, name: '订单', itemStyle: { color: '#fac858' } },
  244. { value: 0, name: '付款', itemStyle: { color: '#ee6666' } },
  245. ]
  246. * */
  247. List<MerchantPieRes> result = new ArrayList<>();
  248. MerchantPieRes reveal = new MerchantPieRes();//展现
  249. reveal.setValue("0");
  250. reveal.setName("展现");
  251. Map<String, String> revealColorMap = new HashMap<>();
  252. revealColorMap.put("color", "#1890ff");
  253. reveal.setItemStyle(revealColorMap);
  254. result.add(reveal);
  255. MerchantPieRes order = new MerchantPieRes();//订单
  256. order.setValue("0");
  257. order.setName("点击");
  258. Map<String, String> orderColorMap = new HashMap<>();
  259. orderColorMap.put("color", "#91cb74");
  260. order.setItemStyle(orderColorMap);
  261. result.add(order);
  262. MerchantPieRes click = new MerchantPieRes();//订单
  263. List<OrderGoods> merchantOrder = orderGoodsService.getMerchantOrder(AuthUtil.getUserId(), timeRangeReq.getStartTime(), timeRangeReq.getEndTime());
  264. click.setValue(merchantOrder.size() + "");
  265. click.setName("售出数量");
  266. Map<String, String> clickColorMap = new HashMap<>();
  267. clickColorMap.put("color", "#fac858");
  268. click.setItemStyle(clickColorMap);
  269. result.add(click);
  270. MerchantPieRes pay = new MerchantPieRes();//付款
  271. List<OrderGoods> collect = merchantOrder.stream().filter(orderGoods -> orderGoods.getIsAfterSales() == 0).collect(Collectors.toList());
  272. pay.setValue(collect.size() + "");
  273. pay.setName("付款");
  274. Map<String, String> payColorMap = new HashMap<>();
  275. payColorMap.put("color", "#ee6666");
  276. pay.setItemStyle(payColorMap);
  277. result.add(pay);
  278. return R.data(result);
  279. }
  280. /**
  281. * 商家端-首页-设备状态
  282. */
  283. @GetMapping("/survey")
  284. @ApiOperationSupport(order = 9)
  285. @ApiOperation(value = "商家端-首页-设备状态", notes = "商家端-首页-设备状态")
  286. public R<Map<String, String>> survey() {
  287. Long userId = AuthUtil.getUserId();
  288. //key为名称,value为数量
  289. Map<String, String> result = new HashMap<>();
  290. result.put("门店数量", shopService.getShopNum(userId));
  291. List<Facility> facilityNum = facilityService.getFacilityNum(userId);
  292. if (CollectionUtil.isNotEmpty(facilityNum)) {
  293. result.put("设备数量", facilityNum.size() + "");
  294. //按状态分组
  295. Map<Integer, List<Facility>> collect = facilityNum.stream().collect(Collectors.groupingBy(Facility::getFacilityStatus));
  296. result.put("故障设备", CollectionUtil.isNotEmpty(collect.get(FacilityStatusEnum.FAULT.getValue())) ? collect.get(FacilityStatusEnum.FAULT.getValue()).size() + "" : "0");
  297. result.put("在线设备", CollectionUtil.isNotEmpty(collect.get(FacilityStatusEnum.ON_LINE.getValue())) ? collect.get(FacilityStatusEnum.ON_LINE.getValue()).size() + "" : "0");
  298. } else {
  299. result.put("设备数量", "0");
  300. result.put("故障设备", "0");
  301. result.put("在线设备", "0");
  302. }
  303. if (isMerchant()) {
  304. result.put("子账号", iUserMerchantService.getChildNum(userId));
  305. }
  306. result.put("订单量", orderGoodsService.getMerchantOrderNum(userId));
  307. return R.data(result);
  308. }
  309. /**
  310. * 商家端-首页-营业额和结算额
  311. */
  312. @PostMapping("/turnover")
  313. @ApiOperationSupport(order = 9)
  314. @ApiOperation(value = "商家端-首页-营业额和结算额", notes = "商家端-首页-营业额和结算额")
  315. public R<TurnoverRes> turnover(@Valid @RequestBody TimeRangeReq timeRangeReq) {
  316. TimeRangeReqUtils.setTimeRangeReq(timeRangeReq);
  317. //key为名称,value为数量
  318. TurnoverRes result = new TurnoverRes();
  319. result.setTurnover("6000.00");
  320. result.setClearing("5873.16");
  321. return R.data(result);
  322. }
  323. /**
  324. * 商家端-会员列表
  325. */
  326. @GetMapping("/pageMember")
  327. @ApiOperationSupport(order = 9)
  328. @ApiOperation(value = "商家端-会员列表", notes = "商家端-会员列表")
  329. public R<IPage<PageMemberVO>> pageMember(Query query) {
  330. IPage<PageMemberVO> pages = iUserMerchantService.pageMember(Condition.getPage(query), AuthUtil.getUserId());
  331. return R.data(pages);
  332. }
  333. }