jiangping
2023-10-10 47f0aa8aeda7a5a6984b04888c40b5cf86e33c8e
骑行时长减免和强制还车
已修改5个文件
199 ■■■■■ 文件已修改
server/platform/src/main/java/com/doumee/api/business/MemberRidesController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/constants/Constants.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/MemberRidesService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/MemberRidesController.java
@@ -71,6 +71,20 @@
        memberRidesService.updateById(memberRides);
        return ApiResponse.success(null);
    }
    @ApiOperation("强制还车")
    @PostMapping("/forceBack")
    @RequiresPermissions("business:memberrides:forceBack")
    public ApiResponse forceBack(@RequestBody MemberRides memberRides) {
        memberRidesService.forceBack(memberRides);
        return ApiResponse.success(null);
    }
    @ApiOperation("强制还车")
    @PostMapping("/updateDuration")
    @RequiresPermissions("business:memberrides:updateDuration")
    public ApiResponse updateDuration(@RequestBody MemberRides memberRides) {
        memberRidesService.updateDuration(memberRides);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -139,6 +139,52 @@
            String rent = "RENT";
        }
        public interface ActionLogObjType {
            int memberrides =0;//骑行记录
        }
        public enum ACTIONLOG_TYPE{
            //  0骑行记录
            FORCE_BACK(0,"强制还车","后台强制还车"),
            UPDATE_DURATION(1,"修改骑行时长","后台修改骑行时长")
            ;
            String name;
            Integer key;
            String info;
            ACTIONLOG_TYPE(Integer key,String name,  String info) {
                this.name = name;
                this.key = key;
                this.info = info;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public Integer getKey() {
                return key;
            }
            public void setKey(Integer key) {
                this.key = key;
            }
            public String getInfo() {
                return info;
            }
            public void setInfo(String info) {
                this.info = info;
            }
        }
        public enum GOODSORDER_STATUS{
            //            0待支付 1已支付 2已取消 3支付失败 4已结算
            UN_PAY("待支付", 0,"待支付"),
server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java
@@ -91,7 +91,6 @@
    private String backLockId;
    @ApiModelProperty(value = "还车时间")
    @ExcelColumn(name="归还时间",index = 9,width = 10,align = HorizontalAlignment.CENTER))
    private Date backDate;
    @ApiModelProperty(value = "还车指令编码")
server/services/src/main/java/com/doumee/service/business/MemberRidesService.java
@@ -99,7 +99,7 @@
     */
    long count(MemberRides memberRides);
    MemberRides findJoinById(String id);
    /**
     * 分页查询
     *
@@ -115,4 +115,7 @@
     */
    String getOnlineBike(String memberId);
    void updateDuration(MemberRides memberRides);
    void forceBack(MemberRides memberRides);
}
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -1,16 +1,18 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.ActionLogMapper;
import com.doumee.dao.business.MemberRidesMapper;
import com.doumee.dao.business.join.MemberRidesJoinMapper;
import com.doumee.dao.business.model.BaseParam;
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.MemberRides;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.web.request.MemberRidesQuery;
import com.doumee.dao.business.web.response.BikeLogDTO;
import com.doumee.dao.business.web.response.MemberRidesDTO;
@@ -22,12 +24,16 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
/**
 * 用户骑行记录表Service实现
@@ -39,6 +45,8 @@
    @Autowired
    private MemberRidesMapper memberRidesMapper;
    @Autowired
    private ActionLogMapper actionLogMapper;
    @Autowired
@@ -132,6 +140,18 @@
    @Override
    public MemberRides findJoinById(String id) {
        MPJLambdaWrapper<MemberRides> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId);
        queryWrapper.eq(MemberRides::getMemberId, id);
        queryWrapper.selectAll(MemberRides.class);
        queryWrapper.selectAs(BaseParam::getName,MemberRidesDTO::getBikeType) ;
        queryWrapper.last("limit 1");
        return memberRidesJoinMapper.selectJoinOne(MemberRides.class, queryWrapper);
    }
    @Override
    public PageData<BikeLogDTO> findBikeLog(PageWrap<MemberRidesQuery> pageWrap) {
        IPage<MemberRides> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<MemberRides> queryWrapper = initQueryParamByModel(pageWrap.getModel());
@@ -182,6 +202,111 @@
        }
        return memberRides.getBikeCode();
    }
    @Override
    public  void updateDuration(MemberRides memberRides){
        LoginUserInfo user =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(StringUtils.isBlank(memberRides.getMemberId())
                || memberRides.getDuration() == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        MemberRides model = findJoinById(memberRides.getId());
        if(model ==null){
            throw  new BusinessException( ResponseStatus.DATA_EMPTY );
        }
        if(Constants.formatIntegerNum(model.getStatus()) != Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()||
        Constants.formatIntegerNum(model.getCloseStatus()) != Constants.ONE){
            throw  new BusinessException( ResponseStatus.NOT_ALLOWED.getCode(),"对不起,只能针对已还车且未结算的数据进行操作!" );
        }
        MemberRides update = new MemberRides();
        update.setId(model.getId());
        update.setDuration(memberRides.getDuration());
        update.setEditDate(new Date());
        update.setEditor(user.getId());
        memberRidesMapper.updateById(update);
        //修改前
        String beforeContent = JSONObject.toJSONString(model);
        //修改后
        String after = JSONObject.toJSONString(update);
        ActionLog log = new ActionLog();
        log.setId(Constants.getUUID());
        log.setIsdeleted(Constants.ZERO);
        log.setCreateDate(update.getBackDate());
        log.setCreator(user.getId());
        log.setBeforeContent(beforeContent);
        log.setAfterContent(after);
        log.setUserId(user.getId());
        log.setUserType(Constants.ONE);
        log.setParam(JSONObject.toJSONString(memberRides ));
        log.setType(Constants.ActionLogObjType.memberrides);
        log.setResult(Constants.ZERO);
        log.setObjId(model.getId());
        log.setObjType(Constants.ACTIONLOG_TYPE.UPDATE_DURATION.getKey());
        log.setContent(Constants.ACTIONLOG_TYPE.UPDATE_DURATION.getInfo());
        log.setTitle(Constants.ACTIONLOG_TYPE.UPDATE_DURATION.getName());
        //记录操作日志
        actionLogMapper.insert(log);
    }
    /**
     * 强制还车
     * @param memberRides
     */
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public   void forceBack(MemberRides memberRides){
        LoginUserInfo user =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(StringUtils.isBlank(memberRides.getMemberId())
                ||StringUtils.isBlank(memberRides.getBackReason())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        MemberRides model = findJoinById(memberRides.getId());
        if(model ==null){
            throw  new BusinessException( ResponseStatus.DATA_EMPTY );
        }
        if(Constants.formatIntegerNum(model.getStatus()) != Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey() ){
            throw  new BusinessException( ResponseStatus.NOT_ALLOWED.getCode(),"对不起,只能针对未还车辆进行强制还车操作!" );
        }
        MemberRides update = new MemberRides();
        update.setId(model.getId());
        update.setEditDate(new Date());
        update.setEditor(user.getId());
        update.setBackInfo(memberRides.getBackInfo());
        update.setBackDate(new Date());
        update.setBackReason(memberRides.getBackReason());
        update.setBackUserid(user.getId());
        update.setBackType(Constants.ONE);
        //计算骑行计费时长
        update.setDuration(DateUtil.betweenMin(model.getRentDate(), update.getBackDate()));
        memberRidesMapper.updateById(update);
        //修改前
        String beforeContent = JSONObject.toJSONString(model);
        //修改后
        String after = JSONObject.toJSONString(update);
        ActionLog log = new ActionLog();
        log.setId(Constants.getUUID());
        log.setIsdeleted(Constants.ZERO);
        log.setCreateDate(update.getBackDate());
        log.setCreator(user.getId());
        log.setBeforeContent(beforeContent);
        log.setAfterContent(after);
        log.setUserId(user.getId());
        log.setUserType(Constants.ONE);
        log.setParam(JSONObject.toJSONString(memberRides ));
        log.setType(Constants.ActionLogObjType.memberrides);
        log.setResult(Constants.ZERO);
        log.setObjId(model.getId());
        log.setObjType(Constants.ACTIONLOG_TYPE.FORCE_BACK.getKey());
        log.setContent(Constants.ACTIONLOG_TYPE.FORCE_BACK.getInfo());
        log.setTitle(Constants.ACTIONLOG_TYPE.FORCE_BACK.getName());
        //记录操作日志
        actionLogMapper.insert(log);
    }