|
@@ -0,0 +1,433 @@
|
|
|
+package com.jpsoft.bus.modules.mobile.controller;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.jpsoft.bus.modules.base.entity.ProblemFeedback;
|
|
|
+import com.jpsoft.bus.modules.base.service.OrderInfoService;
|
|
|
+import com.jpsoft.bus.modules.bus.dto.VehicleDTO;
|
|
|
+import com.jpsoft.bus.modules.bus.entity.CompanyInfo;
|
|
|
+import com.jpsoft.bus.modules.bus.entity.UserInfo;
|
|
|
+import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
|
|
|
+import com.jpsoft.bus.modules.bus.service.CompanyInfoService;
|
|
|
+import com.jpsoft.bus.modules.bus.service.VehicleInfoService;
|
|
|
+import com.jpsoft.bus.modules.common.dto.MessageResult;
|
|
|
+import com.jpsoft.bus.modules.common.utils.DES3;
|
|
|
+import com.jpsoft.bus.modules.common.utils.JwtUtil;
|
|
|
+import com.jpsoft.bus.modules.common.utils.SMSUtil;
|
|
|
+import com.jpsoft.bus.modules.merchant.entity.AccountInfo;
|
|
|
+import com.jpsoft.bus.modules.merchant.entity.CapitalInfo;
|
|
|
+import com.jpsoft.bus.modules.merchant.service.AccountInfoService;
|
|
|
+import com.jpsoft.bus.modules.merchant.service.CapitalInfoService;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiImplicitParam;
|
|
|
+import io.swagger.annotations.ApiImplicitParams;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.joda.time.DateTime;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestAttribute;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author 墨鱼_mo
|
|
|
+ * @date 2021-5-7 11:05
|
|
|
+ */
|
|
|
+@RestController
|
|
|
+@RequestMapping("/mobile/merchantApi")
|
|
|
+@Api(value = "merchantApi")
|
|
|
+@Slf4j
|
|
|
+public class MerchantApiController {
|
|
|
+
|
|
|
+ @Value("${jwt.secret}")
|
|
|
+ private String jwtSecret;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CompanyInfoService companyInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CapitalInfoService capitalInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderInfoService orderInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private VehicleInfoService vehicleInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisTemplate redisTemplate;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AccountInfoService accountInfoService;
|
|
|
+
|
|
|
+
|
|
|
+ @PostMapping("getVerifyCode")
|
|
|
+ @ApiOperation(value = "商户获取短信验证码(公开接口)")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "phone", value = "电话", required = true, paramType = "form")
|
|
|
+ })
|
|
|
+ public MessageResult<String> getVerifyCode(String phone) {
|
|
|
+ MessageResult<String> messageResult = new MessageResult<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ AccountInfo accountInfo = accountInfoService.findByPhone(phone);
|
|
|
+ if (accountInfo == null) {
|
|
|
+ throw new Exception("该号码还未注册营收管理员帐号");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String key = "SMS_" + phone;
|
|
|
+
|
|
|
+ String verifyCode = (String) redisTemplate.opsForValue().get(key);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(verifyCode)) {
|
|
|
+ verifyCode = SMSUtil.generateNumberString(6);
|
|
|
+ JSONObject verifyCodeJSON = new JSONObject();
|
|
|
+ verifyCodeJSON.put("code", verifyCode);
|
|
|
+
|
|
|
+ messageResult = SMSUtil.send(phone, "车信达", "SMS_49390047", verifyCodeJSON.toString());
|
|
|
+
|
|
|
+ //设置当前用户的验证码,5分钟内有效
|
|
|
+ redisTemplate.opsForValue().set(key, verifyCode, 5, TimeUnit.MINUTES);
|
|
|
+ }
|
|
|
+
|
|
|
+ messageResult.setResult(true);
|
|
|
+ messageResult.setCode(200);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error(ex.getMessage(), ex);
|
|
|
+ messageResult.setResult(false);
|
|
|
+ messageResult.setCode(400);
|
|
|
+ messageResult.setMessage(ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return messageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ @PostMapping("validateCode")
|
|
|
+ @ApiOperation(value = "验证短信验证码(公开接口)")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "phone", value = "手机号", required = true, paramType = "form"),
|
|
|
+ @ApiImplicitParam(name = "verifyCode", value = "验证码", required = true, paramType = "form"),
|
|
|
+ @ApiImplicitParam(name = "openId", value = "微信openId", paramType = "form")
|
|
|
+ })
|
|
|
+ public MessageResult<Map> validateCode(String phone, String verifyCode, String openId) {
|
|
|
+ MessageResult<Map> messageResult = new MessageResult<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+
|
|
|
+ AccountInfo accountInfo = accountInfoService.findByPhone(phone);
|
|
|
+ if (accountInfo == null) {
|
|
|
+ throw new Exception("该号码还未注册营收管理员帐号");
|
|
|
+ }
|
|
|
+ String smsKey = "SMS_" + phone;
|
|
|
+
|
|
|
+ String beforeVerifyCode = (String) redisTemplate.opsForValue().get(smsKey);
|
|
|
+
|
|
|
+ if (StringUtils.isBlank(openId)) {
|
|
|
+ throw new Exception("用户标识为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(beforeVerifyCode)) {
|
|
|
+ throw new Exception("验证码已过期!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!beforeVerifyCode.equals(verifyCode)) {
|
|
|
+ throw new Exception("验证码错误!");
|
|
|
+ }
|
|
|
+
|
|
|
+ accountInfo.setOpenId(openId);
|
|
|
+ accountInfoService.update(accountInfo);
|
|
|
+
|
|
|
+
|
|
|
+ String token = JwtUtil.createToken(jwtSecret, String.valueOf(accountInfo.getId()), DateTime.now().plusDays(30).toDate());
|
|
|
+
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("token", token);
|
|
|
+
|
|
|
+ messageResult.setData(map);
|
|
|
+ messageResult.setResult(true);
|
|
|
+ messageResult.setCode(200);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error(ex.getMessage());
|
|
|
+ messageResult.setCode(400);
|
|
|
+ messageResult.setResult(false);
|
|
|
+ messageResult.setMessage(ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return messageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ @PostMapping("findByOpenId")
|
|
|
+ @ApiOperation(value = "通过openId查询人员(公开接口)")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "openId", value = "微信openId", required = true, paramType = "form")
|
|
|
+ })
|
|
|
+ public MessageResult<Map> findByOpenId(String openId) {
|
|
|
+ MessageResult<Map> messageResult = new MessageResult<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+ if (StringUtils.isBlank(openId)) {
|
|
|
+ throw new Exception("获取微信信息有误");
|
|
|
+ }
|
|
|
+ AccountInfo accountInfo = accountInfoService.findByOpenId(openId);
|
|
|
+
|
|
|
+ String token = JwtUtil.createToken(jwtSecret, String.valueOf(accountInfo.getId()), DateTime.now().plusDays(30).toDate());
|
|
|
+
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("token", token);
|
|
|
+
|
|
|
+ messageResult.setData(map);
|
|
|
+ messageResult.setResult(true);
|
|
|
+ messageResult.setCode(200);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error(ex.getMessage(), ex);
|
|
|
+ messageResult.setCode(400);
|
|
|
+ messageResult.setResult(false);
|
|
|
+ messageResult.setMessage(ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return messageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @PostMapping("revenueStatisticsUp")
|
|
|
+ @ApiOperation(value = "营收统计(上)")
|
|
|
+ public MessageResult<Map> revenueStatisticsUp(String token, @RequestAttribute String subject) {
|
|
|
+ MessageResult<Map> messageResult = new MessageResult<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ AccountInfo accountInfo = accountInfoService.get(subject);
|
|
|
+ if (accountInfo == null){
|
|
|
+ throw new Exception("请重新登录");
|
|
|
+ }
|
|
|
+ CompanyInfo companyInfo = companyInfoService.get(accountInfo.getCompanyId());
|
|
|
+ List<VehicleInfo> vehicleInfoList = vehicleInfoService.findByCompanyId(companyInfo.getId());
|
|
|
+ //今日收益
|
|
|
+ BigDecimal todayRevenue = BigDecimal.ZERO;
|
|
|
+ //昨日收益
|
|
|
+ BigDecimal yesterdayRevenue = BigDecimal.ZERO;
|
|
|
+ //累计收益
|
|
|
+ BigDecimal totalRevenue = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ CapitalInfo capitalInfo = capitalInfoService.findByMerchantId(accountInfo.getId());
|
|
|
+ if (capitalInfo != null){
|
|
|
+ totalRevenue = capitalInfo.getTotalRevenue();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (vehicleInfoList.size()>0){
|
|
|
+ //今日收益
|
|
|
+ BigDecimal todaySum = orderInfoService.paySum(vehicleInfoList,null, DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
|
|
|
+ if (todaySum != null){
|
|
|
+ todayRevenue = todaySum;
|
|
|
+ }
|
|
|
+ //昨日收益
|
|
|
+ BigDecimal yesterdaySum = orderInfoService.paySum(vehicleInfoList,null,DateUtil.beginOfDay(DateUtil.offsetDay(new Date(),-1)),DateUtil.endOfDay(DateUtil.offsetDay(new Date(),-1)),null);
|
|
|
+ if (yesterdaySum != null){
|
|
|
+ yesterdayRevenue = yesterdaySum;
|
|
|
+ }
|
|
|
+
|
|
|
+ //总收益
|
|
|
+ BigDecimal totalSum = orderInfoService.paySum(vehicleInfoList,null,null,new cn.hutool.core.date.DateTime(),null);
|
|
|
+
|
|
|
+ if (totalSum != null){
|
|
|
+ totalRevenue = totalSum;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("todayRevenue",todayRevenue);
|
|
|
+ map.put("yesterdayRevenue",yesterdayRevenue);
|
|
|
+ map.put("totalRevenue",totalRevenue);
|
|
|
+
|
|
|
+ messageResult.setData(map);
|
|
|
+ messageResult.setResult(true);
|
|
|
+ messageResult.setCode(200);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error(ex.getMessage(), ex);
|
|
|
+ messageResult.setResult(false);
|
|
|
+ messageResult.setMessage(ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return messageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ @PostMapping("revenueStatisticsDown")
|
|
|
+ @ApiOperation(value = "营收统计(下)")
|
|
|
+ public MessageResult<Map> revenueStatisticsDown(String token, @RequestAttribute String subject) {
|
|
|
+ MessageResult<Map> messageResult = new MessageResult<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ AccountInfo accountInfo = accountInfoService.get(subject);
|
|
|
+ if (accountInfo == null){
|
|
|
+ throw new Exception("请重新登录");
|
|
|
+ }
|
|
|
+ CompanyInfo companyInfo = companyInfoService.get(accountInfo.getCompanyId());
|
|
|
+ List<VehicleInfo> vehicleInfoList = vehicleInfoService.findByCompanyId(companyInfo.getId());
|
|
|
+ //线上购票款
|
|
|
+ BigDecimal onlineRevenue = BigDecimal.ZERO;
|
|
|
+ //微信收款
|
|
|
+ BigDecimal wechatRevenue = BigDecimal.ZERO;
|
|
|
+ //支付宝收款
|
|
|
+ BigDecimal alipayRevenue = BigDecimal.ZERO;
|
|
|
+ //现金收款
|
|
|
+ BigDecimal cashRevenue = BigDecimal.ZERO;
|
|
|
+ //车票收款
|
|
|
+ BigDecimal ticketRevenue = BigDecimal.ZERO;
|
|
|
+ //售票数
|
|
|
+ Integer num = 0;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (vehicleInfoList.size()>0){
|
|
|
+ //微信
|
|
|
+ BigDecimal wechatSum = orderInfoService.paySum(vehicleInfoList,"wechat", DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
|
|
|
+ if (wechatSum != null){
|
|
|
+ wechatRevenue = wechatSum;
|
|
|
+ }
|
|
|
+ //支付宝
|
|
|
+ BigDecimal alipaySum = orderInfoService.paySum(vehicleInfoList,"alipay",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
|
|
|
+ if (alipaySum != null){
|
|
|
+ alipayRevenue = alipaySum;
|
|
|
+ }
|
|
|
+
|
|
|
+ //现金
|
|
|
+ BigDecimal cashSum = orderInfoService.paySum(vehicleInfoList,"cash",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
|
|
|
+ if (cashSum != null){
|
|
|
+ cashRevenue = cashSum;
|
|
|
+ }
|
|
|
+
|
|
|
+ //车票
|
|
|
+ BigDecimal ticketSum = orderInfoService.paySum(vehicleInfoList,"ticket",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
|
|
|
+ if (ticketSum != null){
|
|
|
+ ticketRevenue = ticketSum;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer ticketNum = orderInfoService.payNum(vehicleInfoList,null,DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
|
|
|
+ if (ticketNum != null){
|
|
|
+ num = ticketNum;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("onlineRevenue",wechatRevenue.add(alipayRevenue));
|
|
|
+ map.put("wechatRevenue",wechatRevenue);
|
|
|
+ map.put("alipayRevenue",alipayRevenue);
|
|
|
+ map.put("cashRevenue",cashRevenue);
|
|
|
+ map.put("ticketRevenue",ticketRevenue);
|
|
|
+ map.put("num",num);
|
|
|
+
|
|
|
+ messageResult.setData(map);
|
|
|
+ messageResult.setResult(true);
|
|
|
+ messageResult.setCode(200);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error(ex.getMessage(), ex);
|
|
|
+ messageResult.setResult(false);
|
|
|
+ messageResult.setMessage(ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return messageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @PostMapping("merchantVehicleList")
|
|
|
+ @ApiOperation(value = "商户的车辆列表")
|
|
|
+ public MessageResult<List<VehicleDTO>> merchantVehicleList(String token, @RequestAttribute String subject) {
|
|
|
+ MessageResult<List<VehicleDTO>> messageResult = new MessageResult<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ AccountInfo accountInfo = accountInfoService.get(subject);
|
|
|
+ if (accountInfo == null){
|
|
|
+ throw new Exception("请重新登录");
|
|
|
+ }
|
|
|
+ CompanyInfo companyInfo = companyInfoService.get(accountInfo.getCompanyId());
|
|
|
+ List<VehicleInfo> vehicleInfoList = vehicleInfoService.findByCompanyId(companyInfo.getId());
|
|
|
+ List<VehicleDTO> list = new ArrayList<>();
|
|
|
+ if (vehicleInfoList.size()>0){
|
|
|
+ for (VehicleInfo vehicleInfo : vehicleInfoList){
|
|
|
+ VehicleDTO vehicleDTO = new VehicleDTO();
|
|
|
+ BeanUtils.copyProperties(vehicleInfo,vehicleDTO);
|
|
|
+ list.add(vehicleDTO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ messageResult.setData(list);
|
|
|
+ messageResult.setResult(true);
|
|
|
+ messageResult.setCode(200);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error(ex.getMessage(), ex);
|
|
|
+ messageResult.setResult(false);
|
|
|
+ messageResult.setMessage(ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return messageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @PostMapping("profitList")
|
|
|
+ @ApiOperation(value = "收益明细")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "vehicleId", value = "车辆id", required = false, paramType = "form"),
|
|
|
+ @ApiImplicitParam(name = "payName", value = "支付方式(微信:wechat,支付宝:alipay,现金:cash,车票:ticket)", required = false, paramType = "form"),
|
|
|
+ @ApiImplicitParam(name = "date", value = "时间(格式:yyyy-MM)", required = false, paramType = "form")
|
|
|
+ })
|
|
|
+ public MessageResult<Map> profitList(String vehicleId,String payName,String date,String token, @RequestAttribute String subject) {
|
|
|
+ MessageResult<Map> messageResult = new MessageResult<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ AccountInfo accountInfo = accountInfoService.get(subject);
|
|
|
+ if (accountInfo == null){
|
|
|
+ throw new Exception("请重新登录");
|
|
|
+ }
|
|
|
+ CompanyInfo companyInfo = companyInfoService.get(accountInfo.getCompanyId());
|
|
|
+ List<VehicleInfo> vehicleInfoList = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotBlank(vehicleId)){
|
|
|
+ VehicleInfo vehicleInfo = vehicleInfoService.get(vehicleId);
|
|
|
+ if (vehicleInfo != null){
|
|
|
+ vehicleInfoList.add(vehicleInfo);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ vehicleInfoList = vehicleInfoService.findByCompanyId(companyInfo.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // map.put("token", token);
|
|
|
+
|
|
|
+ // messageResult.setData(map);
|
|
|
+ messageResult.setResult(true);
|
|
|
+ messageResult.setCode(200);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error(ex.getMessage());
|
|
|
+ messageResult.setCode(400);
|
|
|
+ messageResult.setResult(false);
|
|
|
+ messageResult.setMessage(ex.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return messageResult;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|