111
k94314517
2025-02-17 000c62b9a5b19197fcd93db6382841cedb0c4537
111
已添加2个文件
已修改12个文件
550 ■■■■ 文件已修改
server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/constants/Constants.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/join/DiscountJoinMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/join/DiscountMemberJoinMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/Discount.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/request/GoodsorderBackDTO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/DiscountService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/GoodsorderService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/jtt808/web/controller/ExceptionController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java
@@ -143,7 +143,7 @@
    @PostMapping("/backGoodsorder")
    @RequiresPermissions("business:goodsorder:query")
    public ApiResponse backGoodsorder(@RequestBody GoodsorderBackDTO goodsorderBackDTO){
        goodsorderService.backGoodsorder(goodsorderBackDTO.getOrderId(),goodsorderBackDTO.getMoney(),goodsorderBackDTO.getReason());
        goodsorderService.backGoodsorder(goodsorderBackDTO);
        return ApiResponse.success(null);
    }
server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -39,6 +39,7 @@
    public static final String PRIVATE_KEY = "PRIVATE_KEY";
    public static final String PROJECT_FILE = "PROJECT_FILE";
    public static final String PROJECTS = "PROJECTS";
    public static final String DISCOUNT = "DISCOUNT";
    public static final String FORCE_BACK_LOCK = "FORCE_BACK_LOCK";
    public static final String FORCE_BACK_SITE = "FORCE_BACK_SITE";
    //车辆类型数据
@@ -50,6 +51,13 @@
    public static String REPAIR = "REPAIR";
    public static final String NOTICE_SITE_LINK_LIMIT="NOTICE_SITE_LINK_LIMIT";
    public static boolean equalsInteger(Integer a, Integer b) {
        if (formatIntegerNum(a) == formatIntegerNum(b)) {
            return true;
        }
        return false;
    }
    public  interface MqttTopic{
        String topic_index = "device/lock/";
server/services/src/main/java/com/doumee/dao/business/join/DiscountJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business.join;
import com.doumee.dao.business.model.Bikes;
import com.doumee.dao.business.model.Discount;
import com.github.yulichang.base.mapper.MPJJoinMapper;
import org.springframework.stereotype.Repository;
/**
 * @author T14
 */
@Repository
public interface DiscountJoinMapper extends MPJJoinMapper<Discount> {
}
server/services/src/main/java/com/doumee/dao/business/join/DiscountMemberJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business.join;
import com.doumee.dao.business.model.Discount;
import com.doumee.dao.business.model.DiscountMember;
import com.github.yulichang.base.mapper.MPJJoinMapper;
import org.springframework.stereotype.Repository;
/**
 * @author T14
 */
@Repository
public interface DiscountMemberJoinMapper extends MPJJoinMapper<DiscountMember> {
}
server/services/src/main/java/com/doumee/dao/business/model/Discount.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -147,4 +148,15 @@
    @ExcelColumn(name="是否支持电动车 0不支持 1支持")
    private Integer iselecbike;
    @TableField(exist = false)
    @ApiModelProperty(value = "已售数量", example = "1")
    private Integer saleNum;
    @TableField(exist = false)
    @ApiModelProperty(value = "适用项目:1=自行车;2=电动车 (查询使用)", example = "1")
    private Integer bikeOrElec;
    @TableField(exist = false)
    @ApiModelProperty(value = "图片全路径", example = "1")
    private String fullImgUrl;
}
server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -22,141 +23,125 @@
public class DiscountMember {
    @ApiModelProperty(value = "编码")
    @ExcelColumn(name="编码")
    private String id;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    @ApiModelProperty(value = "创建人")
    @ExcelColumn(name="创建人")
    private String creator;
    @ApiModelProperty(value = "编辑时间")
    @ExcelColumn(name="编辑时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date editDate;
    @ApiModelProperty(value = "编辑人")
    @ExcelColumn(name="编辑人")
    private String editor;
    @ApiModelProperty(value = "是否已删除 0未删除 1已删除", example = "1")
    @ExcelColumn(name="是否已删除 0未删除 1已删除")
    private Integer isdeleted;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
    private String info;
    @ApiModelProperty(value = "票号")
    @ExcelColumn(name="票号")
    @ExcelColumn(name="套餐票号",index = 0,width = 16)
    private String code;
    @ApiModelProperty(value = "名称")
    @ExcelColumn(name="名称")
    @ExcelColumn(name="套餐名称",index = 2,width = 10)
    private String name;
    @ApiModelProperty(value = "类型 0期限卡 1次卡", example = "1")
    @ExcelColumn(name="类型 0期限卡 1次卡")
    @ExcelColumn(name="套餐类型",index = 1,valueMapping = "0=期限卡;1=次卡;",width = 10)
    private Integer type;
    @ApiModelProperty(value = "每日骑行限制类型 0不限制 1限制", example = "1")
    @ExcelColumn(name="每日骑行限制类型 0不限制 1限制")
    private Integer limitType;
    @ApiModelProperty(value = "每日骑行限制时间(分钟)", example = "1")
    @ExcelColumn(name="每日骑行限制时间(分钟)")
    private Integer limitTime;
    @ApiModelProperty(value = "销售价(元)", example = "1")
    @ExcelColumn(name="销售价(元)")
    private BigDecimal price;
    @ApiModelProperty(value = "划线价(元)", example = "1")
    @ExcelColumn(name="划线价(元)")
    private BigDecimal linePrice;
    @ApiModelProperty(value = "销售渠道 0小程序", example = "1")
    @ExcelColumn(name="销售渠道 0小程序")
    private Integer channel;
    @ApiModelProperty(value = "套餐图片")
    @ExcelColumn(name="套餐图片")
    private String imgurl;
    @ApiModelProperty(value = "简介")
    @ExcelColumn(name="简介")
    private String descs;
    @ApiModelProperty(value = "描述")
    @ExcelColumn(name="描述")
    private String content;
    @ApiModelProperty(value = "销售开始日期")
    @ExcelColumn(name="销售开始日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date startDate;
    @ApiModelProperty(value = "销售结束日期")
    @ExcelColumn(name="销售结束日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endDate;
    @ApiModelProperty(value = "使用时间类型 0固定时间段 1购买后生效 2指定日期生效", example = "1")
    @ExcelColumn(name="使用时间类型 0固定时间段 1购买后生效 2指定日期生效")
    private Integer useType;
    @ApiModelProperty(value = "使用开始日期")
    @ExcelColumn(name="使用开始日期")
    @ExcelColumn(name="有效期开始",index = 5,width = 16,dateFormat = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date useStartDate;
    @ApiModelProperty(value = "使用结束日期")
    @ExcelColumn(name="使用结束日期")
    @ExcelColumn(name="有效期结束",index = 6,width = 16,dateFormat = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date useEndDate;
    @ApiModelProperty(value = "使用有效天数", example = "1")
    @ExcelColumn(name="使用有效天数")
    private Integer useDays;
    @ApiModelProperty(value = "节假日是否可以 0否 1是", example = "1")
    @ExcelColumn(name="节假日是否可以 0否 1是")
    private Integer useHoliday;
    @ApiModelProperty(value = "工作日是否可以 0否 1是", example = "1")
    @ExcelColumn(name="工作日是否可以 0否 1是")
    private Integer useWorkday;
    @ApiModelProperty(value = "销量总限额", example = "1")
    @ExcelColumn(name="销量总限额")
    private Integer saleLimit;
    @ApiModelProperty(value = "销量每天限额", example = "1")
    @ExcelColumn(name="销量每天限额")
    private Integer saleDayLimit;
    @ApiModelProperty(value = "状态 0正常 1作废 2过期或用完", example = "1")
    @ExcelColumn(name="状态 0正常 1作废 2过期或用完")
    @ExcelColumn(name="套餐状态",index = 7,width = 10,valueMapping = "0=正常;1=作废;2=过期或用完")
    private Integer status;
    @ApiModelProperty(value = "用户编码(关联member)")
    @ExcelColumn(name="用户编码(关联member)")
    private String memberId;
    @ApiModelProperty(value = "关联订单编码(关联goodsorder)")
    @ExcelColumn(name="关联订单编码(关联goodsorder)")
    private String goodsorderId;
    @ApiModelProperty(value = "是否支持自行车订单 0不支持 1支持", example = "1")
    @ExcelColumn(name="是否支持自行车订单 0不支持 1支持")
    private Integer isbike;
    @ApiModelProperty(value = "是否支持电动车 0不支持 1支持", example = "1")
    @ExcelColumn(name="是否支持电动车 0不支持 1支持")
    private Integer iselecbike;
    @ApiModelProperty(value = "用户opneid")
    @ExcelColumn(name="用户信息",index = 3,width = 20)
    @TableField(exist = false)
    private String openid;
    @ApiModelProperty(value = "使用次数")
    @ExcelColumn(name="使用次数",index = 4,width = 20)
    @TableField(exist = false)
    private Integer useTimes;
}
server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -135,4 +135,10 @@
    @ApiModelProperty(value = "是否结算 0 æœªç»“ç®— 1已结算")
    @TableField(exist = false)
    private Integer closeStatus;
    @ApiModelProperty(value = "套餐名称", example = "2023-10-01 15:12:01")
    @TableField(exist = false)
    private String discountName;
}
server/services/src/main/java/com/doumee/dao/business/web/request/GoodsorderBackDTO.java
@@ -21,4 +21,9 @@
    @ApiModelProperty(value = "退款金额")
    private String reason;
    @ApiModelProperty(value = "套餐卡退款类型 0退货退款 1仅退款")
    private Integer backType;
}
server/services/src/main/java/com/doumee/service/business/DiscountService.java
@@ -94,4 +94,6 @@
     * @return long
     */
    long count(Discount discount);
    void updStatus(Discount discount);
}
server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -8,6 +8,7 @@
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.business.vo.GoodsorderExportVO;
import com.doumee.dao.business.vo.GoodsorderTotalDataVO;
import com.doumee.dao.business.web.request.GoodsorderBackDTO;
import com.doumee.dao.business.web.request.GoodsorderCanBanlanceDTO;
import com.doumee.dao.business.web.response.HomeResponse;
import com.doumee.dao.business.web.response.GoodsorderDetailDTO;
@@ -153,7 +154,7 @@
     * é€€æ¬¾
     * @param orderId
     */
    void backGoodsorder(String orderId, BigDecimal money ,String reason);
    void backGoodsorder(GoodsorderBackDTO goodsorderBackDTO);
    /**
     * èŽ·å–å¯é€€æ¬¾ä¿¡æ¯
server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java
@@ -4,17 +4,24 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.DiscountMemberMapper;
import com.doumee.dao.business.join.DiscountMemberJoinMapper;
import com.doumee.dao.business.model.Discount;
import com.doumee.dao.business.model.DiscountMember;
import com.doumee.dao.business.model.Member;
import com.doumee.service.business.DiscountMemberService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
/**
 * ç”¨æˆ·éª‘行套餐卡关联表Service实现
@@ -26,6 +33,9 @@
    @Autowired
    private DiscountMemberMapper discountMemberMapper;
    @Autowired
    private DiscountMemberJoinMapper discountMemberJoinMapper;
    @Override
    public String create(DiscountMember discountMember) {
@@ -87,121 +97,17 @@
    @Override
    public PageData<DiscountMember> findPage(PageWrap<DiscountMember> pageWrap) {
        IPage<DiscountMember> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<DiscountMember> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<DiscountMember> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(DiscountMember::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(DiscountMember::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(DiscountMember::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(DiscountMember::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(DiscountMember::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(DiscountMember::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(DiscountMember::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(DiscountMember::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getInfo() != null) {
            queryWrapper.lambda().eq(DiscountMember::getInfo, pageWrap.getModel().getInfo());
        }
        if (pageWrap.getModel().getCode() != null) {
            queryWrapper.lambda().eq(DiscountMember::getCode, pageWrap.getModel().getCode());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().eq(DiscountMember::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(DiscountMember::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getLimitType() != null) {
            queryWrapper.lambda().eq(DiscountMember::getLimitType, pageWrap.getModel().getLimitType());
        }
        if (pageWrap.getModel().getLimitTime() != null) {
            queryWrapper.lambda().eq(DiscountMember::getLimitTime, pageWrap.getModel().getLimitTime());
        }
        if (pageWrap.getModel().getPrice() != null) {
            queryWrapper.lambda().eq(DiscountMember::getPrice, pageWrap.getModel().getPrice());
        }
        if (pageWrap.getModel().getLinePrice() != null) {
            queryWrapper.lambda().eq(DiscountMember::getLinePrice, pageWrap.getModel().getLinePrice());
        }
        if (pageWrap.getModel().getChannel() != null) {
            queryWrapper.lambda().eq(DiscountMember::getChannel, pageWrap.getModel().getChannel());
        }
        if (pageWrap.getModel().getImgurl() != null) {
            queryWrapper.lambda().eq(DiscountMember::getImgurl, pageWrap.getModel().getImgurl());
        }
        if (pageWrap.getModel().getDescs() != null) {
            queryWrapper.lambda().eq(DiscountMember::getDescs, pageWrap.getModel().getDescs());
        }
        if (pageWrap.getModel().getContent() != null) {
            queryWrapper.lambda().eq(DiscountMember::getContent, pageWrap.getModel().getContent());
        }
        if (pageWrap.getModel().getStartDate() != null) {
            queryWrapper.lambda().ge(DiscountMember::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
            queryWrapper.lambda().le(DiscountMember::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
        }
        if (pageWrap.getModel().getEndDate() != null) {
            queryWrapper.lambda().ge(DiscountMember::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
            queryWrapper.lambda().le(DiscountMember::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
        }
        if (pageWrap.getModel().getUseType() != null) {
            queryWrapper.lambda().eq(DiscountMember::getUseType, pageWrap.getModel().getUseType());
        }
        if (pageWrap.getModel().getUseStartDate() != null) {
            queryWrapper.lambda().ge(DiscountMember::getUseStartDate, Utils.Date.getStart(pageWrap.getModel().getUseStartDate()));
            queryWrapper.lambda().le(DiscountMember::getUseStartDate, Utils.Date.getEnd(pageWrap.getModel().getUseStartDate()));
        }
        if (pageWrap.getModel().getUseEndDate() != null) {
            queryWrapper.lambda().ge(DiscountMember::getUseEndDate, Utils.Date.getStart(pageWrap.getModel().getUseEndDate()));
            queryWrapper.lambda().le(DiscountMember::getUseEndDate, Utils.Date.getEnd(pageWrap.getModel().getUseEndDate()));
        }
        if (pageWrap.getModel().getUseDays() != null) {
            queryWrapper.lambda().eq(DiscountMember::getUseDays, pageWrap.getModel().getUseDays());
        }
        if (pageWrap.getModel().getUseHoliday() != null) {
            queryWrapper.lambda().eq(DiscountMember::getUseHoliday, pageWrap.getModel().getUseHoliday());
        }
        if (pageWrap.getModel().getUseWorkday() != null) {
            queryWrapper.lambda().eq(DiscountMember::getUseWorkday, pageWrap.getModel().getUseWorkday());
        }
        if (pageWrap.getModel().getSaleLimit() != null) {
            queryWrapper.lambda().eq(DiscountMember::getSaleLimit, pageWrap.getModel().getSaleLimit());
        }
        if (pageWrap.getModel().getSaleDayLimit() != null) {
            queryWrapper.lambda().eq(DiscountMember::getSaleDayLimit, pageWrap.getModel().getSaleDayLimit());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(DiscountMember::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getMemberId() != null) {
            queryWrapper.lambda().eq(DiscountMember::getMemberId, pageWrap.getModel().getMemberId());
        }
        if (pageWrap.getModel().getGoodsorderId() != null) {
            queryWrapper.lambda().eq(DiscountMember::getGoodsorderId, pageWrap.getModel().getGoodsorderId());
        }
        if (pageWrap.getModel().getIsbike() != null) {
            queryWrapper.lambda().eq(DiscountMember::getIsbike, pageWrap.getModel().getIsbike());
        }
        if (pageWrap.getModel().getIselecbike() != null) {
            queryWrapper.lambda().eq(DiscountMember::getIselecbike, pageWrap.getModel().getIselecbike());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(discountMemberMapper.selectPage(page, queryWrapper));
        DiscountMember model = pageWrap.getModel();
        queryWrapper.selectAll(DiscountMember.class)
                .leftJoin(Member.class,Member::getId,DiscountMember::getMemberId)
                .like(StringUtils.isNotBlank(model.getCode()),DiscountMember::getCode,model.getCode())
                .like(StringUtils.isNotBlank(model.getName()),DiscountMember::getName,model.getName())
                .like(StringUtils.isNotBlank(model.getOpenid()),Member::getOpenid,model.getOpenid())
                .eq(Objects.nonNull(model.getStatus()),DiscountMember::getStatus,model.getStatus())
                .orderByDesc(DiscountMember::getId);
        return PageData.from(discountMemberJoinMapper.selectJoinPage(page, DiscountMember.class,queryWrapper));
    }
    @Override
server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java
@@ -1,20 +1,37 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
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.Utils;
import com.doumee.dao.business.DiscountMapper;
import com.doumee.dao.business.join.BikeRepairJoinMapper;
import com.doumee.dao.business.join.DiscountJoinMapper;
import com.doumee.dao.business.model.BaseParam;
import com.doumee.dao.business.model.BikeRepair;
import com.doumee.dao.business.model.Discount;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.web.request.BikeRepairDTO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.DiscountService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * éª‘行套餐信息表Service实现
@@ -27,16 +44,90 @@
    @Autowired
    private DiscountMapper discountMapper;
    @Autowired
    private DiscountJoinMapper discountJoinMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    public String create(Discount discount) {
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        this.vaildReq(discount);
        discount.setStatus(Constants.ZERO);
        discount.setIsdeleted(Constants.ZERO);
        discount.setCreateDate(new Date());
        discount.setCreator(userInfo.getId());
        discountMapper.insert(discount);
        return discount.getId();
    }
    public void vaildReq(Discount discount) {
        if(Objects.isNull(discount)
                || StringUtils.isBlank(discount.getName())
                || Objects.isNull(discount.getType())
                || Objects.isNull(discount.getLimitType())
                || (discount.getLimitTime()==Constants.ONE && Objects.isNull(discount.getLimitTime()))
                || Objects.isNull(discount.getPrice())
                || Objects.isNull(discount.getChannel())
                || Objects.isNull(discount.getStartDate())
                || Objects.isNull(discount.getEndDate())
                || Objects.isNull(discount.getUseType())
                || (discount.getUseType()==Constants.ZERO && ( Objects.isNull(discount.getUseStartDate()) || Objects.isNull(discount.getUseEndDate()) ))
                || (discount.getUseType()==Constants.ONE && Objects.isNull(discount.getUseDays()))
                || (discount.getUseType()==Constants.TWO && ( Objects.isNull(discount.getUseStartDate()) || Objects.isNull(discount.getUseDays()) ))
                || (Objects.isNull(discount.getUseHoliday()) || Objects.isNull(discount.getUseWorkday()) )
                || (Objects.isNull(discount.getIsbike()) || Objects.isNull(discount.getIselecbike()) )
        ){
            throw new BusinessException(ResponseStatus.SERVER_ERROR);
        }
        if(discount.getStartDate().getTime()>discount.getEndDate().getTime()){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"销售时段信息错误");
        }
        //固定日期生效
        if(discount.getUseType()==Constants.ZERO &&
                ( discount.getUseStartDate().getTime()>discount.getUseEndDate().getTime() ||
                        discount.getUseStartDate().getTime() < discount.getStartDate().getTime() ||
                        discount.getUseEndDate().getTime() > discount.getEndDate().getTime()
                ) ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"使用时段信息错误");
        }
        //指定日期生效
        if(discount.getUseType()==Constants.TWO &&
                ( discount.getUseStartDate().getTime()<discount.getStartDate().getTime() ||
                        discount.getUseStartDate().getTime() > discount.getEndDate().getTime()
                ) ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"使用时段信息错误");
        }
    }
    @Override
    public void deleteById(String id) {
        discountMapper.deleteById(id);
        Discount discount = discountMapper.selectById(id);
        if(Objects.isNull(discount)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(Constants.equalsInteger(discount.getStatus(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非禁用数据,无法进行删除");
        }
        discountMapper.update(null,new UpdateWrapper<Discount>().lambda().set(Discount::getIsdeleted,Constants.ONE).eq(Discount::getId,discount.getId()));
    }
    @Override
    public void updStatus(Discount discount) {
        if(Objects.isNull(discount)
            || StringUtils.isBlank(discount.getId())
            || Objects.isNull(discount.getStatus())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        discountMapper.update(null,new UpdateWrapper<Discount>().lambda().set(Discount::getStatus,discount.getStatus()).eq(Discount::getId,discount.getId()));
    }
    @Override
    public void delete(Discount discount) {
@@ -69,7 +160,20 @@
    @Override
    public Discount findById(String id) {
        return discountMapper.selectById(id);
        Discount discount = discountJoinMapper.selectOne(new MPJLambdaWrapper<Discount>()
                .select(" (select count(1) from goodsorder g where g.obj_type = 0 and g.obj_id = t.id and g.pay_status = 1 ) ",Discount::getSaleNum)
                .leftJoin(SystemUser.class,SystemUser::getId,Discount::getCreator)
                .eq(Discount::getId,id)
        );
        if(Objects.isNull(discount)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isNotBlank(discount.getImgurl())){
            String path =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FILE_DIR).getCode()+
                    systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.DISCOUNT).getCode();
            discount.setFullImgUrl(path + discount.getImgurl());
        }
        return discount;
    }
    @Override
@@ -87,112 +191,20 @@
    @Override
    public PageData<Discount> findPage(PageWrap<Discount> pageWrap) {
        IPage<Discount> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Discount> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<Discount> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Discount::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(Discount::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(Discount::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(Discount::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(Discount::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(Discount::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(Discount::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(Discount::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getInfo() != null) {
            queryWrapper.lambda().eq(Discount::getInfo, pageWrap.getModel().getInfo());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().eq(Discount::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Discount::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getLimitType() != null) {
            queryWrapper.lambda().eq(Discount::getLimitType, pageWrap.getModel().getLimitType());
        }
        if (pageWrap.getModel().getLimitTime() != null) {
            queryWrapper.lambda().eq(Discount::getLimitTime, pageWrap.getModel().getLimitTime());
        }
        if (pageWrap.getModel().getPrice() != null) {
            queryWrapper.lambda().eq(Discount::getPrice, pageWrap.getModel().getPrice());
        }
        if (pageWrap.getModel().getLinePrice() != null) {
            queryWrapper.lambda().eq(Discount::getLinePrice, pageWrap.getModel().getLinePrice());
        }
        if (pageWrap.getModel().getChannel() != null) {
            queryWrapper.lambda().eq(Discount::getChannel, pageWrap.getModel().getChannel());
        }
        if (pageWrap.getModel().getImgurl() != null) {
            queryWrapper.lambda().eq(Discount::getImgurl, pageWrap.getModel().getImgurl());
        }
        if (pageWrap.getModel().getDescs() != null) {
            queryWrapper.lambda().eq(Discount::getDescs, pageWrap.getModel().getDescs());
        }
        if (pageWrap.getModel().getContent() != null) {
            queryWrapper.lambda().eq(Discount::getContent, pageWrap.getModel().getContent());
        }
        if (pageWrap.getModel().getStartDate() != null) {
            queryWrapper.lambda().ge(Discount::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
            queryWrapper.lambda().le(Discount::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
        }
        if (pageWrap.getModel().getEndDate() != null) {
            queryWrapper.lambda().ge(Discount::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
            queryWrapper.lambda().le(Discount::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
        }
        if (pageWrap.getModel().getUseType() != null) {
            queryWrapper.lambda().eq(Discount::getUseType, pageWrap.getModel().getUseType());
        }
        if (pageWrap.getModel().getUseStartDate() != null) {
            queryWrapper.lambda().ge(Discount::getUseStartDate, Utils.Date.getStart(pageWrap.getModel().getUseStartDate()));
            queryWrapper.lambda().le(Discount::getUseStartDate, Utils.Date.getEnd(pageWrap.getModel().getUseStartDate()));
        }
        if (pageWrap.getModel().getUseEndDate() != null) {
            queryWrapper.lambda().ge(Discount::getUseEndDate, Utils.Date.getStart(pageWrap.getModel().getUseEndDate()));
            queryWrapper.lambda().le(Discount::getUseEndDate, Utils.Date.getEnd(pageWrap.getModel().getUseEndDate()));
        }
        if (pageWrap.getModel().getUseDays() != null) {
            queryWrapper.lambda().eq(Discount::getUseDays, pageWrap.getModel().getUseDays());
        }
        if (pageWrap.getModel().getUseHoliday() != null) {
            queryWrapper.lambda().eq(Discount::getUseHoliday, pageWrap.getModel().getUseHoliday());
        }
        if (pageWrap.getModel().getUseWorkday() != null) {
            queryWrapper.lambda().eq(Discount::getUseWorkday, pageWrap.getModel().getUseWorkday());
        }
        if (pageWrap.getModel().getSaleLimit() != null) {
            queryWrapper.lambda().eq(Discount::getSaleLimit, pageWrap.getModel().getSaleLimit());
        }
        if (pageWrap.getModel().getSaleDayLimit() != null) {
            queryWrapper.lambda().eq(Discount::getSaleDayLimit, pageWrap.getModel().getSaleDayLimit());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(Discount::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getIsbike() != null) {
            queryWrapper.lambda().eq(Discount::getIsbike, pageWrap.getModel().getIsbike());
        }
        if (pageWrap.getModel().getIselecbike() != null) {
            queryWrapper.lambda().eq(Discount::getIselecbike, pageWrap.getModel().getIselecbike());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(discountMapper.selectPage(page, queryWrapper));
        Discount modele = pageWrap.getModel();
        queryWrapper.selectAll(Discount.class)
                .select(" (select count(1) from goodsorder g where g.obj_type = 0 and g.obj_id = t.id and g.pay_status = 1 ) ",Discount::getSaleNum)
                .leftJoin(SystemUser.class,SystemUser::getId,Discount::getCreator)
                .like(StringUtils.isNotEmpty(pageWrap.getModel().getName()),Discount::getName,pageWrap.getModel().getName())
                .eq(Objects.nonNull(modele.getStatus()),Discount::getStatus, modele.getStatus())
                .eq(Objects.nonNull(modele.getBikeOrElec()) && Constants.equalsInteger(modele.getBikeOrElec(),Constants.ONE),Discount::getIsbike, Constants.ONE)
                .eq(Objects.nonNull(modele.getBikeOrElec()) && Constants.equalsInteger(modele.getBikeOrElec(),Constants.TWO),Discount::getIselecbike, Constants.ONE)
                .eq(Discount::getIsdeleted, Constants.ZERO)
                .eq( pageWrap.getModel().getStatus() !=null,BikeRepair::getStatus,pageWrap.getModel().getStatus());
        queryWrapper.orderByDesc(Discount::getCreateDate);
        return PageData.from(discountJoinMapper.selectJoinPage(page, Discount.class,queryWrapper));
    }
    @Override
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -30,10 +30,7 @@
import com.doumee.dao.business.model.MemberRides;
import com.doumee.dao.business.vo.GoodsorderExportVO;
import com.doumee.dao.business.vo.GoodsorderTotalDataVO;
import com.doumee.dao.business.web.request.BikeRepairDTO;
import com.doumee.dao.business.web.request.GoodsorderCanBanlanceDTO;
import com.doumee.dao.business.web.request.MemberRidesQuery;
import com.doumee.dao.business.web.request.RefundDTO;
import com.doumee.dao.business.web.request.*;
import com.doumee.dao.business.web.response.*;
import com.doumee.dao.business.join.MemberRidesJoinMapper;
import com.doumee.dao.business.model.*;
@@ -78,6 +75,12 @@
    @Autowired
    private GoodsorderMapper goodsorderMapper;
    @Autowired
    private DiscountMemberMapper discountMemberMapper;
    @Autowired
    private DiscountLogMapper discountLogMapper;
    @Autowired
    GoodsorderJoinMapper goodsorderJoinMapper;
@@ -241,6 +244,8 @@
        }
        return PageData.from(goodsorderExportVOIPage);
    }
    @Override
    public   List<GoodsorderExportVO> findExportAccountDetailPage(Goodsorder model){
        model.setPayStatus(Constants.ONE); //只查询支付成功的
@@ -288,7 +293,9 @@
        MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Goodsorder.class);
        queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid);
        queryWrapper.selectAs(DiscountMember::getName, Goodsorder::getDiscountName);
        queryWrapper.leftJoin(Member.class, Member::getId  ,Goodsorder::getMemberId);
        queryWrapper.leftJoin(DiscountMember.class, DiscountMember::getId  ,Goodsorder::getObjId);
        queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id  and r.status=2 ) as refund_date");
        queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status=2) as refund_money");
        //时间段筛选
@@ -317,6 +324,7 @@
        IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Goodsorder> queryWrapper = initQueryParamByModel(pageWrap.getModel());
        queryWrapper.orderByDesc(Goodsorder::getPayDate);
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Goodsorder::getType,pageWrap.getModel().getType());
        queryWrapper.select("(select  sum(er.discount_price) from member_rides  er  where er.ordre_id=t.id and er.isdeleted=0) as discountMoney," +
                "(select  er.status from member_rides  er  where er.ordre_id=t.id order by er.create_date desc limit 1) as memberRidesStatus");
        if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ZERO)){
@@ -325,6 +333,7 @@
        if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ONE)){
            queryWrapper.eq(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey());
        }
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDiscountName()),Goodsorder::getDiscountName,pageWrap.getModel().getDiscountName());
        IPage<Goodsorder> goodsorderIPage = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper);
        if (!CollectionUtils.isEmpty(goodsorderIPage.getRecords())){
            goodsorderIPage.getRecords().forEach(s->{
@@ -336,6 +345,9 @@
        }
        return PageData.from(goodsorderIPage);
    }
    @Override
@@ -811,9 +823,16 @@
    }
    @Override
    public void backGoodsorder(String orderId, BigDecimal money,String reason) {
    public void backGoodsorder(GoodsorderBackDTO goodsorderBackDTO) {
        LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
        if(Objects.isNull(goodsorderBackDTO)
        || StringUtils.isBlank(goodsorderBackDTO.getOrderId())
                || StringUtils.isBlank(goodsorderBackDTO.getReason())
                || Objects.isNull(goodsorderBackDTO.getBackType())
                || Objects.isNull(goodsorderBackDTO.getMoney())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Goodsorder goodsorder = goodsorderMapper.selectById(goodsorderBackDTO.getOrderId());
        if(goodsorder == null){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,订单信息不存在,请刷新页面重试!");
        }
@@ -822,7 +841,7 @@
        }
        QueryWrapper<Refund> wrapper = new QueryWrapper<>();
        wrapper.lambda()
                .eq(Refund::getObjId,orderId)
                .eq(Refund::getObjId,goodsorderBackDTO.getOrderId())
                .eq(Refund::getStatus,Constants.TWO)
                .eq(Refund::getIsdeleted,Constants.ZERO) ;
        wrapper.select("sum(money) as money").last(" limit 1");
@@ -830,18 +849,42 @@
        BigDecimal refundMoney = total == null?new BigDecimal(0):Constants.formatDecimalNum(total.getMoney());
        //可退剩余 å•位元
        BigDecimal canBalance =Constants.translateMoney(Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refundMoney));
        if(canBalance.compareTo(money) >= Constants.ZERO){
        if(canBalance.compareTo(goodsorderBackDTO.getMoney()) >= Constants.ZERO){
            RefundDTO refundDTO = new RefundDTO();
            refundDTO.setOrderId(orderId);
            refundDTO.setOrderId(goodsorderBackDTO.getOrderId());
            refundDTO.setCanBalance(canBalance.multiply(new BigDecimal(100)));
            refundDTO.setRefundAmount(money.multiply(new BigDecimal(100)));
            refundDTO.setRefundAmount(goodsorderBackDTO.getMoney().multiply(new BigDecimal(100)));
            refundDTO.setTotalAmount(goodsorder.getMoney());
            refundDTO.setMemberId(goodsorder.getMemberId());
            refundDTO.setCreator(principal.getId());
            refundDTO.setReason(reason);
            refundDTO.setReason(goodsorderBackDTO.getReason());
            refundDTO.setType(Constants.REFUND_TYPE.BACK.getKey());
            //退货退款 æŸ¥çœ‹å¥—餐订单状态 æ›´æ–°è®¢å•信息
            if(Constants.equalsInteger(goodsorderBackDTO.getBackType(),Constants.ZERO)&&Constants.equalsInteger(goodsorder.getType(),Constants.ONE)){
                DiscountMember discountMember = discountMemberMapper.selectById(goodsorder.getObjId());
                if(Objects.isNull(discountMember)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到套餐卡信息");
                }
                if(Constants.equalsInteger(discountMember.getStatus(),Constants.ZERO)){
                    discountMemberMapper.update(null,new UpdateWrapper<DiscountMember>().lambda()
                            .set(DiscountMember::getStatus,Constants.ONE)
                            .eq(DiscountMember::getId,discountMember.getId())
                    );
                    //操作日志
                    DiscountLog discountLog = new DiscountLog();
                    discountLog.setIsdeleted(Constants.ZERO);
                    discountLog.setCreator(principal.getId());
                    discountLog.setCreateDate(new Date());
                    discountLog.setDiscountMemberId(discountMember.getId());
                    discountLog.setType(Constants.ONE);
                    discountLog.setEditInfo("退货退卡");
                    discountLog.setGoodsorderId(goodsorderBackDTO.getOrderId());
                    discountLogMapper.insert(discountLog);
                }
            }
            //发起退款申请
            wxMiniUtilService.wxRefund(refundDTO);
        }else {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,退款金额不允许超过"+canBalance+"元");
        }
server/web/src/main/java/com/doumee/jtt808/web/controller/ExceptionController.java
@@ -29,11 +29,11 @@
    private static final Pattern compile = Pattern.compile("'\\w*'");
    @ExceptionHandler(Exception.class)
    public APIResult<?> onException(Exception e) {
        log.error("系统异常", e);
        return new APIResult<>(e);
    }
//    @ExceptionHandler(Exception.class)
//    public APIResult<?> onException(Exception e) {
//        log.error("系统异常", e);
//        return new APIResult<>(e);
//    }
    @ExceptionHandler(APIException.class)
    public APIResult<?> onAPIException(APIException e) {