Browse Source

merge

release_toaliyun_real
Burce 6 years ago
parent
commit
2a155806d8
33 changed files with 392 additions and 128 deletions
  1. +3
    -2
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxFloatingLayerController.java
  2. +23
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/mem/WxScoreHistoryController.java
  3. +2
    -0
      mallinkAdmin/src/main/resources/db/migration/V201909271530__G_MALL.sql
  4. +1
    -0
      mallinkAdmin/src/main/resources/db/migration/V201909271732__G_ALTER_CREDIT_HISTORY.sql
  5. +6
    -2
      mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java
  6. +1
    -0
      mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java
  7. +3
    -3
      mallinkSchedule/src/main/java/com/iformall/schedule/FloatingLayerSchedule.java
  8. +5
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  9. +2
    -2
      mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java
  10. +1
    -1
      mallinkService/src/main/java/com/iformall/domain/vo/UserTradeRecordVo.java
  11. +3
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java
  12. +39
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/WxFloatingLayerVO.java
  13. +13
    -4
      mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantTradeDetailVo.java
  14. +35
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumCUserBasicInfoStatus.java
  15. +1
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumCarSupport.java
  16. +5
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxFloatingLayerMapper.java
  17. +4
    -4
      mallinkService/src/main/java/com/iformall/service/WxCouponService.java
  18. +2
    -1
      mallinkService/src/main/java/com/iformall/service/WxFloatingLayerService.java
  19. +9
    -7
      mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java
  20. +5
    -5
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java
  21. +8
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java
  22. +2
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java
  23. +7
    -7
      mallinkService/src/main/java/com/iformall/service/impl/WxCuserFloatingLayerServiceImpl.java
  24. +15
    -6
      mallinkService/src/main/java/com/iformall/service/impl/WxFloatingLayerServiceImpl.java
  25. +16
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java
  26. +1
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  27. +49
    -13
      mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java
  28. +1
    -1
      mallinkService/src/main/resources/mapper/WxBillSettleBillMapper.xml
  29. +3
    -3
      mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml
  30. +0
    -0
      mallinkService/src/main/resources/mapper/WxCuserFloatingLayerMapper.xml
  31. +0
    -51
      mallinkService/src/main/resources/mapper/WxFloatingLayer.xml
  32. +104
    -0
      mallinkService/src/main/resources/mapper/WxFloatingLayerMapper.xml
  33. +23
    -10
      mallinkService/src/main/resources/mapper/WxMerchantMapper.xml

+ 3
- 2
mallinkAdmin/src/main/java/com/iformall/controller/market/WxFloatingLayerController.java View File

@@ -7,6 +7,7 @@ import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.BaseEntity;
import com.iformall.domain.po.WxFloatingLayer;
import com.iformall.domain.vo.WxFloatingLayerVO;
import com.iformall.enums.EnumFloatingLayerStatus;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxFloatingLayerService;
@@ -29,7 +30,7 @@ public class WxFloatingLayerController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private WxFloatingLayerService wxFloatingLayerService;
WxFloatingLayerService wxFloatingLayerService;

@ApiOperation("分页列表接口")
@GetMapping("/list")
@@ -41,7 +42,7 @@ public class WxFloatingLayerController extends BaseController {
logger.debug("[" + getIpAddr() + "] WxFloatingLayerController::list");
wxFloatingLayer.setTenantId(getTenantId());
wxFloatingLayer.setSortColumns(BaseEntity.SortField.CreateTime_DESC, BaseEntity.SortField.Id_DESC);
final PageInfo<WxFloatingLayer> page = wxFloatingLayerService.listAsPage(wxFloatingLayer, pageNum, pageSize);
final PageInfo<WxFloatingLayerVO> page = wxFloatingLayerService.listAsPage(wxFloatingLayer, pageNum, pageSize);
return new ResultData(page);
}



+ 23
- 0
mallinkAdmin/src/main/java/com/iformall/controller/mem/WxScoreHistoryController.java View File

@@ -2,10 +2,14 @@ package com.iformall.controller.mem;

import com.github.pagehelper.PageInfo;
import com.iformall.annotation.SystemControllerLog;
import com.iformall.common.ErrorCode;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxScoreHistory;
import com.iformall.enums.EnumCUserBasicInfoStatus;
import com.iformall.service.WxCUserBasicInfoService;
import com.iformall.service.WxScoreHistoryService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -23,6 +27,10 @@ public class WxScoreHistoryController extends BaseController {
@Autowired
private WxScoreHistoryService wxScoreHistoryService;

@Autowired
private WxCUserBasicInfoService wxCUserBasicInfoService;


@ApiOperation("分页列表接口")
@GetMapping("list")
@ApiImplicitParams({
@@ -43,6 +51,9 @@ public class WxScoreHistoryController extends BaseController {
logger.debug("[" + getIpAddr() + "] WxScoreHistoryController::add");
//Assert.notNull(wxScoreHistory.getName(), "角色名不能为空");
//Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
if (checkMemberStatus(wxScoreHistory.getCUserId())) {
return new ResultData(ErrorCode.MEMBER_IS_LOCKED);
}
wxScoreHistoryService.saveOrUpdate(wxScoreHistory);
return new ResultData();
}
@@ -52,10 +63,22 @@ public class WxScoreHistoryController extends BaseController {
@SystemControllerLog(description = "成长值-更新")
public ResultData update(@RequestBody WxScoreHistory wxScoreHistory) {
logger.debug("[" + getIpAddr() + "] WxScoreHistoryController::update");
if (checkMemberStatus(wxScoreHistory.getCUserId())) {
return new ResultData(ErrorCode.MEMBER_IS_LOCKED);
}
wxScoreHistoryService.saveOrUpdate(wxScoreHistory);
return new ResultData();
}

public boolean checkMemberStatus(Long userId) {
WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(userId);
if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + userId);
return true;
}
return false;
}

@ApiOperation("根据id删除接口")
@GetMapping("/del")
@ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true)


+ 2
- 0
mallinkAdmin/src/main/resources/db/migration/V201909271530__G_MALL.sql View File

@@ -0,0 +1,2 @@
alter table wx_mall
change column `introduction` `introduction` varchar(1024) DEFAULT '' not null COMMENT '简介';

+ 1
- 0
mallinkAdmin/src/main/resources/db/migration/V201909271732__G_ALTER_CREDIT_HISTORY.sql View File

@@ -0,0 +1 @@
alter table wx_credit_history change column buserId buser_id bigint(20) default 0 not null comment 'B端微信用户ID';

+ 6
- 2
mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java View File

@@ -28,8 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@@ -66,6 +64,12 @@ public class WxOrderController extends BaseController {
if (resultData != null) return resultData;

WxCUser user = getUser();
WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(user.getId());
if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + user.getId());
return new ResultData(ErrorCode.MEMBER_IS_LOCKED);
}

resultData = couponUserCheck(user, wxCouponChannelService.findDetailVo(orderSaveDto.getCouponChannelId()));
if (resultData != null) return resultData;



+ 1
- 0
mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java View File

@@ -668,6 +668,7 @@ public class WxUserGrantController extends BaseController {
userVo.setBirthdate(wxCUserBasicInfo.getBirthdate());
userVo.setSex(wxCUserBasicInfo.getSex());
userVo.setAddress(wxCUserBasicInfo.getAddress());
userVo.setStatus(wxCUserBasicInfo.getStatus());
}

return new ResultData(userVo);


+ 3
- 3
mallinkSchedule/src/main/java/com/iformall/schedule/FloatingLayerSchedule.java View File

@@ -1,6 +1,6 @@
package com.iformall.schedule;

import com.iformall.mapper.WxFloatingLayerMapper;
import com.iformall.mapper.WxCuserFloatingLayerMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +16,7 @@ public class FloatingLayerSchedule {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private WxFloatingLayerMapper wxFloatingLayerMapper;
private WxCuserFloatingLayerMapper wxCuserFloatingLayerMapper;


/**
@@ -25,7 +25,7 @@ public class FloatingLayerSchedule {
@Scheduled(cron = "0 48 10 * * ?")
public void sendMsg() {
logger.info("删除前一天浮层用户数据开始");
wxFloatingLayerMapper.delete(null);
wxCuserFloatingLayerMapper.delete(null);
logger.info("删除前一天浮层用户数据结束");

}


+ 5
- 0
mallinkService/src/main/java/com/iformall/common/ErrorCode.java View File

@@ -525,6 +525,11 @@ public enum ErrorCode{
// 招商管理 53000 begin
CUSTOMER_NOT_FOUND(53000, "客户信息不存在"),
// 招商管理 53999 end
/**
* 首页浮屠广告
*/
FLOATING_LAYER_FOUND(60001, "首页广告已存在,请先下线再重新投放"),


;



+ 2
- 2
mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java View File

@@ -126,10 +126,10 @@ public class WxMerchant extends BaseEntity {
private String talkUserAux;

@io.swagger.annotations.ApiModelProperty(value = "开始时间", name = "startTime")
private transient Date starttime;
private transient Date starttime;

@io.swagger.annotations.ApiModelProperty(value = "结束时间", name = "endTime")
private transient Date endtime;
private transient Date endtime;

@io.swagger.annotations.ApiModelProperty(value = "昵称", name = "userName")
private transient String userName;


+ 1
- 1
mallinkService/src/main/java/com/iformall/domain/vo/UserTradeRecordVo.java View File

@@ -17,7 +17,7 @@ public class UserTradeRecordVo implements Serializable{
private String sale;
@Excel(name="面额",width = 20,orderNum = "3")
private String price;
@Excel(name="状态",width = 20,orderNum = "4")
@Excel(name="状态",width = 20,orderNum = "4")
private String status;
@Excel(name="交易时间",width = 20,orderNum = "5")
private String tradeTime;


+ 3
- 0
mallinkService/src/main/java/com/iformall/domain/vo/WxCUserVo.java View File

@@ -36,4 +36,7 @@ public class WxCUserVo extends WxCUser {
private Integer upgradePercent;
@io.swagger.annotations.ApiModelProperty(value="升级分",name="upgradeScore")
private Integer upgradeScore;

@io.swagger.annotations.ApiModelProperty(value = "0正常1锁定", name = "status")
private Integer status;
}

+ 39
- 0
mallinkService/src/main/java/com/iformall/domain/vo/WxFloatingLayerVO.java View File

@@ -0,0 +1,39 @@
package com.iformall.domain.vo;

import com.iformall.domain.po.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

@Data
@EqualsAndHashCode(callSuper = true)
public class WxFloatingLayerVO extends BaseEntity {
private static final long serialVersionUID = 1L;

protected Long id;

@io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId")
private String tenantId;

@io.swagger.annotations.ApiModelProperty(value = "封面图", name = "coverImg")
private String coverImg;

@io.swagger.annotations.ApiModelProperty(value = "产品ID", name = "produceId")
private Long produceId;

@io.swagger.annotations.ApiModelProperty(value = "小程序跳转路径", name = "pagePath")
private String pagePath;

@io.swagger.annotations.ApiModelProperty(value = "0上线 1下线", name = "status")
private Integer status;

@io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createTime")
private Date createTime;

@io.swagger.annotations.ApiModelProperty(value = "更新时间", name = "updateTime")
private Date updateTime;

@io.swagger.annotations.ApiModelProperty(value = "名称", name = "title")
private String title;
}

+ 13
- 4
mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantTradeDetailVo.java View File

@@ -23,15 +23,12 @@ public class WxMerchantTradeDetailVo extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value = "券名称", name = "couponName")
private String couponName;

@Excel(name="券价格",width = 20,orderNum = "4")
@io.swagger.annotations.ApiModelProperty(value = "券价格", name = "couponSale")
private Integer couponSale;

@Excel(name="券面额",width = 20,orderNum = "5")
@io.swagger.annotations.ApiModelProperty(value = "核销券面额", name = "couponPrice")
private Integer couponPrice;

@Excel(name="消费金额",width = 20,orderNum = "6")
@io.swagger.annotations.ApiModelProperty(value = "消费金额", name = "tradeAmt")
private Integer tradeAmt;

@@ -40,6 +37,18 @@ public class WxMerchantTradeDetailVo extends BaseEntity {

@Excel(name="交易时间",width = 20,orderNum = "7")
@io.swagger.annotations.ApiModelProperty(value = "交易时间", name = "tradeDate")
private Date tradeDateStr;
private String tradeDateStr;



@Excel(name="券价格",width = 20,orderNum = "4")
private String couponSaleStr;

@Excel(name="券面额",width = 20,orderNum = "5")
private String couponPriceStr;

@Excel(name="消费金额",width = 20,orderNum = "6")
private String tradeAmtStr;


}

+ 35
- 0
mallinkService/src/main/java/com/iformall/enums/EnumCUserBasicInfoStatus.java View File

@@ -0,0 +1,35 @@
package com.iformall.enums;

/**
* Created by Stormeye on 2018/08/09.
*/
public enum EnumCUserBasicInfoStatus {

NORMAL(0, "正常"),
LOCKED(1, "锁定"),;

public static EnumCUserBasicInfoStatus getEnum(Integer code) {
for (EnumCUserBasicInfoStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumCUserBasicInfoStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 1
- 1
mallinkService/src/main/java/com/iformall/enums/EnumCarSupport.java View File

@@ -8,7 +8,7 @@ public enum EnumCarSupport {
// 0-不支持 1-ETCP

NOCAR(0, "暂未支持"),
ETCP(1, "ETCP"),
CAR(1, "停车支持"),
;

public static EnumCarSupport getEnum(Integer code) {


+ 5
- 0
mallinkService/src/main/java/com/iformall/mapper/WxFloatingLayerMapper.java View File

@@ -2,6 +2,7 @@ package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxFloatingLayer;
import com.iformall.domain.vo.WxFloatingLayerVO;

import java.util.List;

@@ -12,4 +13,8 @@ public interface WxFloatingLayerMapper extends CommonMapper<WxFloatingLayer, Lon

List<WxFloatingLayer> findList(WxFloatingLayer wxFloatingLayer);

List<WxFloatingLayerVO> findListVO(WxFloatingLayer wxFloatingLayer);

void updateStatus(Long couponId);

}

+ 4
- 4
mallinkService/src/main/java/com/iformall/service/WxCouponService.java View File

@@ -209,18 +209,18 @@ public interface WxCouponService {
* 库存减少
*
* @param id 券ID
* @param remainInventory 当前库存
* @param number 减少数量
* @param remainInventory 当前库存
*/
void reduceRemainInventory(Long id, Integer remainInventory, Integer number);
void reduceRemainInventory(Long id, Integer number, Integer remainInventory);

/**
* 库存退回
*
* @param id 券ID
* @param remainInventory 当前库存
* @param number 回退数量
* @param remainInventory 当前库存
*/
void backRemainInventory(Long id, Integer remainInventory, Integer number);
void backRemainInventory(Long id, Integer number, Integer remainInventory);

}

+ 2
- 1
mallinkService/src/main/java/com/iformall/service/WxFloatingLayerService.java View File

@@ -3,6 +3,7 @@ package com.iformall.service;
import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxFloatingLayer;
import com.iformall.domain.vo.WxFloatingLayerVO;

/**
* @author gongbiao
@@ -17,7 +18,7 @@ public interface WxFloatingLayerService {
* @param pageSize
* @return
*/
PageInfo<WxFloatingLayer> listAsPage(WxFloatingLayer record, Integer pageIndex, Integer pageSize);
PageInfo<WxFloatingLayerVO> listAsPage(WxFloatingLayer record, Integer pageIndex, Integer pageSize);

/**
* 根据Id获得实体


+ 9
- 7
mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java View File

@@ -849,13 +849,15 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService {
Date createDate = oldUserBase.getCreateDate() == null ? new Date() : oldUserBase.getCreateDate();
oldUserBase.setUpdateDate(userBase.getUpdateDate() == null ? updateDate : userBase.getUpdateDate());
oldUserBase.setCreateDate(userBase.getCreateDate() == null ? createDate : userBase.getCreateDate());
// 成长值
if(points != null) {
oldUserBase.setPoins(points);
}
// 覆盖原积分
if(credit != null) {
oldUserBase.setCredit(credit);
if (oldUserBase.getStatus().equals(EnumCUserBasicInfoStatus.NORMAL.getCode())) {
// 成长值
if (points != null) {
oldUserBase.setPoins(points);
}
// 覆盖原积分
if (credit != null) {
oldUserBase.setCredit(credit);
}
}
} else {
userBase.setId(idWorker.nextId());


+ 5
- 5
mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java View File

@@ -13,10 +13,7 @@ import com.iformall.domain.vo.WxCouponChannelAddVo;
import com.iformall.domain.vo.WxCouponChannelVo;
import com.iformall.domain.vo.WxMerchantVo;
import com.iformall.enums.*;
import com.iformall.mapper.WxCardInfoMapper;
import com.iformall.mapper.WxCouponChannelMapper;
import com.iformall.mapper.WxCouponMerchantMapper;
import com.iformall.mapper.WxMerchantMapper;
import com.iformall.mapper.*;
import com.iformall.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,6 +43,8 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService {
QrCodeService qrCodeService;
@Autowired
WxCardInfoMapper wxCardInfoMapper;
@Autowired
WxFloatingLayerMapper wxFloatingLayerMapper;

/**
* B端业务端
@@ -105,7 +104,8 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService {
wxOrderService.updateOrderGroupStatusByCouponChannelId(record.getId(), record.getTenantId(), EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode());
//修改卡状态
wxCardInfoMapper.updateTransferStatusByCouponId(orignal.getCouponId());

//浮层下架
wxFloatingLayerMapper.updateStatus(orignal.getCouponId());
}
}
record.setUpdateDate(new Date());


+ 8
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java View File

@@ -179,7 +179,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
}

//更新库存
wxCouponService.reduceRemainInventory(wxCouponOfDb.getId(), wxCouponOfDb.getRemainInventory(), merchantLnventory);
wxCouponService.reduceRemainInventory(wxCouponOfDb.getId(), merchantLnventory, wxCouponOfDb.getRemainInventory());
}

@Override
@@ -208,7 +208,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
}
//退回coupon库存
if(merchantRemain!=0) {
wxCouponService.backRemainInventory(queryById.getId(), wxCouponOfDb.getRemainInventory(), merchantRemain);
wxCouponService.backRemainInventory(queryById.getId(), merchantRemain, wxCouponOfDb.getRemainInventory());
}
}
wxCouponSendMapper.updateById(record);
@@ -310,6 +310,12 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
return false;
}

WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectById(cUserId);
if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + cUserId);
return false;
}

//查询开关是否打开
WxCouponSendConfig wxCouponSendConfig = new WxCouponSendConfig();
wxCouponSendConfig.setSendType(type.getCode());


+ 2
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java View File

@@ -668,7 +668,7 @@ import java.util.stream.Collectors;

@Override
@Transactional(isolation= Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
public void reduceRemainInventory(Long id, Integer remainInventory, Integer number) {
public void reduceRemainInventory(Long id, Integer number, Integer remainInventory) {
int num = wxCouponMapper.reduceInventory(id, number, remainInventory);
if (num == 0) {
throw new MallinkException(ErrorCode.ORDER_SAVE_ERR);
@@ -677,7 +677,7 @@ import java.util.stream.Collectors;

@Override
@Transactional(isolation= Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
public void backRemainInventory(Long id, Integer remainInventory, Integer number) {
public void backRemainInventory(Long id, Integer number, Integer remainInventory) {
int num = wxCouponMapper.backInventory(id, number, remainInventory);
if (num == 0) {
throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL);


+ 7
- 7
mallinkService/src/main/java/com/iformall/service/impl/WxCuserFloatingLayerServiceImpl.java View File

@@ -25,13 +25,13 @@ public class WxCuserFloatingLayerServiceImpl implements WxCuserFloatingLayerServ
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
WxCuserFloatingLayerMapper WxCuserFloatingLayerMapper;
WxCuserFloatingLayerMapper wxCuserFloatingLayerMapper;

@Autowired
WxFloatingLayerMapper WxFloatingLayerMapper;
WxFloatingLayerMapper wxFloatingLayerMapper;

@Autowired
WxCUserMapper WxCUserMapper;
WxCUserMapper wxCUserMapper;


@Override
@@ -39,14 +39,14 @@ public class WxCuserFloatingLayerServiceImpl implements WxCuserFloatingLayerServ
//1 查看是否存在用户,用户不存在 直接返回浮层信息
WxCUser user = new WxCUser();
user.setOpenId(openId);
WxCUser byOpenId = WxCUserMapper.findByOpenId(user);
WxCUser byOpenId = wxCUserMapper.findByOpenId(user);
if (byOpenId == null) {
return getWxFloatingLayer();
}
//2 用户存在 查看是否已有弹出记录 没有 保存记录后返回浮层信息
WxCuserFloatingLayer wxCuserFloatingLayerQuery = new WxCuserFloatingLayer();
wxCuserFloatingLayerQuery.setUserId(byOpenId.getId());
WxCuserFloatingLayer wxCuserFloatingLayer = WxCuserFloatingLayerMapper.selectOne(new QueryWrapper<>(wxCuserFloatingLayerQuery));
WxCuserFloatingLayer wxCuserFloatingLayer = wxCuserFloatingLayerMapper.selectOne(new QueryWrapper<>(wxCuserFloatingLayerQuery));
if (wxCuserFloatingLayer == null) {
saveCuserFloatingLayer(byOpenId);
return getWxFloatingLayer();
@@ -62,12 +62,12 @@ public class WxCuserFloatingLayerServiceImpl implements WxCuserFloatingLayerServ
wxCuserFloatingLayer.setUserId(wxCUser.getId());
wxCuserFloatingLayer.setTenantId(wxCUser.getTenantId());
wxCuserFloatingLayer.setCreateTime(new Date());
WxCuserFloatingLayerMapper.insert(wxCuserFloatingLayer);
wxCuserFloatingLayerMapper.insert(wxCuserFloatingLayer);
}

public WxFloatingLayer getWxFloatingLayer() {
WxFloatingLayer wxFloatingLayer = new WxFloatingLayer();
wxFloatingLayer.setStatus(EnumFloatingLayerStatus.STATUS_THROW_IN.getCode());
return WxFloatingLayerMapper.selectOne(new QueryWrapper<>(wxFloatingLayer));
return wxFloatingLayerMapper.selectOne(new QueryWrapper<>(wxFloatingLayer));
}
}

+ 15
- 6
mallinkService/src/main/java/com/iformall/service/impl/WxFloatingLayerServiceImpl.java View File

@@ -1,5 +1,6 @@
package com.iformall.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode;
@@ -7,6 +8,7 @@ import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxFloatingLayer;
import com.iformall.domain.vo.WxFloatingLayerVO;
import com.iformall.mapper.WxFloatingLayerMapper;
import com.iformall.service.WxFloatingLayerService;
import org.apache.commons.lang3.StringUtils;
@@ -27,16 +29,16 @@ public class WxFloatingLayerServiceImpl implements WxFloatingLayerService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
WxFloatingLayerMapper WxFloatingLayerMapper;
WxFloatingLayerMapper wxFloatingLayerMapper;

@Override
public PageInfo<WxFloatingLayer> listAsPage(WxFloatingLayer record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> WxFloatingLayerMapper.findList(record));
public PageInfo<WxFloatingLayerVO> listAsPage(WxFloatingLayer record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxFloatingLayerMapper.findListVO(record));
}

@Override
public WxFloatingLayer getById(Long id) {
return WxFloatingLayerMapper.selectById(id);
return wxFloatingLayerMapper.selectById(id);
}

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
@@ -48,16 +50,23 @@ public class WxFloatingLayerServiceImpl implements WxFloatingLayerService {
if (StringUtils.isEmpty(wxFloatingLayer.getPagePath())) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "小程序跳转路径不能为空");
}
WxFloatingLayer wxFloatingLayerQuery = new WxFloatingLayer();
wxFloatingLayerQuery.setTenantId(wxFloatingLayer.getTenantId());
wxFloatingLayerQuery.setStatus(wxFloatingLayer.getStatus());
Integer integer = wxFloatingLayerMapper.selectCount(new QueryWrapper<>(wxFloatingLayerQuery));
if (integer > 0) {
return new ResultData(ErrorCode.FLOATING_LAYER_FOUND);
}
Date date = new Date();
if (wxFloatingLayer.getId() == null) {
final IdWorker idWorker = IdWorker.get();
wxFloatingLayer.setId(idWorker.nextId());
wxFloatingLayer.setCreateTime(date);
wxFloatingLayer.setUpdateTime(date);
WxFloatingLayerMapper.insert(wxFloatingLayer);
wxFloatingLayerMapper.insert(wxFloatingLayer);
} else {
wxFloatingLayer.setUpdateTime(date);
WxFloatingLayerMapper.updateById(wxFloatingLayer);
wxFloatingLayerMapper.updateById(wxFloatingLayer);
}
return new ResultData(Result.SUCCESS, "操作成功");
}


+ 16
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java View File

@@ -19,6 +19,9 @@ import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.service.*;
import com.iformall.utils.BeanMapping;
import com.iformall.utils.DataUtil;
import com.iformall.utils.DateUtils;
import me.chanjar.weixin.common.util.DataUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

@@ -749,6 +753,18 @@ public class WxMerchantServiceImpl implements WxMerchantService {
@Override
public void exportUserTradeList(WxMerchant record,HttpServletRequest request, HttpServletResponse response) {
List<WxMerchantTradeDetailVo> datalist = wxMerchantMapper.userTradeDetailList(record);
datalist.stream().forEach(e->{
if(e.getTradeDate() != null) {
e.setTradeDateStr(DateUtils.formatDateTime(e.getTradeDate()));
}
BigDecimal bigDecimal = new BigDecimal(e.getCouponPrice());
e.setCouponPriceStr(bigDecimal.divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP).toString());
bigDecimal = new BigDecimal(e.getCouponSale());
e.setCouponSaleStr(bigDecimal.divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP).toString());
bigDecimal = new BigDecimal(e.getTradeAmt());
e.setTradeAmtStr(bigDecimal.divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP).toString());

});
excelService.exportExcel(datalist, null, "商户会员消费列表", WxMerchantTradeDetailVo.class, "商户会员消费列表.xlsx", response, false);
}



+ 1
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java View File

@@ -513,7 +513,7 @@ public class WxOrderServiceImpl implements WxOrderService {
}

try {
wxCouponMapper.backInventory(coupon.getId(), coupon.getRemainInventory(), 1);
wxCouponMapper.backInventory(coupon.getId(), 1, coupon.getRemainInventory());
} catch (Exception e) {
logger.error("数据库更新失败,库存+1失败, e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "库存恢复失败");


+ 49
- 13
mallinkService/src/main/java/com/iformall/service/impl/WxScoreRulesServiceImpl.java View File

@@ -6,6 +6,7 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.*;
import com.iformall.enums.EnumBusiness;
import com.iformall.enums.EnumCUserBasicInfoStatus;
import com.iformall.enums.EnumScoreRules;
import com.iformall.enums.EnumScoreType;
import com.iformall.exception.MallinkException;
@@ -555,27 +556,42 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {

@Override
public int addScore(EnumScoreType scoreType, Object param) {

WxCUser wxCUser = null;
WxCUserCar userCar = null;
WxCUserBasicInfo userBasicInfo = null;
Long userId = null;
if (param instanceof WxCUser) {
wxCUser = (WxCUser) param;
userId = wxCUser.getId();
}
if (param instanceof WxCUserCar) {
userCar = (WxCUserCar) param;
userId = userCar.getCUserId();
}
if (param instanceof WxCUserBasicInfo) {
userBasicInfo = (WxCUserBasicInfo) param;
userId = userBasicInfo.getId();
}
WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectById(userId);
if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + userId);
return 0;
}
switch (scoreType){
case LOGIN: {
WxCUser user = (WxCUser) param;
return loginAddScore(user);
return loginAddScore(wxCUser);
}
case BIND_CAR:{
WxCUserCar userCar = (WxCUserCar) param;
return bindCarAddScore(userCar);
}
case WECHAT_PERSION:{
WxCUser user = (WxCUser) param;
return personAddScore(user);
return personAddScore(wxCUser);
}
case WECHAT_PHONE:{
WxCUser user = (WxCUser) param;
return phoneAddScore(user);
return phoneAddScore(wxCUser);
}
case COMPLETE_INFO:{
WxCUserBasicInfo user = (WxCUserBasicInfo) param;
return infoAddScore(user);
return infoAddScore(userBasicInfo);
}

default: {
@@ -587,14 +603,30 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {
@Override
public int addScore2(EnumScoreType scoreType, Object param1, Object param2) {

WxOrder order = null;
WxCUserBasicInfo user = null;
Long userId = null;
if (param1 instanceof WxOrder) {
order = (WxOrder) param1;
userId = order.getCUserId();
}
if (param1 instanceof WxCUserBasicInfo) {
user = (WxCUserBasicInfo) param1;
userId = user.getId();
}

WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectById(userId);
if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + userId);
return 0;
}

switch (scoreType){
case CONSUMPTION: {
WxOrder order = (WxOrder) param1;
Integer bussinessId = (Integer) param2;
return payAddScore(order, bussinessId);
}
case MEM_IMPORT: {
WxCUserBasicInfo user = (WxCUserBasicInfo) param1;
boolean bHaveCUser = (boolean)(param2);
return memResetScore(user, bHaveCUser);
}
@@ -606,9 +638,13 @@ public class WxScoreRulesServiceImpl implements WxScoreRulesService {

@Override
public int reduceScore(EnumScoreType scoreType, Object param1, Object param2, Object param3) {
WxCUserBasicInfo user = (WxCUserBasicInfo) param1;
if (user != null && user.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + user.getId());
return 0;
}
switch (scoreType){
case MEM_REDUCE: {
WxCUserBasicInfo user = (WxCUserBasicInfo)param1;
String reason = (String)param2;
Integer scoreNum = (Integer)param3;
return memReduceScore(user, reason, scoreNum);


+ 1
- 1
mallinkService/src/main/resources/mapper/WxBillSettleBillMapper.xml View File

@@ -39,7 +39,7 @@
</sql>

<select id="findBySettleId" parameterType="com.iformall.domain.po.WxBillSettleBill" resultMap="BaseResultMap">
select bl.`type`,bill.starttime,bill.endtime,bl.bill_id,bl.bill_type,bill.bill_type billName,IFNULL(bill.owe,0) receivePay
select bl.`type`,IFNULL(bill.starttime,NULL),IFNULL(bill.endtime,NULL),bl.bill_id,bl.bill_type,bill.bill_type billName,IFNULL(bill.owe,0) receivePay

from wx_bill_settle_bill bl left join
(select id,merchant_id,shop_id,tenant_id,1 bill_type_value,'租金-租金'


+ 3
- 3
mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml View File

@@ -216,8 +216,8 @@
select <include refid="allColumnsOfScoreList"/>
from wx_c_user_basic_info cub
inner join wx_c_user cu on cu.id = cub.id
where 1=1
where 1=1 and cub.status=0

<if test=" null != levelStartScore ">
and cub.poins &gt;= #{levelStartScore}
@@ -241,7 +241,7 @@
select <include refid="allColumnsOfScoreList"/>
from wx_c_user_basic_info cub
inner join wx_c_user cu on cu.id = cub.id
where cu.phone is not null
where cub.status = 0 and cu.phone is not null
AND DATE_FORMAT(cub.birthdate,'%m-%d') &gt;= #{begin}
AND DATE_FORMAT(cub.birthdate,'%m-%d') &lt;= #{end}
<if test="null != tenantId">


mallinkService/src/main/resources/mapper/WxCuserFloatingLayer.xml → mallinkService/src/main/resources/mapper/WxCuserFloatingLayerMapper.xml View File


+ 0
- 51
mallinkService/src/main/resources/mapper/WxFloatingLayer.xml View File

@@ -1,51 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxFloatingLayerMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxFloatingLayer">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="cover_img" jdbcType="VARCHAR" property="coverImg"/>
<result column="produce_id" jdbcType="VARCHAR" property="produceId"/>
<result column="page_path" jdbcType="VARCHAR" property="pagePath"/>
<result column="status" jdbcType="VARCHAR" property="status"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
</resultMap>
<sql id="allColumns">
`id`, `tenant_id` , `cover_img` , `produce_id`, `page_path` , `status`, `create_time`, `update_time`
</sql>
<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != status ">
and `status` = #{status}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns">order by ${sortColumns}</if>
</sql>
<select id="findList" parameterType="com.iformall.domain.po.WxFloatingLayer" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_floating_layer
<include refid="dynamicWhereConditions"/>
</select>

</mapper>

+ 104
- 0
mallinkService/src/main/resources/mapper/WxFloatingLayerMapper.xml View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxFloatingLayerMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxFloatingLayer">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="cover_img" jdbcType="VARCHAR" property="coverImg"/>
<result column="produce_id" jdbcType="VARCHAR" property="produceId"/>
<result column="page_path" jdbcType="VARCHAR" property="pagePath"/>
<result column="status" jdbcType="VARCHAR" property="status"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
</resultMap>
<sql id="allColumns">
`id`, `tenant_id` , `cover_img` , `produce_id`, `page_path` , `status`, `create_time`, `update_time`
</sql>
<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != status ">
and `status` = #{status}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns">order by ${sortColumns}</if>
</sql>
<sql id="allColumnsVO">
fl.`id` as id, fl.`tenant_id` , fl.`cover_img` , fl.`produce_id`,
fl.`page_path` , fl.`status`, fl.`create_time` as create_time, fl.`update_time`,
c.title
</sql>
<select id="findList" parameterType="com.iformall.domain.po.WxFloatingLayer" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_floating_layer
<include refid="dynamicWhereConditions"/>
</select>
<resultMap id="resultListVO" type="com.iformall.domain.vo.WxFloatingLayerVO">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="cover_img" jdbcType="VARCHAR" property="coverImg"/>
<result column="produce_id" jdbcType="VARCHAR" property="produceId"/>
<result column="page_path" jdbcType="VARCHAR" property="pagePath"/>
<result column="status" jdbcType="VARCHAR" property="status"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="title" jdbcType="VARCHAR" property="title"/>
</resultMap>
<sql id="dynamicWhereConditionsVO">
<if test=" null != id ">
and fl.`id` = #{id}
</if>
<if test=" null != tenantId ">
and fl.`tenant_id` = #{tenantId}
</if>
<if test=" null != status ">
and fl.`status` = #{status}
</if>
<if test=" null != ids ">
and fl.id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns">order by ${sortColumns}</if>
</sql>
<select id="findListVO" parameterType="com.iformall.domain.po.WxFloatingLayer" resultMap="resultListVO">
select
<include refid="allColumnsVO"/>
from wx_floating_layer fl left join wx_coupon c on fl.produce_id=c.id
where c.status = 0
<include refid="dynamicWhereConditionsVO"/>
</select>
<update id="updateStatus">
update wx_floating_layer set status=1 where produce_id=#{value}
</update>

</mapper>

+ 23
- 10
mallinkService/src/main/resources/mapper/WxMerchantMapper.xml View File

@@ -428,11 +428,13 @@
(select count(*) from wx_coupon_order o
left join wx_coupon co on(o.`coupon_id`=co.id)
left join wx_coupon_merchant cm on(cm.product_id=co.id)
inner join wx_c_user_basic_info c on(o.c_user_id=c.id) where cm.`merchant_id`=m.id and o.coupon_order_status=1
<if test="starttime != null and starttime!=''">
inner join wx_c_user_basic_info c on(o.c_user_id=c.id)
inner join wx_merchant_b_user mb on(mb.id=c.id)
where cm.`merchant_id`=m.id and o.coupon_order_status=1 and mb.merchant_id=m.id
<if test="starttime != null">
and o.create_date &gt;= #{starttime}
</if>
<if test="endtime != null and endtime!=''">
<if test="endtime != null">
and o.create_date &lt;= #{endtime}
</if>
) consumeCount,
@@ -440,11 +442,13 @@
(select count(distinct c.id) from wx_coupon_order o
left join wx_coupon co on(o.`coupon_id`=co.id)
left join wx_coupon_merchant cm on(cm.product_id=co.id)
inner join wx_c_user_basic_info c on(o.c_user_id=c.id) where cm.`merchant_id`=m.id and o.coupon_order_status=1
<if test="starttime != null and starttime!=''">
inner join wx_c_user_basic_info c on(o.c_user_id=c.id)
inner join wx_merchant_b_user mb on(mb.id=c.id)
where cm.`merchant_id`=m.id and o.coupon_order_status=1 and mb.merchant_id=m.id
<if test="starttime != null">
and o.create_date &gt;= #{starttime}
</if>
<if test="endtime != null and endtime!=''">
<if test="endtime != null">
and o.create_date &lt;= #{endtime}
</if>
) consumeCountP,
@@ -452,16 +456,19 @@
IFNULL((select sum(co.price) from wx_coupon_order o
left join wx_coupon co on(o.`coupon_id`=co.id)
left join wx_coupon_merchant cm on(cm.product_id=co.id)
inner join wx_c_user_basic_info c on(o.c_user_id=c.id) where cm.`merchant_id`=m.id and o.coupon_order_status=1
<if test="starttime != null and starttime!=''">
inner join wx_c_user_basic_info c on(o.c_user_id=c.id)
inner join wx_merchant_b_user mb on(mb.id=c.id)
where cm.`merchant_id`=m.id and o.coupon_order_status=1 and mb.merchant_id=m.id
<if test="starttime != null">
and o.create_date &gt;= #{starttime}
</if>
<if test="endtime != null and endtime!=''">
<if test="endtime != null">
and o.create_date &lt;= #{endtime}
</if>

),0) tradeAmt

from wx_merchant m where 1=1
from wx_merchant m where m.status=1

<if test=" null != name and ''!=name ">
and `name` like concat('%', #{name},'%')
@@ -494,6 +501,12 @@
<if test=" null != couponName ">
and co.`title` like concat('%', #{couponName},'%')
</if>
<if test="starttime != null">
and o.create_date &gt;= #{starttime}
</if>
<if test="endtime != null">
and o.create_date &lt;= #{endtime}
</if>
order by o.create_date desc
</select>



Loading…
Cancel
Save