Bläddra i källkod

fixed 订单结算功能

fushengqian 1 år sedan
förälder
incheckning
b1dd42c9c8

+ 1 - 0
fuint-application/src/main/java/com/fuint/common/config/SecurityConfig.java

@@ -64,6 +64,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers(
                         HttpMethod.GET,
                         "/",
+                        "/static/**",
                         "/*.html",
                         "/**/*.html",
                         "/**/*.css",

+ 4 - 0
fuint-application/src/main/java/com/fuint/common/dto/SettlementDto.java

@@ -3,6 +3,7 @@ package com.fuint.common.dto;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import com.fuint.framework.pagination.PaginationResponse;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
@@ -35,6 +36,9 @@ public class SettlementDto implements Serializable {
     @ApiModelProperty("结算金额")
     private BigDecimal amount;
 
+    @ApiModelProperty("结算订单")
+    private PaginationResponse<SettlementOrderDto> orderList;
+
     @ApiModelProperty("创建时间")
     private Date createTime;
 

+ 3 - 0
fuint-application/src/main/java/com/fuint/common/dto/SettlementOrderDto.java

@@ -25,6 +25,9 @@ public class SettlementOrderDto implements Serializable {
     @ApiModelProperty("订单ID")
     private Integer orderId;
 
+    @ApiModelProperty("订单信息")
+    private UserOrderDto orderInfo;
+
     @ApiModelProperty("创建时间")
     private Date createTime;
 

+ 2 - 2
fuint-application/src/main/java/com/fuint/common/enums/SettleStatusEnum.java

@@ -7,8 +7,8 @@ package com.fuint.common.enums;
  * CopyRight https://www.fuint.cn
  */
 public enum SettleStatusEnum {
-    WAIT("A", "待结算"),
-    COMPLETE("B", "已结算");
+    WAIT("A", "待确认"),
+    COMPLETE("B", "已完成");
 
     private String key;
 

+ 17 - 3
fuint-application/src/main/java/com/fuint/common/service/SettlementService.java

@@ -1,8 +1,10 @@
 package com.fuint.common.service;
 
+import com.fuint.common.dto.SettlementDto;
 import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.module.backendApi.request.SettlementRequest;
 import com.fuint.repository.model.MtSettlement;
 
 /**
@@ -24,16 +26,28 @@ public interface SettlementService {
     /**
      * 提交结算
      *
-     * @param  mtSettlement
+     * @param  requestParam
      * @throws BusinessCheckException
      */
-    Boolean submitSettlement(MtSettlement mtSettlement) throws BusinessCheckException;
+    Boolean submitSettlement(SettlementRequest requestParam) throws BusinessCheckException;
+
+    /**
+     * 结算确认
+     *
+     * @param  settlementId
+     * @param  operator
+     * @throws BusinessCheckException
+     */
+    Boolean doConfirm(Integer settlementId, String operator) throws BusinessCheckException;
 
     /**
      * 获取结算详情
      *
      * @param settlementId
+     * @param page
+     * @param pageSize
+     *
      * @return
      * */
-    MtSettlement getSettlementInfo(Integer settlementId) throws BusinessCheckException;
+    SettlementDto getSettlementInfo(Integer settlementId, Integer page, Integer pageSize) throws BusinessCheckException;
 }

+ 1 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/CouponServiceImpl.java

@@ -586,6 +586,7 @@ public class CouponServiceImpl extends ServiceImpl<MtCouponMapper, MtCoupon> imp
                 userCoupon.setCouponId(couponInfo.getId());
                 userCoupon.setType(couponInfo.getType());
                 userCoupon.setImage(couponInfo.getImage());
+                userCoupon.setMerchantId(couponInfo.getMerchantId());
                 userCoupon.setStoreId(userInfo.getStoreId());
                 userCoupon.setAmount(couponInfo.getAmount());
                 userCoupon.setBalance(couponInfo.getAmount());

+ 1 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/OrderServiceImpl.java

@@ -1205,6 +1205,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
     @Override
     @Transactional(rollbackFor = Exception.class)
     public MtOrder updateOrder(MtOrder mtOrder) {
+        mtOrder.setUpdateTime(new Date());
         Integer id = mtOrderMapper.updateById(mtOrder);
         if (id > 0) {
             mtOrder = mtOrderMapper.selectById(mtOrder.getId());

+ 82 - 7
fuint-application/src/main/java/com/fuint/common/service/impl/SettlementServiceImpl.java

@@ -2,7 +2,10 @@ package com.fuint.common.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fuint.common.dto.SettlementDto;
+import com.fuint.common.dto.SettlementOrderDto;
 import com.fuint.common.dto.UserOrderDto;
+import com.fuint.common.enums.PayStatusEnum;
 import com.fuint.common.enums.SettleStatusEnum;
 import com.fuint.common.enums.StatusEnum;
 import com.fuint.common.param.OrderListParam;
@@ -13,6 +16,7 @@ import com.fuint.framework.annoation.OperationServiceLog;
 import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.module.backendApi.request.SettlementRequest;
 import com.fuint.repository.mapper.MtSettlementMapper;
 import com.fuint.repository.mapper.MtSettlementOrderMapper;
 import com.fuint.repository.model.MtBanner;
@@ -22,6 +26,7 @@ import com.fuint.repository.model.MtSettlementOrder;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
 import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
@@ -96,16 +101,19 @@ public class SettlementServiceImpl implements SettlementService {
     /**
      * 提交结算
      *
-     * @param  mtSettlement
+     * @param  requestParam
      * @throws BusinessCheckException
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
     @OperationServiceLog(description = "发起结算")
-    public Boolean submitSettlement(MtSettlement mtSettlement) throws BusinessCheckException {
+    public Boolean submitSettlement(SettlementRequest requestParam) throws BusinessCheckException {
         OrderListParam orderParam = new OrderListParam();
-        orderParam.setMerchantId(mtSettlement.getMerchantId());
-        orderParam.setStoreId(mtSettlement.getStoreId());
+        orderParam.setMerchantId(requestParam.getMerchantId());
+        orderParam.setStoreId(requestParam.getStoreId());
+        orderParam.setPayStatus(PayStatusEnum.SUCCESS.getKey());
+        orderParam.setStartTime(requestParam.getStartTime());
+        orderParam.setEndTime(requestParam.getEndTime());
         orderParam.setPage(1);
         orderParam.setPageSize(100000);
 
@@ -119,22 +127,28 @@ public class SettlementServiceImpl implements SettlementService {
                  totalOrderAmount = totalOrderAmount.add(orderDto.getPayAmount());
             }
         }
+        MtSettlement mtSettlement = new MtSettlement();
+        mtSettlement.setMerchantId(requestParam.getMerchantId());
+        mtSettlement.setStoreId(requestParam.getStoreId());
         mtSettlement.setSettlementNo(CommonUtil.createSettlementNo());
         mtSettlement.setAmount(amount);
         mtSettlement.setTotalOrderAmount(totalOrderAmount);
         mtSettlement.setStatus(StatusEnum.ENABLED.getKey());
+        mtSettlement.setOperator(requestParam.getOperator());
         mtSettlement.setCreateTime(new Date());
         mtSettlement.setUpdateTime(new Date());
         mtSettlementMapper.insert(mtSettlement);
         if (orderList != null && orderList.size() > 0) {
             for (UserOrderDto orderDto : orderList) {
                  MtSettlementOrder mtSettlementOrder = new MtSettlementOrder();
-                 mtSettlementOrder.setId(mtSettlement.getId());
+                 mtSettlementOrder.setSettlementId(mtSettlement.getId());
                  mtSettlementOrder.setOrderId(orderDto.getId());
                  mtSettlementOrder.setCreateTime(new Date());
                  mtSettlementOrder.setUpdateTime(new Date());
                  mtSettlement.setStatus(StatusEnum.ENABLED.getKey());
+                 mtSettlementOrder.setOperator(mtSettlement.getOperator());
                  mtSettlementOrderMapper.insert(mtSettlementOrder);
+                 // 把订单设置为已结算
                  MtOrder mtOrder = orderService.getById(orderDto.getId());
                  mtOrder.setSettleStatus(SettleStatusEnum.COMPLETE.getKey());
                  orderService.updateOrder(mtOrder);
@@ -143,14 +157,75 @@ public class SettlementServiceImpl implements SettlementService {
         return true;
     }
 
+    /**
+     * 结算确认
+     *
+     * @param  settlementId
+     * @param  operator
+     * @throws BusinessCheckException
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @OperationServiceLog(description = "结算确认")
+    public Boolean doConfirm(Integer settlementId, String operator) throws BusinessCheckException {
+       MtSettlement mtSettlement = mtSettlementMapper.selectById(settlementId);
+       if (mtSettlement == null) {
+           throw new BusinessCheckException("结算数据不存在");
+       }
+       mtSettlement.setStatus(SettleStatusEnum.COMPLETE.getKey());
+       mtSettlement.setPayStatus(PayStatusEnum.SUCCESS.getKey());
+       mtSettlement.setUpdateTime(new Date());
+       mtSettlement.setOperator(operator);
+       mtSettlementMapper.updateById(mtSettlement);
+       return true;
+    }
+
     /**
      * 获取结算详情
      *
      * @param settlementId
+     * @param page
+     * @param pageSize
      * @return
      * */
     @Override
-    public MtSettlement getSettlementInfo(Integer settlementId) {
-        return mtSettlementMapper.selectById(settlementId);
+    public SettlementDto getSettlementInfo(Integer settlementId, Integer page, Integer pageSize) throws BusinessCheckException {
+        MtSettlement mtSettlement = mtSettlementMapper.selectById(settlementId);
+        if (mtSettlement == null) {
+            throw new BusinessCheckException("结算单不存在");
+        }
+
+        SettlementDto settlementDto = new SettlementDto();
+        BeanUtils.copyProperties(mtSettlement, settlementDto);
+
+        Page<MtBanner> pageHelper = PageHelper.startPage(page, pageSize);
+        LambdaQueryWrapper<MtSettlementOrder> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.ne(MtSettlementOrder::getStatus, StatusEnum.DISABLE.getKey());
+        lambdaQueryWrapper.eq(MtSettlementOrder::getSettlementId, settlementId);
+        lambdaQueryWrapper.orderByDesc(MtSettlementOrder::getId);
+        List<MtSettlementOrder> dataList = mtSettlementOrderMapper.selectList(lambdaQueryWrapper);
+
+        PageRequest pageRequest = PageRequest.of(page, pageSize);
+        PageImpl pageImpl = new PageImpl(dataList, pageRequest, pageHelper.getTotal());
+        PaginationResponse<SettlementOrderDto> paginationResponse = new PaginationResponse(pageImpl, SettlementOrderDto.class);
+        paginationResponse.setTotalPages(pageHelper.getPages());
+        paginationResponse.setTotalElements(pageHelper.getTotal());
+
+        List<SettlementOrderDto> orderList = new ArrayList<>();
+        if (dataList != null && dataList.size() > 0) {
+            for (MtSettlementOrder mtSettlementOrder : dataList) {
+                 SettlementOrderDto settlementOrderDto = new SettlementOrderDto();
+                 BeanUtils.copyProperties(mtSettlementOrder, settlementOrderDto);
+                 UserOrderDto orderDto = orderService.getOrderById(settlementOrderDto.getOrderId());
+                 if (orderDto != null) {
+                     settlementOrderDto.setOrderInfo(orderDto);
+                 }
+                 orderList.add(settlementOrderDto);
+            }
+        }
+        paginationResponse.setContent(orderList);
+
+        settlementDto.setOrderList(paginationResponse);
+        return settlementDto;
     }
 }

+ 2 - 1
fuint-application/src/main/java/com/fuint/common/service/impl/UserCouponServiceImpl.java

@@ -300,7 +300,7 @@ public class UserCouponServiceImpl extends ServiceImpl<MtUserCouponMapper, MtUse
                     Integer numInt = Integer.parseInt(buyItemArr[2]);
                     for (int j = 1; j <= numInt; j++) {
                         if (StringUtil.isNotEmpty(buyItemArr[1])) {
-                            this.preStoreItem(couponInfo, userInfo, orderId, new BigDecimal(buyItemArr[1]));
+                            preStoreItem(couponInfo, userInfo, orderId, new BigDecimal(buyItemArr[1]));
                         }
                     }
                 }
@@ -645,6 +645,7 @@ public class UserCouponServiceImpl extends ServiceImpl<MtUserCouponMapper, MtUse
         userCoupon.setType(couponInfo.getType());
         userCoupon.setGroupId(couponInfo.getGroupId());
         userCoupon.setMobile(userInfo.getMobile());
+        userCoupon.setMerchantId(couponInfo.getMerchantId());
         userCoupon.setUserId(userInfo.getId());
         userCoupon.setStatus(UserCouponStatusEnum.UNUSED.getKey());
         userCoupon.setCreateTime(new Date());

+ 4 - 11
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendMemberController.java

@@ -133,10 +133,6 @@ public class BackendMemberController extends BaseController {
             return getFailureResult(1001, "请先登录");
         }
         TAccount account = accountService.getAccountInfoById(accountInfo.getId());
-        Integer storeId = account.getStoreId() == null ? 0 : account.getStoreId();
-        if (storeId > 0) {
-            params.put("storeId", storeId.toString());
-        }
         if (accountInfo.getMerchantId() != null && accountInfo.getMerchantId() > 0) {
             params.put("merchantId", accountInfo.getMerchantId());
         }
@@ -157,9 +153,6 @@ public class BackendMemberController extends BaseController {
         // 店铺列表
         Map<String, Object> paramsStore = new HashMap<>();
         paramsStore.put("status", StatusEnum.ENABLED.getKey());
-        if (storeId != null && storeId > 0) {
-            paramsStore.put("storeId", storeId.toString());
-        }
         if (accountInfo.getMerchantId() != null && accountInfo.getMerchantId() > 0) {
             paramsStore.put("merchantId", accountInfo.getMerchantId());
         }
@@ -245,7 +238,7 @@ public class BackendMemberController extends BaseController {
     /**
      * 保存会员信息
      *
-     * @param request  HttpServletRequest对象
+     * @param request HttpServletRequest对象
      * @return
      */
     @ApiOperation(value = "保存会员信息")
@@ -304,10 +297,10 @@ public class BackendMemberController extends BaseController {
         memberInfo.setDescription(description);
         memberInfo.setStartTime(DateUtil.parseDate(startTime));
         memberInfo.setEndTime(DateUtil.parseDate(endTime));
-        TAccount account = accountService.getAccountInfoById(accountInfo.getId());
-        Integer storeId = account.getStoreId();
-        memberInfo.setStoreId(storeId);
         if (StringUtil.isEmpty(id)) {
+            TAccount account = accountService.getAccountInfoById(accountInfo.getId());
+            Integer storeId = account.getStoreId();
+            memberInfo.setStoreId(storeId);
             memberService.addMember(memberInfo);
         } else {
             memberService.updateMember(memberInfo);

+ 83 - 18
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendSettlementController.java

@@ -2,6 +2,10 @@ package com.fuint.module.backendApi.controller;
 
 import com.fuint.common.Constants;
 import com.fuint.common.dto.AccountInfo;
+import com.fuint.common.dto.ParamDto;
+import com.fuint.common.dto.SettlementDto;
+import com.fuint.common.enums.OrderStatusEnum;
+import com.fuint.common.enums.SettleStatusEnum;
 import com.fuint.common.enums.StatusEnum;
 import com.fuint.common.service.MerchantService;
 import com.fuint.common.service.SettlementService;
@@ -12,6 +16,7 @@ import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
 import com.fuint.framework.web.BaseController;
 import com.fuint.framework.web.ResponseObject;
+import com.fuint.module.backendApi.request.SettlementRequest;
 import com.fuint.repository.model.MtMerchant;
 import com.fuint.repository.model.MtSettlement;
 import com.fuint.repository.model.MtStore;
@@ -111,14 +116,64 @@ public class BackendSettlementController extends BaseController {
 
         PaginationResponse<MtSettlement> paginationResponse = settlementService.querySettlementListByPagination(paginationRequest);
 
+        // 结算状态
+        SettleStatusEnum[] statusListEnum = SettleStatusEnum.values();
+        List<ParamDto> statusList = new ArrayList<>();
+        for (SettleStatusEnum enumItem : statusListEnum) {
+            ParamDto paramDto = new ParamDto();
+            paramDto.setKey(enumItem.getKey());
+            paramDto.setName(enumItem.getValue());
+            paramDto.setValue(enumItem.getKey());
+            statusList.add(paramDto);
+        }
+
         Map<String, Object> result = new HashMap<>();
         result.put("merchantList", merchantList);
         result.put("storeList", storeList);
+        result.put("statusList", statusList);
         result.put("paginationResponse", paginationResponse);
 
         return getSuccessResult(result);
     }
 
+    /**
+     * 获取结算单详情
+     * @param request HttpServletRequest对象
+     * @return
+     * */
+    @ApiOperation(value = "获取结算单详情")
+    @RequestMapping(value = "/info", method = RequestMethod.GET)
+    @CrossOrigin
+    @PreAuthorize("@pms.hasPermission('settlement:index')")
+    public ResponseObject info(HttpServletRequest request) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        Integer page = request.getParameter("page") == null ? Constants.PAGE_NUMBER : Integer.parseInt(request.getParameter("page"));
+        Integer pageSize = request.getParameter("pageSize") == null ? Constants.PAGE_SIZE : Integer.parseInt(request.getParameter("pageSize"));
+        Integer settlementId = request.getParameter("settlementId") == null ? 0 : Integer.parseInt(request.getParameter("settlementId"));
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        SettlementDto settlementInfo = settlementService.getSettlementInfo(settlementId, page, pageSize);
+
+        OrderStatusEnum[] statusListEnum = OrderStatusEnum.values();
+        List<ParamDto> statusList = new ArrayList<>();
+        for (OrderStatusEnum enumItem : statusListEnum) {
+            ParamDto paramDto = new ParamDto();
+            paramDto.setKey(enumItem.getKey());
+            paramDto.setName(enumItem.getValue());
+            paramDto.setValue(enumItem.getKey());
+            statusList.add(paramDto);
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("settlementInfo", settlementInfo);
+        result.put("statusList", statusList);
+
+        return getSuccessResult(result);
+    }
+
     /**
      * 提交结算
      *
@@ -129,33 +184,43 @@ public class BackendSettlementController extends BaseController {
     @RequestMapping(value = "/doSubmit", method = RequestMethod.POST)
     @CrossOrigin
     @PreAuthorize("@pms.hasPermission('settlement:doSubmit')")
-    public ResponseObject doSubmit(HttpServletRequest request, @RequestBody Map<String, Object> param) throws BusinessCheckException {
+    public ResponseObject doSubmit(HttpServletRequest request, @RequestBody SettlementRequest requestParam) throws BusinessCheckException {
         String token = request.getHeader("Access-Token");
-        String merchantId = StringUtil.isEmpty(param.get("merchantId").toString())? "0" : param.get("merchantId").toString();
-        String storeId = StringUtil.isEmpty(param.get("storeId").toString()) ? "0" : param.get("storeId").toString();
-        String remark = param.get("remark") == null ? "后台发起结算" : param.get("remark").toString();
-
         AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
         if (accountInfo == null) {
             return getFailureResult(1001, "请先登录");
         }
-
         String operator = accountInfo.getAccountName();
-        MtSettlement mtSettlement = new MtSettlement();
         if (accountInfo.getMerchantId() != null && accountInfo.getMerchantId() > 0) {
-            mtSettlement.setMerchantId(accountInfo.getMerchantId());
-        } else {
-            mtSettlement.setMerchantId(Integer.parseInt(merchantId));
-        }
-        if (accountInfo.getStoreId() != null && accountInfo.getStoreId() > 0) {
-            mtSettlement.setStoreId(accountInfo.getStoreId());
-        } else {
-            mtSettlement.setStoreId(Integer.parseInt(storeId));
+            requestParam.setMerchantId(accountInfo.getMerchantId());
         }
-        mtSettlement.setDescription(remark);
-        mtSettlement.setOperator(operator);
+        requestParam.setOperator(operator);
+        settlementService.submitSettlement(requestParam);
+        return getSuccessResult(true);
+    }
 
-        settlementService.submitSettlement(mtSettlement);
+    /**
+     * 确认结算
+     *
+     * @param request HttpServletRequest对象
+     * @return
+     */
+    @ApiOperation(value = "确认结算")
+    @RequestMapping(value = "/doConfirm", method = RequestMethod.POST)
+    @CrossOrigin
+    @PreAuthorize("@pms.hasPermission('settlement:doConfirm')")
+    public ResponseObject doConfirm(HttpServletRequest request, @RequestBody Map<String, Object> param) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        String settlementId = StringUtil.isEmpty(param.get("settlementId").toString())? "" : param.get("settlementId").toString();
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+        if (StringUtil.isEmpty(settlementId)) {
+            return getFailureResult(201, "参数有误");
+        }
+        String operator = accountInfo.getAccountName();
+        settlementService.doConfirm(Integer.parseInt(settlementId), operator);
         return getSuccessResult(true);
     }
 }

+ 33 - 0
fuint-application/src/main/java/com/fuint/module/backendApi/request/SettlementRequest.java

@@ -0,0 +1,33 @@
+package com.fuint.module.backendApi.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 后台登录请求参数
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Data
+public class SettlementRequest implements Serializable {
+
+    @ApiModelProperty(value="商户ID", name="merchantId")
+    private Integer merchantId;
+
+    @ApiModelProperty(value="店铺ID", name="storeId")
+    private Integer storeId;
+
+    @ApiModelProperty(value="下单开始时间", name="startTime")
+    private String startTime;
+
+    @ApiModelProperty(value="下单结束时间", name="endTime")
+    private String endTime;
+
+    @ApiModelProperty(value="备注说明", name="remark")
+    private String remark;
+
+    @ApiModelProperty(value="最后操作人", name="operator")
+    private String operator;
+}