Commit 2c16f023 authored by jiaorz's avatar jiaorz

Merge branch 'base-modify' of http://113.105.137.151:22280/youjj/cloud-platform into base-modify

parents 0fc78715 7c60a55a
...@@ -10,6 +10,7 @@ import tk.mybatis.mapper.common.Mapper; ...@@ -10,6 +10,7 @@ import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -62,6 +63,13 @@ public abstract class BaseBiz<M extends Mapper<T>, T> { ...@@ -62,6 +63,13 @@ public abstract class BaseBiz<M extends Mapper<T>, T> {
insertSelectiveRe(entity); insertSelectiveRe(entity);
} }
public void insertMultiSelective(List<T> entitys) {
for(T entity : entitys) {
insertSelectiveRe(entity);
}
}
public int insertSelectiveRe(T entity) { public int insertSelectiveRe(T entity) {
EntityUtils.setCreatAndUpdatInfo(entity); EntityUtils.setCreatAndUpdatInfo(entity);
return mapper.insertSelective(entity); return mapper.insertSelective(entity);
...@@ -116,4 +124,5 @@ public abstract class BaseBiz<M extends Mapper<T>, T> { ...@@ -116,4 +124,5 @@ public abstract class BaseBiz<M extends Mapper<T>, T> {
List<T> list = mapper.selectByExample(example); List<T> list = mapper.selectByExample(example);
return new TableResultResponse<T>(result.getTotal(), list); return new TableResultResponse<T>(result.getTotal(), list);
} }
} }
package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 个人中心信息
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-18 19:38:56
*/
@Data
public class UserInfoDTO {
/**
* 可使用优惠卷个数
*/
@ApiModelProperty(value = "可使用优惠卷个数")
private Long couponNumber;
/**
* 总积分
*/
@ApiModelProperty(value = "总积分")
private Integer totalPoint;
/**
* 钱包总额
*/
@ApiModelProperty(value = "钱包总额")
private BigDecimal balance;
}
...@@ -117,6 +117,11 @@ public interface UserFeign { ...@@ -117,6 +117,11 @@ public interface UserFeign {
@GetMapping("/api/app/imi/{imiId}") @GetMapping("/api/app/imi/{imiId}")
public ImiVo findUserInfoByImiId(@PathVariable(value = "imiId") Integer imiId); ImiVo findUserInfoByImiId(@PathVariable(value = "imiId") Integer imiId);
@GetMapping("/app/user/findusersByIds")
Map<Integer,AppUserLogin> findAppUsersByUserIds(@RequestParam(value = "userIds") List<Integer> userIds);
@GetMapping("/app/user/finduserIdsByphones")
Map<String, Integer> findAppusersByUserNames(@RequestParam(value = "phones") List<String> phones);
} }
...@@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.time.Instant; import java.time.Instant;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -110,9 +111,16 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -110,9 +111,16 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
criteria.andIn("userid", memberIds); criteria.andIn("userid", memberIds);
List<AppUserDetail> appUserDetails = mapper.selectByExample(example); List<AppUserDetail> appUserDetails = mapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(appUserDetails)){ if (CollectionUtils.isNotEmpty(appUserDetails)) {
userIdAndAppUserDetailMap = appUserDetails.stream().collect(Collectors.toMap(AppUserDetail::getUserid, Function.identity())); userIdAndAppUserDetailMap = appUserDetails.stream().collect(Collectors.toMap(AppUserDetail::getUserid, Function.identity()));
} }
return userIdAndAppUserDetailMap; return userIdAndAppUserDetailMap;
} }
public void deleteByUserIds(Collection<Integer> userIds) {
Example example = new Example(AppUserDetail.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("userid", userIds);
mapper.deleteByExample(example);
}
} }
...@@ -198,4 +198,11 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> { ...@@ -198,4 +198,11 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
public void available(AppUserLogin appUserLogin) { public void available(AppUserLogin appUserLogin) {
mapper.updateByPrimaryKeySelective(appUserLogin); mapper.updateByPrimaryKeySelective(appUserLogin);
} }
public void deleteByPhones(List<String> phons) {
Example example = new Example(AppUserLogin.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("username",phons);
mapper.deleteByExample(example);
}
} }
...@@ -241,4 +241,11 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -241,4 +241,11 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
memberSateAndCountMap.put(1,activityCount); memberSateAndCountMap.put(1,activityCount);
return memberSateAndCountMap; return memberSateAndCountMap;
} }
public void deleteByMemberIds(Collection<Integer> userIds) {
Example example = new Example(AppUserRelation.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("userId",userIds);
mapper.deleteByExample(example);
}
} }
\ No newline at end of file
...@@ -344,4 +344,11 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A ...@@ -344,4 +344,11 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
public BigDecimal selectTotalIncomeByUserId(Integer userId) { public BigDecimal selectTotalIncomeByUserId(Integer userId) {
return mapper.selectTotalIncomeByUserId(userId); return mapper.selectTotalIncomeByUserId(userId);
} }
public void deleteByMemberIds(Collection<Integer> userIds) {
Example example = new Example(AppUserSellingWater.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("sourceId",userIds);
mapper.deleteByExample(example);
}
} }
\ No newline at end of file
...@@ -8,6 +8,7 @@ import com.github.wxiaoqi.security.admin.vo.AppletWalletVo; ...@@ -8,6 +8,7 @@ import com.github.wxiaoqi.security.admin.vo.AppletWalletVo;
import com.github.wxiaoqi.security.admin.vo.WalletPageVo; import com.github.wxiaoqi.security.admin.vo.WalletPageVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.feign.ActivityFeign;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -36,6 +37,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> { ...@@ -36,6 +37,7 @@ public class MyWalletBiz extends BaseBiz<MyWalletMapper, MyWallet> {
@Autowired @Autowired
private MyWalletCathBiz myWalletCathBiz; private MyWalletCathBiz myWalletCathBiz;
public AppletWalletVo findMyWallet(Integer userId) { public AppletWalletVo findMyWallet(Integer userId) {
AppletWalletVo appletWalletVo = new AppletWalletVo(); AppletWalletVo appletWalletVo = new AppletWalletVo();
......
package com.github.wxiaoqi.security.admin.biz; package com.github.wxiaoqi.security.admin.biz;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import com.github.wxiaoqi.security.admin.dto.UserInfoDTO;
import com.github.wxiaoqi.security.admin.entity.MyWallet; import com.github.wxiaoqi.security.admin.entity.MyWallet;
import com.github.wxiaoqi.security.admin.entity.MyWalletDetail; import com.github.wxiaoqi.security.admin.entity.MyWalletDetail;
import com.github.wxiaoqi.security.admin.mapper.MyWalletDetailMapper; import com.github.wxiaoqi.security.admin.mapper.MyWalletDetailMapper;
import com.github.wxiaoqi.security.admin.mapper.MyWalletMapper; import com.github.wxiaoqi.security.admin.mapper.MyWalletMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.feign.ActivityFeign;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
...@@ -33,6 +37,9 @@ public class MyWaterBiz extends BaseBiz<MyWalletMapper, MyWallet>{ ...@@ -33,6 +37,9 @@ public class MyWaterBiz extends BaseBiz<MyWalletMapper, MyWallet>{
@Autowired @Autowired
MyWalletDetailBiz walletDetailBiz; MyWalletDetailBiz walletDetailBiz;
@Autowired
ActivityFeign activityFeign;
//我的钱包入账 //我的钱包入账
public void updMyWater(MyWalletDetail walletDetail){ public void updMyWater(MyWalletDetail walletDetail){
...@@ -149,4 +156,26 @@ public class MyWaterBiz extends BaseBiz<MyWalletMapper, MyWallet>{ ...@@ -149,4 +156,26 @@ public class MyWaterBiz extends BaseBiz<MyWalletMapper, MyWallet>{
myWallet.setUpdTime(Instant.now().toEpochMilli()); myWallet.setUpdTime(Instant.now().toEpochMilli());
return mapper.insertSelective(myWallet); return mapper.insertSelective(myWallet);
} }
public ObjectRestResponse getUserProfit(Integer userId){
try {
UserInfoDTO dto=activityFeign.getUserInfo(userId);
if (dto==null){
dto=new UserInfoDTO();
dto.setCouponNumber(0L);
dto.setTotalPoint(0);
}
MyWallet wallet=new MyWallet();
wallet.setUserId(userId);
wallet=selectOne(wallet);
BeanUtils.copyProperties(wallet,dto);
return ObjectRestResponse.succ(dto);
}catch (Exception e){
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
}
} }
\ No newline at end of file
...@@ -14,10 +14,13 @@ import com.github.wxiaoqi.security.common.msg.TableResultResponse; ...@@ -14,10 +14,13 @@ import com.github.wxiaoqi.security.common.msg.TableResultResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController; import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.util.Query; import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.ws.rs.GET;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -53,6 +56,9 @@ public class AppUserController extends CommonBaseController { ...@@ -53,6 +56,9 @@ public class AppUserController extends CommonBaseController {
@Autowired @Autowired
private UserMemberLevelBiz userMemberLevelBiz; private UserMemberLevelBiz userMemberLevelBiz;
@Autowired
private MyWaterBiz myWaterBiz;
@GetMapping("page") @GetMapping("page")
public TableResultResponse list(@RequestParam Map<String, Object> params) { public TableResultResponse list(@RequestParam Map<String, Object> params) {
Query query = new Query(params); Query query = new Query(params);
...@@ -145,6 +151,17 @@ public class AppUserController extends CommonBaseController { ...@@ -145,6 +151,17 @@ public class AppUserController extends CommonBaseController {
return ObjectRestResponse.succ(userDTO); return ObjectRestResponse.succ(userDTO);
} }
@ApiOperation("获取用户收益")
@GetMapping("/profit")
public ObjectRestResponse profit() throws Exception{
String username = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)).getId();
if (username == null) {
throw new Exception();
}
Integer userid=Integer.parseInt(username);
return myWaterBiz.getUserProfit(userid);
}
/** /**
* 更新用户信息 * 更新用户信息
* @param userVo * @param userVo
...@@ -170,6 +187,13 @@ public class AppUserController extends CommonBaseController { ...@@ -170,6 +187,13 @@ public class AppUserController extends CommonBaseController {
return appUserLoginBiz.getUserByUsername(username); return appUserLoginBiz.getUserByUsername(username);
} }
@GetMapping("/findusersByIds")
public Map<Integer,AppUserLogin> findAppUsersByUserIds(@RequestParam(value = "userIds") List<Integer> userIds){
return appUserLoginBiz.findUserIdAndUserLoginMapByMemberIds(userIds);
}
@GetMapping("/finduserIdsByphones")
Map<String, Integer> findAppusersByUserNames(@RequestParam(value = "phones") List<String> phones){
return appUserLoginBiz.findPhoneAndUserIdMapByPhones(phones);
}
} }
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.AppUserDetailBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserLoginBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserRelationBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserSellingWaterBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.feign.ActivityFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/24 15:11
*/
@RestController
@RequestMapping("/app/unauth/user_data")
public class DataController {
@Autowired
private AppUserLoginBiz appUserLoginBiz;
@Autowired
private AppUserDetailBiz appUserDetailBiz;
@Autowired
private AppUserRelationBiz appUserRelationBiz;
@Autowired
private AppUserSellingWaterBiz appUserSellingWaterBiz;
@Autowired
private ActivityFeign activityFeign;
@GetMapping("/clearwithphone")
public ObjectRestResponse<Void> clearData(@RequestParam("phones") List<String> phons) {
Map<String, Integer> phoneAndUserIdMapByPhones = appUserLoginBiz.findPhoneAndUserIdMapByPhones(phons);
if (Objects.nonNull(phoneAndUserIdMapByPhones)){
Collection<Integer> userIds = phoneAndUserIdMapByPhones.values();
appUserLoginBiz.deleteByPhones(phons);
appUserDetailBiz.deleteByUserIds(userIds);
appUserRelationBiz.deleteByMemberIds(userIds);
appUserSellingWaterBiz.deleteByMemberIds(userIds);
activityFeign.clearDate(new ArrayList<>(userIds));
}
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
...@@ -10,9 +10,9 @@ spring: ...@@ -10,9 +10,9 @@ spring:
datasource: datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://10.5.52.3:3306/xxfc_activity?useUnicode=true&characterEncoding=UTF-8 url: jdbc:mysql://10.5.52.4:3306/xxfc_order?useUnicode=true&characterEncoding=UTF-8
username: root username: root
password: sslcloud123*() password: e4549e9315f19a88
jackson: jackson:
time-zone: GMT+8 time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
......
#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F #\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F
#\u5305\u540D #\u5305\u540D
package=com.xxfc.platform.activity package=com.xxfc.platform.order
#\u4F5C\u8005 #\u4F5C\u8005
author=zjw author=zjw
#Email #Email
......
package com.xxfc.platform.activity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 15:00
*/
@Data
public class CouponDTO {
@ApiModelProperty("主键id")
private Integer id;
@ApiModelProperty(value = "优惠券标题(有图片则显示图片):无门槛50元优惠券 | 单品最高减2000元")
private String title;
@ApiModelProperty(value = "副标题")
private String subtitle;
@ApiModelProperty(value = "图片")
private String icon;
@ApiModelProperty(value = "可用于:10店铺优惠券 11新人店铺券 20商品优惠券 30类目优惠券 60平台优惠券 61新人平台券")
private Integer used;
@ApiModelProperty(value = "0-全平台;1-租车;2-旅游;3-营地")
private Integer channel;
@ApiModelProperty(value = "0-普通用户;1-会员用户")
private Integer userType;
@ApiModelProperty(value = "1满减券 2叠加满减券 3无门槛券(需要限制大小)")
private Integer type;
@ApiModelProperty(value = "1可用于特价商品 2不能 默认不能(商品优惠卷除外)")
private Integer withSpecial;
@ApiModelProperty(value = "店铺或商品流水号")
private String withSn;
@ApiModelProperty(value = "满多少金额")
private BigDecimal withAmount;
@ApiModelProperty(value = "用券抵扣金额")
private BigDecimal usedAmount;
@ApiModelProperty(value = "配额:发券数量")
private Integer quota;
@ApiModelProperty(value = "每人限领次数")
private Integer limitCollar;
@ApiModelProperty(value = "已领取的优惠券数量")
private Integer takeCount;
@ApiModelProperty(value = "已使用的优惠券数量")
private Integer usedCount;
@ApiModelProperty(value = "发放开始时间")
private Long startTime;
@ApiModelProperty(value = "发放结束时间")
private Long endTime;
@ApiModelProperty(value = "时效:1绝对时效(领取后XXX-XXX时间段有效) 2相对时效(领取后N天有效)")
private Integer validType;
@ApiModelProperty(value = "使用开始时间")
private Long validStartTime;
@ApiModelProperty(value = "使用结束时间")
private Long validEndTime;
@ApiModelProperty(value = "自领取之日起有效天数")
private Integer validDays;
@ApiModelProperty(value = "跳转链接")
private String url;
}
...@@ -14,5 +14,9 @@ public class CouponFindDTO extends PageParam { ...@@ -14,5 +14,9 @@ public class CouponFindDTO extends PageParam {
private String title; private String title;
private Integer channel;
private Integer type; private Integer type;
private Integer status;
} }
package com.xxfc.platform.activity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 17:06
*/
@Data
public class UserCouponDTO {
private Integer id;
@ApiModelProperty(value = "用户id")
private Integer userId;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "抵扣金额")
private BigDecimal usedAmount;
@ApiModelProperty(value = "0-未使用;1-已使用")
private Integer isUse;
@ApiModelProperty(value = "领卷时间", hidden = true )
private Long crtTime;
@ApiModelProperty(value = "到期时间", hidden = true )
private Long expireTime;
@ApiModelProperty(value = "使用时间")
private Long useTime;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 16:26
*/
@Data
public class UserCouponFindDTO extends PageParam {
private String phone;
private Integer couponId;
private BigDecimal usedAmount;
private Integer status;
private Integer userId;
}
package com.xxfc.platform.activity.dto;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 18:02
*/
@Data
public class UserCouponSendDTO {
private String phone;
private Integer couponId;
private Integer couponNum;
}
...@@ -111,5 +111,8 @@ public class ActivityList implements Serializable { ...@@ -111,5 +111,8 @@ public class ActivityList implements Serializable {
@ApiModelProperty(value = "活动页面链接") @ApiModelProperty(value = "活动页面链接")
private String url; private String url;
@Column(name = "time_type")
@ApiModelProperty("活动时期类型:0-永久,1-有期限")
private Integer timeType;
} }
package com.xxfc.platform.activity.feign; package com.xxfc.platform.activity.feign;
import com.github.wxiaoqi.security.admin.dto.UserInfoDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.entity.IntegralUserTotal;
import com.xxfc.platform.activity.vo.UserCouponVo; import com.xxfc.platform.activity.vo.UserCouponVo;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -49,4 +52,12 @@ public interface ActivityFeign { ...@@ -49,4 +52,12 @@ public interface ActivityFeign {
@RequestMapping(value = "/join/user", method = RequestMethod.POST) @RequestMapping(value = "/join/user", method = RequestMethod.POST)
public ObjectRestResponse join(@RequestParam(value = "userId",defaultValue ="0" ) Integer userId); public ObjectRestResponse join(@RequestParam(value = "userId",defaultValue ="0" ) Integer userId);
@ApiModelProperty("获取用户积分")
@GetMapping(value = "/user/info")
public UserInfoDTO getUserInfo(@RequestParam("userId") Integer userId);
@ApiOperation("清除数据")
@GetMapping("/activity_data/clear")
ObjectRestResponse<Void> clearDate(@RequestParam(value = "userIds") List<Integer> userIds);
} }
package com.xxfc.platform.activity.vo; package com.xxfc.platform.activity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
/** /**
* @author libin * @author libin
* @version 1.0 * @version 1.0
...@@ -11,4 +14,44 @@ import lombok.Data; ...@@ -11,4 +14,44 @@ import lombok.Data;
@Data @Data
public class CouponPagVo { public class CouponPagVo {
@ApiModelProperty("主键id")
private Integer id;
@ApiModelProperty(value = "优惠券标题(有图片则显示图片):无门槛50元优惠券 | 单品最高减2000元")
private String title;
@ApiModelProperty(value = "图片")
private String icon;
@ApiModelProperty(value = "0-全平台;1-租车;2-旅游;3-营地")
private Integer channel;
@ApiModelProperty(value = "1满减券 2叠加满减券 3无门槛券(需要限制大小)")
private Integer type;
@ApiModelProperty(value = "用券抵扣金额")
private BigDecimal usedAmount;
@ApiModelProperty(value = "配额:发券数量")
private Integer quota;
@ApiModelProperty(value = "已领取的优惠券数量")
private Integer takeCount;
@ApiModelProperty(value = "已使用的优惠券数量")
private Integer usedCount;
@ApiModelProperty(value = "1生效 2失效 3已结束")
private Integer status;
@ApiModelProperty(value = "创建时间", hidden = true)
private Long crtTime;
} }
package com.xxfc.platform.activity.vo;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 18:11
*/
@Data
public class CouponTitleVo {
private Integer id;
private String title;
}
package com.xxfc.platform.activity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 15:00
*/
@Data
public class CouponVo {
@ApiModelProperty("主键id")
private Integer id;
@ApiModelProperty(value = "优惠券标题(有图片则显示图片):无门槛50元优惠券 | 单品最高减2000元")
private String title;
@ApiModelProperty(value = "副标题")
private String subtitle;
@ApiModelProperty(value = "图片")
private String icon;
@ApiModelProperty(value = "可用于:10店铺优惠券 11新人店铺券 20商品优惠券 30类目优惠券 60平台优惠券 61新人平台券")
private Integer used;
@ApiModelProperty(value = "0-全平台;1-租车;2-旅游;3-营地")
private Integer channel;
@ApiModelProperty(value = "0-普通用户;1-会员用户")
private Integer userType;
@ApiModelProperty(value = "1满减券 2叠加满减券 3无门槛券(需要限制大小)")
private Integer type;
@ApiModelProperty(value = "1可用于特价商品 2不能 默认不能(商品优惠卷除外)")
private Integer withSpecial;
@ApiModelProperty(value = "店铺或商品流水号")
private String withSn;
@ApiModelProperty(value = "满多少金额")
private BigDecimal withAmount;
@ApiModelProperty(value = "用券抵扣金额")
private BigDecimal usedAmount;
@ApiModelProperty(value = "配额:发券数量")
private Integer quota;
@ApiModelProperty(value = "每人限领次数")
private Integer limitCollar;
@ApiModelProperty(value = "已领取的优惠券数量")
private Integer takeCount;
@ApiModelProperty(value = "已使用的优惠券数量")
private Integer usedCount;
@ApiModelProperty(value = "发放开始时间")
private Long startTime;
@ApiModelProperty(value = "发放结束时间")
private Long endTime;
@ApiModelProperty(value = "时效:1绝对时效(领取后XXX-XXX时间段有效) 2相对时效(领取后N天有效)")
private Integer validType;
@ApiModelProperty(value = "使用开始时间")
private Long validStartTime;
@ApiModelProperty(value = "使用结束时间")
private Long validEndTime;
@ApiModelProperty(value = "自领取之日起有效天数")
private Integer validDays;
@ApiModelProperty(value = "跳转链接")
private String url;
}
package com.xxfc.platform.activity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 16:29
*/
@Data
public class UserCouponPageVo {
private Integer id;
@ApiModelProperty(value = "手机号")
private String phone;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "抵扣金额")
private BigDecimal usedAmount;
@ApiModelProperty(value = "0-未使用;1-已使用")
private Integer isUse;
@ApiModelProperty(value = "领卷时间", hidden = true )
private Long crtTime;
@ApiModelProperty(value = "到期时间", hidden = true )
private Long expireTime;
@ApiModelProperty(value = "使用时间")
private Long useTime;
}
...@@ -20,7 +20,8 @@ import tk.mybatis.spring.annotation.MapperScan; ...@@ -20,7 +20,8 @@ import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication(scanBasePackages = { @SpringBootApplication(scanBasePackages = {
"com.xxfc.platform", "com.xxfc.platform",
"com.github.wxiaoqi.security.common.handler", "com.github.wxiaoqi.security.common.handler",
"com.github.wxiaoqi.security.common.log" "com.github.wxiaoqi.security.common.log",
"com.github.wxiaoqi.security.admin.support.aop"
}) })
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableScheduling @EnableScheduling
......
...@@ -7,6 +7,9 @@ import org.springframework.stereotype.Service; ...@@ -7,6 +7,9 @@ import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularizeUser; import com.xxfc.platform.activity.entity.ActivityPopularizeUser;
import com.xxfc.platform.activity.mapper.ActivityPopularizeUserMapper; import com.xxfc.platform.activity.mapper.ActivityPopularizeUserMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/** /**
* 用户与推广活动(邀请有礼)的关系表 * 用户与推广活动(邀请有礼)的关系表
...@@ -24,4 +27,11 @@ public class ActivityPopularizeUserBiz extends BaseBiz<ActivityPopularizeUserMap ...@@ -24,4 +27,11 @@ public class ActivityPopularizeUserBiz extends BaseBiz<ActivityPopularizeUserMap
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE); throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
} }
} }
public void deleteByUserIds(List<Integer> userIds) {
Example example = new Example(ActivityPopularizeUser.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("userId",userIds);
mapper.deleteByExample(example);
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.constant.CouponUsed; import com.xxfc.platform.activity.constant.CouponUsed;
import com.xxfc.platform.activity.dto.CouponDTO;
import com.xxfc.platform.activity.dto.CouponFindDTO;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.vo.CouponPagVo;
import com.xxfc.platform.activity.vo.CouponTitleVo;
import com.xxfc.platform.activity.vo.CouponVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.mapper.CouponMapper; import com.xxfc.platform.activity.mapper.CouponMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 优惠券表 * 优惠券表
...@@ -31,4 +44,82 @@ public class CouponBiz extends BaseBiz<CouponMapper, Coupon> { ...@@ -31,4 +44,82 @@ public class CouponBiz extends BaseBiz<CouponMapper, Coupon> {
} }
return null; return null;
} }
public PageDataVO<CouponPagVo> listCouponWithPage(CouponFindDTO couponFindDTO) {
PageDataVO<CouponPagVo> couponPagVo = new PageDataVO<>();
Example example = new Example(Coupon.class);
Example.Criteria criteria = example.createCriteria();
if (!StringUtils.isEmpty(couponFindDTO.getTitle())){
criteria.andLike("title",String.format("%%%s%%",couponFindDTO.getTitle()));
}
if (Objects.nonNull(couponFindDTO.getChannel())){
criteria.andEqualTo("channel",couponFindDTO.getChannel());
}
if (Objects.nonNull(couponFindDTO.getType())){
criteria.andEqualTo("type",couponFindDTO.getType());
}
if (Objects.nonNull(couponFindDTO.getStatus())){
criteria.andEqualTo("status",couponFindDTO.getStatus());
}
criteria.andEqualTo("isDel",0);
example.setOrderByClause("crt_time DESC");
PageDataVO<Coupon> couponPage = PageDataVO.pageInfo(couponFindDTO.getPage(), couponFindDTO.getLimit(), () -> mapper.selectByExample(example));
List<Coupon> data = couponPage.getData();
if (CollectionUtils.isEmpty(data)){
return couponPagVo;
}
List<CouponPagVo> couponPagVos = new ArrayList<>();
CouponPagVo coupon ;
for (Coupon coup : data) {
coupon = new CouponPagVo();
BeanUtils.copyProperties(coup,coupon);
couponPagVos.add(coupon);
}
couponPagVo.setPageNum(couponPage.getPageNum());
couponPagVo.setPageSize(couponPage.getTotalPage());
couponPagVo.setTotalPage(couponPage.getTotalPage());
couponPagVo.setTotalCount(couponPage.getTotalCount());
couponPagVo.setData(couponPagVos);
return couponPagVo;
}
public CouponVo findCouponById(Integer id) {
CouponVo couponVo= new CouponVo();
Coupon coupon = mapper.selectByPrimaryKey(id);
BeanUtils.copyProperties(coupon,couponVo);
return couponVo;
}
public int addCoupon(CouponDTO couponDTO, UserDTO userDTO) {
Coupon coupon = new Coupon();
BeanUtils.copyProperties(couponDTO,coupon);
if (Objects.nonNull(couponDTO.getId())){
coupon.setUpdTime(Instant.now().toEpochMilli());
coupon.setUpdUser(userDTO.getId());
coupon.setUpdName(userDTO.getUsername());
return mapper.updateByPrimaryKeySelective(coupon);
}else {
coupon.setCrtTime(Instant.now().toEpochMilli());
coupon.setCrtUser(userDTO.getId());
coupon.setCrtName(userDTO.getUsername());
return mapper.insertSelective(coupon);
}
}
public int updateCouponDelStateById(Integer id,UserDTO userDTO) {
Coupon coupon = new Coupon();
coupon.setId(id);
coupon.setUpdName(userDTO.getUsername());
coupon.setUpdUser(userDTO.getId());
coupon.setUpdTime(Instant.now().toEpochMilli());
coupon.setIsDel(1);
return mapper.updateByPrimaryKeySelective(coupon);
}
public List<CouponTitleVo> getCouponTitleList() {
return mapper.selectTitles();
}
} }
\ No newline at end of file
...@@ -132,4 +132,5 @@ public class IntegralUserTotalBiz extends BaseBiz<IntegralUserTotalMapper, Integ ...@@ -132,4 +132,5 @@ public class IntegralUserTotalBiz extends BaseBiz<IntegralUserTotalMapper, Integ
} }
} }
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.dto.UserInfoDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig; import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.constant.CouponUsed; import com.xxfc.platform.activity.constant.CouponUsed;
import com.xxfc.platform.activity.dto.UserCouponDTO;
import com.xxfc.platform.activity.dto.UserCouponFindDTO;
import com.xxfc.platform.activity.dto.UserCouponSendDTO;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.entity.IntegralUserTotal;
import com.xxfc.platform.activity.entity.UserCoupon; import com.xxfc.platform.activity.entity.UserCoupon;
import com.xxfc.platform.activity.vo.CouponVo;
import com.xxfc.platform.activity.vo.UserCouponPageVo;
import com.xxfc.platform.activity.vo.UserCouponVo; import com.xxfc.platform.activity.vo.UserCouponVo;
import com.xxfc.platform.universal.weixin.util.Snowflake; import com.xxfc.platform.universal.weixin.util.Snowflake;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.assertj.core.util.Arrays; import org.assertj.core.util.Arrays;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.mapper.UserCouponMapper; import com.xxfc.platform.activity.mapper.UserCouponMapper;
...@@ -19,9 +31,9 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; ...@@ -19,9 +31,9 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.time.Instant;
import java.util.Comparator; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
/** /**
* 我的优惠卷 * 我的优惠卷
...@@ -38,6 +50,12 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> { ...@@ -38,6 +50,12 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> {
@Autowired @Autowired
private CouponBiz couponBiz; private CouponBiz couponBiz;
@Autowired
private UserFeign userFeign;
@Autowired
private IntegralUserTotalBiz integralUserTotalBiz;
private static final Long DAY=86400000L; private static final Long DAY=86400000L;
//自动发送优惠卷 //自动发送优惠卷
...@@ -235,6 +253,95 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> { ...@@ -235,6 +253,95 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> {
} }
public PageDataVO<UserCouponPageVo> listUserCouponWithPage(UserCouponFindDTO userCouponFindDTO) {
PageDataVO<UserCouponPageVo> userCouponPag = new PageDataVO<>();
if (StringUtils.isNotEmpty(userCouponFindDTO.getPhone())) {
AppUserLogin appUserLogin = userFeign.one(userCouponFindDTO.getPhone());
userCouponFindDTO.setUserId(appUserLogin.getId());
}
PageDataVO<UserCouponDTO> pageDataVO = PageDataVO.pageInfo(userCouponFindDTO.getPage(), userCouponFindDTO.getLimit(), () -> mapper.findUserCoupons(userCouponFindDTO));
List<UserCouponDTO> data = pageDataVO.getData();
if (CollectionUtils.isEmpty(data)) {
return userCouponPag;
}
Map<Integer, AppUserLogin> userIdAndAppuserLoginMap = null;
if (Objects.nonNull(userCouponFindDTO.getPhone())) {
List<Integer> userIds = data.stream().map(UserCouponDTO::getUserId).collect(Collectors.toList());
userIdAndAppuserLoginMap = userFeign.findAppUsersByUserIds(userIds);
}
List<UserCouponPageVo> userCouponPageVos = new ArrayList<>();
UserCouponPageVo userCouponPageVo;
for (UserCouponDTO userCouponDTO : data) {
userCouponPageVo = new UserCouponPageVo();
BeanUtils.copyProperties(userCouponDTO, userCouponPageVo);
if (Objects.nonNull(userCouponFindDTO.getPhone())) {
userCouponPageVo.setPhone(userCouponFindDTO.getPhone());
} else {
userCouponPageVo.setPhone(userIdAndAppuserLoginMap == null ? "" : userIdAndAppuserLoginMap.get(userCouponDTO.getUserId()) == null ? "" : userIdAndAppuserLoginMap.get(userCouponDTO.getUserId()).getUsername());
}
userCouponPageVos.add(userCouponPageVo);
}
userCouponPag.setPageSize(pageDataVO.getPageSize());
userCouponPag.setPageNum(pageDataVO.getPageNum());
userCouponPag.setTotalCount(pageDataVO.getTotalCount());
userCouponPag.setTotalPage(pageDataVO.getTotalPage());
userCouponPag.setData(userCouponPageVos);
return userCouponPag;
}
public int sendCoupon(UserCouponSendDTO userCouponSendDTO) {
AppUserLogin appUserLogin = userFeign.one(userCouponSendDTO.getPhone());
CouponVo couponVo = couponBiz.findCouponById(userCouponSendDTO.getCouponId());
UserCoupon userCoupon;
List<UserCoupon> userCoupons = new ArrayList<>();
for (int i=0;i<userCouponSendDTO.getCouponNum();i++){
userCoupon = new UserCoupon();
userCoupon.setCouponId(userCouponSendDTO.getCouponId());
userCoupon.setUserId(appUserLogin.getId());
userCoupon.setCrtTime(Instant.now().toEpochMilli());
userCoupon.setStartTime(couponVo.getValidStartTime());
userCoupon.setExpireTime(couponVo.getValidEndTime());
userCoupons.add(userCoupon);
}
return mapper.inserBatch(userCoupons);
}
public long importUserCoupon(Integer couponId,List<String[]> userCounponData) {
List<String> phones = userCounponData.stream().map(x -> x[0]).collect(Collectors.toList());
Map<String,Integer> phoneAndAppUserLoginMap = userFeign.findAppusersByUserNames(phones);
CouponVo couponVo = couponBiz.findCouponById(couponId);
UserCoupon userCoupon;
List<UserCoupon> userCoupons = new ArrayList<>();
long length = userCounponData.size();
for (int i=0;i<length;i++){
userCoupon = new UserCoupon();
userCoupon.setCouponId(couponId);
userCoupon.setStartTime(couponVo.getValidStartTime());
userCoupon.setExpireTime(couponVo.getValidEndTime());
userCoupon.setCrtTime(Instant.now().toEpochMilli());
userCoupon.setUserId(phoneAndAppUserLoginMap.get(userCounponData.get(i)[0]));
userCoupons.add(userCoupon);
}
return mapper.inserBatch(userCoupons);
}
public UserInfoDTO getUserInfo(Integer userId)throws Exception{
UserInfoDTO userInfoDTO=new UserInfoDTO();
IntegralUserTotal integralUserTotal=new IntegralUserTotal();
integralUserTotal.setUserId(userId);
integralUserTotal=integralUserTotalBiz.selectOne(integralUserTotal);
BeanUtils.copyProperties(integralUserTotal,userInfoDTO);
UserCoupon userCoupon=new UserCoupon();
userCoupon.setUserId(userId);
userCoupon.setIsUse(0);
Long couponNumber=selectCount(userCoupon);
userInfoDTO.setCouponNumber(couponNumber);
return userInfoDTO;
}
} }
\ No newline at end of file
...@@ -49,10 +49,9 @@ public class SwaggerConfig { ...@@ -49,10 +49,9 @@ public class SwaggerConfig {
pars.add(ticketPar2.build()); pars.add(ticketPar2.build());
return new Docket(DocumentationType.SWAGGER_2) return new Docket(DocumentationType.SWAGGER_2)
.host("10.1.37.248:8765/api/activity")
.select() .select()
.apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.activity")) .apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.activity"))
//.apis(RequestHandlerSelectors.any()) .apis(RequestHandlerSelectors.any())
.build() .build()
.globalOperationParameters(pars) .globalOperationParameters(pars)
.apiInfo(apiInfo()); .apiInfo(apiInfo());
......
package com.xxfc.platform.activity.mapper; package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.vo.CouponTitleVo;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/** /**
* 优惠券表 * 优惠券表
* *
...@@ -11,5 +14,6 @@ import tk.mybatis.mapper.common.Mapper; ...@@ -11,5 +14,6 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2019-06-21 14:34:49 * @date 2019-06-21 14:34:49
*/ */
public interface CouponMapper extends Mapper<Coupon> { public interface CouponMapper extends Mapper<Coupon> {
List<CouponTitleVo> selectTitles();
} }
package com.xxfc.platform.activity.mapper; package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.UserCouponDTO;
import com.xxfc.platform.activity.dto.UserCouponFindDTO;
import com.xxfc.platform.activity.entity.UserCoupon; import com.xxfc.platform.activity.entity.UserCoupon;
import com.xxfc.platform.activity.vo.UserCouponVo; import com.xxfc.platform.activity.vo.UserCouponVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Update;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
...@@ -15,7 +18,7 @@ import java.util.List; ...@@ -15,7 +18,7 @@ import java.util.List;
* @email 18178966185@163.com * @email 18178966185@163.com
* @date 2019-06-21 14:34:49 * @date 2019-06-21 14:34:49
*/ */
public interface UserCouponMapper extends Mapper<UserCoupon> { public interface UserCouponMapper extends Mapper<UserCoupon> , InsertListMapper<UserCoupon> {
//我的优惠卷 //我的优惠卷
public List<UserCouponVo> getUserCouponsByType(@Param("userId")Integer userId,@Param("type")int type,@Param("time")Long time,@Param("channel")Integer channel); public List<UserCouponVo> getUserCouponsByType(@Param("userId")Integer userId,@Param("type")int type,@Param("time")Long time,@Param("channel")Integer channel);
...@@ -26,5 +29,9 @@ public interface UserCouponMapper extends Mapper<UserCoupon> { ...@@ -26,5 +29,9 @@ public interface UserCouponMapper extends Mapper<UserCoupon> {
//已使用的优惠券数量数量加减 //已使用的优惠券数量数量加减
@Update("update coupon set used_count=used_count+#{count} where `id`=#{id}") @Update("update coupon set used_count=used_count+#{count} where `id`=#{id}")
int upUsedCount(@Param("id")Integer id,@Param("count")Integer count); int upUsedCount(@Param("id")Integer id,@Param("count")Integer count);
List<UserCouponDTO> findUserCoupons(UserCouponFindDTO userCouponFindDTO);
int inserBatch(@Param("userCoupons") List<UserCoupon> userCoupons);
} }
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPopularizeUserBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/24 14:58
*/
@RestController
@RequestMapping("/activity_data")
public class DateController {
@Autowired
private ActivityPopularizeUserBiz activityPopularizeUserBiz;
@GetMapping("/clear")
public ObjectRestResponse<Void> clearDate(@RequestParam(value = "userIds") List<Integer> userIds){
activityPopularizeUserBiz.deleteByUserIds(userIds);
return ObjectRestResponse.succ();
}
}
package com.xxfc.platform.activity.rest; package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.dto.UserInfoDTO;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
...@@ -98,7 +99,11 @@ public class UserCouponController extends ActivityBaseController<UserCouponBiz> ...@@ -98,7 +99,11 @@ public class UserCouponController extends ActivityBaseController<UserCouponBiz>
} }
@ApiOperation("获取用户信息")
@GetMapping(value = "/info")
public UserInfoDTO getUserInfo(@RequestParam("userId") Integer userId) throws Exception{
return baseBiz.getUserInfo(userId);
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin; package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.biz.CouponBiz; import com.xxfc.platform.activity.biz.CouponBiz;
import com.xxfc.platform.activity.dto.CouponDTO;
import com.xxfc.platform.activity.dto.CouponFindDTO; import com.xxfc.platform.activity.dto.CouponFindDTO;
import com.xxfc.platform.activity.vo.CouponPagVo;
import com.xxfc.platform.activity.vo.CouponTitleVo;
import com.xxfc.platform.activity.vo.CouponVo;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List;
/** /**
* @author libin * @author libin
...@@ -18,13 +25,47 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -18,13 +25,47 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/admin/coupon") @RequestMapping("/admin/coupon")
public class CouponAdminController { public class CouponAdminController {
@Autowired @Autowired
private CouponBiz couponBiz; private CouponBiz couponBiz;
@ApiOperation("优惠券列表")
@GetMapping("/page") @GetMapping("/page")
public ObjectRestResponse listCouponWithPage(CouponFindDTO couponFindDTO){ public ObjectRestResponse<PageDataVO<CouponPagVo>> listCouponWithPage(CouponFindDTO couponFindDTO) {
PageDataVO<CouponPagVo> couponPage = couponBiz.listCouponWithPage(couponFindDTO);
return ObjectRestResponse.succ(couponPage);
}
@ApiOperation("查询优惠券详情")
@GetMapping("/{id}")
public ObjectRestResponse<CouponVo> findCouponById(@PathVariable(value = "id") Integer id){
CouponVo couponVo = couponBiz.findCouponById(id);
return ObjectRestResponse.succ(couponVo);
}
@ApiOperation("获取优惠劵标题列表")
@GetMapping("/titles")
public ObjectRestResponse<List<CouponTitleVo>> getCouponTitleList(){
List<CouponTitleVo> titles = couponBiz.getCouponTitleList();
return ObjectRestResponse.succ(titles);
}
@ApiOperation("优惠劵新增 或 编辑")
@PostMapping
public ObjectRestResponse<Void> addCoupon(@RequestBody CouponDTO couponDTO, UserDTO userDTO){
couponBiz.addCoupon(couponDTO,userDTO);
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
@ApiOperation("优惠劵逻辑删除")
@DeleteMapping("/{id}")
public ObjectRestResponse<Void> deleteCouponById(@PathVariable(value = "id") Integer id,UserDTO userDTO){
couponBiz.updateCouponDelStateById(id,userDTO);
return ObjectRestResponse.succ();
}
@ApiOperation("检查优惠劵是否已经在使用阶段")
@GetMapping("check/{id}")
public Boolean checkCouponHasUsedById(@PathVariable(value = "id") Integer id){
return false;
}
} }
package com.xxfc.platform.activity.rest.admin;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.excel.ExcelImport;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.ActivityApplication;
import com.xxfc.platform.activity.biz.UserCouponBiz;
import com.xxfc.platform.activity.dto.UserCouponFindDTO;
import com.xxfc.platform.activity.dto.UserCouponSendDTO;
import com.xxfc.platform.activity.vo.UserCouponPageVo;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/23 16:22
*/
@RestController
@RequestMapping("/admin/user_coupon")
public class UserCouponAdminController {
@Autowired
private UserCouponBiz userCouponBiz;
@ApiOperation("领劵列表")
@GetMapping("/page")
public ObjectRestResponse<PageDataVO<UserCouponPageVo>> listUserCouponWithPage(UserCouponFindDTO userCouponFindDTO) {
PageDataVO<UserCouponPageVo> userCouponPage = userCouponBiz.listUserCouponWithPage(userCouponFindDTO);
return ObjectRestResponse.succ(userCouponPage);
}
@PostMapping("/sendcoupon")
public ObjectRestResponse<Void> sendCoupon(UserCouponSendDTO userCouponSendDTO){
userCouponBiz.sendCoupon(userCouponSendDTO);
return ObjectRestResponse.succ();
}
@PostMapping("/import")
public ObjectRestResponse<Void> importCouponBatch(@RequestParam("couponId") Integer couponId,@RequestPart(name = "file")MultipartFile couponExcel){
List<String[]> userCounponData = ExcelImport.getExcelData(couponExcel);
if (userCounponData.size() < 1) {
return ObjectRestResponse.createFailedResult(1001, "导入不能没数据!!!");
}
userCounponData.remove(0);
userCouponBiz.importUserCoupon(couponId,userCounponData);
return ObjectRestResponse.succ();
}
@ApiOperation("用户劵excel模板下载")
@GetMapping("/excel_model/dowload")
public ResponseEntity<byte[]> dowloadUserMemberExcelModel(HttpServletResponse response) {
// 重置response
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.addHeader("Content-Disposition", "attachment;filename=usercoupon.xlsx");
InputStream inputStream = ActivityApplication.class.getClassLoader().getResourceAsStream("file/usercoupon.xlsx");
try {
byte[] bytes = IOUtils.toByteArray(inputStream);
return ResponseEntity.ok(bytes);
} catch (IOException e) {
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
}
...@@ -37,4 +37,7 @@ ...@@ -37,4 +37,7 @@
<result property="isDel" column="is_del"/> <result property="isDel" column="is_del"/>
</resultMap> </resultMap>
<select id="selectTitles" resultType="com.xxfc.platform.activity.vo.CouponTitleVo">
select `id`,`title` from `coupon` where `is_del`=0
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<mapper namespace="com.xxfc.platform.activity.mapper.UserCouponMapper"> <mapper namespace="com.xxfc.platform.activity.mapper.UserCouponMapper">
<!-- 可根据自己的需求,是否要使用 --> <!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.vo.UserCouponVo" id="userCouponMap"> <resultMap type="com.xxfc.platform.activity.vo.UserCouponVo" id="userCouponMap">
<result property="couponId" column="coupon_id"/> <result property="couponId" column="coupon_id"/>
<result property="userId" column="user_id"/> <result property="userId" column="user_id"/>
...@@ -31,21 +31,21 @@ ...@@ -31,21 +31,21 @@
<select id="getUserCouponsByType" resultMap="userCouponMap"> <select id="getUserCouponsByType" resultMap="userCouponMap">
SELECT SELECT
* *
FROM FROM
user_coupon u user_coupon u
LEFT JOIN coupon c ON u.coupon_id = c.id LEFT JOIN coupon c ON u.coupon_id = c.id
WHERE WHERE
u.is_del = 0 and u.user_id=#{userId} u.is_del = 0 and u.user_id=#{userId}
<if test="type==0"> <if test="type==0">
and u.is_use=0 and u.expire_time >=#{time} and u.is_use=0 and u.expire_time >=#{time}
</if> </if>
<if test="type==1"> <if test="type==1">
and u.is_use=1 and u.is_use=1
</if> </if>
<if test="type==2"> <if test="type==2">
and u.is_use=0 and u.expire_time &lt;#{time} and u.is_use=0 and u.expire_time &lt;#{time}
</if> </if>
<if test="channel!=null and channel!=''"> <if test="channel!=null and channel!=''">
and (c.channel=#{channel} or c.channel=0 ) and (c.channel=#{channel} or c.channel=0 )
...@@ -72,4 +72,41 @@ ...@@ -72,4 +72,41 @@
u.is_del = 0 and u.ticker_no=#{tickerNo} limit 1 u.is_del = 0 and u.ticker_no=#{tickerNo} limit 1
</select> </select>
<select id="findUserCoupons" resultType="com.xxfc.platform.activity.dto.UserCouponDTO"
parameterType="com.xxfc.platform.activity.dto.UserCouponFindDTO">
SELECT
uc.id,
uc.user_id AS `userId`,
uc.is_use AS `isUse`,
cp.title,
cp.used_amount AS `usedAmount`,
uc.crt_time AS `crtTime`,
uc.expire_time AS `expireTime`,
uc.use_time AS `useTime`
FROM
( SELECT `id`, `coupon_id`, `user_id`, `is_use`, `crt_time`, `expire_time`, `use_time` FROM `user_coupon` WHERE
`is_del` = 0
<if test="userId != null">
AND `user_id`=#{userId}
</if>
<if test="status != null">
AND `is_use`=#{status}
</if>) AS `uc`
INNER JOIN ( SELECT `id`, `title`, `used_amount` FROM `coupon` WHERE 1=1
<if test="couponId != null">
AND `id`=#{couponId}
</if>
<if test="usedAmount != null">
AND `used_amount`=#{usedAmount}
</if>
) AS `cp` ON uc.coupon_id = cp.id order by `crtTime` DESC
</select>
<insert id="inserBatch">
INSERT INTO `user_coupon`(`user_id`,`coupon_id`,`start_time`,`expire_time`,`crt_time`) VALUES
<foreach collection="userCoupons" item="userCoupon" separator=",">
(#{userCoupon.userId},#{userCoupon.couponId},#{userCoupon.startTime},#{userCoupon.expireTime},#{userCoupon.crtTime} )
</foreach>
</insert>
</mapper> </mapper>
\ No newline at end of file
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum ItemTypeEnum {
//item 类型 101--租车车型 102--车损免赔 103--司机费用 201--旅游成人 202--旅游儿童 203--旅游保险 301--会员
VEHICLE_MODEL(101, "租车车型"),
DAMAGE_SAFE(102, "车损免赔"),
DRIVER(103, "司机"),
TOUR_ADULT(201, "旅游成人"),
TOUR_CHILD(202, "旅游儿童"),
TOUR_INSURE(203, "旅游保险"),
MEMBER(301, "会员"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
public static Map<Integer, ItemTypeEnum> codeAndDesc = new HashMap<Integer, ItemTypeEnum>();
//Maps.newHashMap();
static{
for(ItemTypeEnum enumE : ItemTypeEnum.values()){
codeAndDesc.put(enumE.getCode(), enumE);
}
}
ItemTypeEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
public static ItemTypeEnum get(Integer code) {
for(ItemTypeEnum enumE : ItemTypeEnum.values()) {
if (enumE.getCode().equals(code)) {
return enumE;
}
}
return null;
}
}
\ No newline at end of file
package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 购房车提交表单
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-23 17:33:06
*/
@Data
@Table(name = "order_item")
public class OrderItem implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 名称
*/
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
/**
* item 类型 1--租车车型 2--车损免赔 3--司机费用 4--旅游项目 5--旅游保险 6--会员
*/
@Column(name = "type")
@ApiModelProperty(value = "item 类型 1--租车车型 2--车损免赔 3--司机费用 4--旅游项目 5--旅游保险 6--会员")
private Integer type;
/**
* 原单价
*/
@Column(name = "meta_unit_price")
@ApiModelProperty(value = "原单价")
private BigDecimal metaUnitPrice;
/**
* 单价
*/
@Column(name = "unit_price")
@ApiModelProperty(value = "单价")
private BigDecimal unitPrice;
/**
* 总数 (购买数 + 赠送数)
*/
@Column(name = "total_num")
@ApiModelProperty(value = "总数 (购买数 + 赠送数)")
private Integer totalNum;
/**
* 购买数量
*/
@Column(name = "buy_num")
@ApiModelProperty(value = "购买数量")
private Integer buyNum;
/**
* 赠送的数量
*/
@Column(name = "award_num")
@ApiModelProperty(value = "赠送的数量")
private Integer awardNum;
/**
* 扣减数量 (从购买数里面扣减的数量)
*/
@Column(name = "cut_num")
@ApiModelProperty(value = "扣减数量 (从购买数里面扣减的数量)")
private Integer cutNum;
/**
* 商品id 有些为空如车损,免赔等
*/
@Column(name = "good_id")
@ApiModelProperty(value = "商品id 有些为空如车损,免赔等")
private Integer goodId;
/**
* 优惠券等扣减的价格
*/
@Column(name = "coupon_amount")
@ApiModelProperty(value = "优惠券扣减的价格")
private BigDecimal couponAmount;
/**
* 真实的总价
*/
@Column(name = "real_amount")
@ApiModelProperty(value = "真实的总价")
private BigDecimal realAmount;
/**
* 订单id
*/
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
public Integer getCalculateNum() {
return buyNum - cutNum;
}
public BigDecimal getCalculateAmount(Boolean isSetRealAmount) {
BigDecimal calculateAmount = getUnitPrice().multiply(BigDecimal.valueOf(getCalculateNum()));
if(isSetRealAmount) {
setRealAmount(calculateAmount);
}
return calculateAmount;
}
public BigDecimal handleCouponAmount(BigDecimal couponAmount) {
BigDecimal realAmountResidue = getRealAmount().subtract(couponAmount);
//剩余价格小于0 即优惠价格超出本item的实际价格,返回剩余优惠
if(BigDecimal.ZERO.compareTo(realAmountResidue) > 0) {
setCouponAmount(getRealAmount());
setRealAmount(BigDecimal.ZERO);
return couponAmount.subtract(getCouponAmount());
}else {
//剩余价格大于等于0 即优惠价格低于本item的实际价格,返回ZERO
setCouponAmount(couponAmount);
setRealAmount(realAmountResidue);
return BigDecimal.ZERO;
}
}
public BigDecimal getTotalAmount() {
return realAmount.add(couponAmount);
}
}
package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-23 17:33:06
*/
@Data
@Table(name = "order_log")
public class OrderLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 日志id
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("日志id")
private Integer id;
/**
* 订单id
*/
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
/**
* 对应的订单状态
*/
@Column(name = "order_status")
@ApiModelProperty(value = "对应的订单状态")
private Integer orderStatus;
/**
* 操作日志
*/
@Column(name = "log_content")
@ApiModelProperty(value = "操作日志")
private String logContent;
/**
* 操作者id,另外 -1为系统
*/
@Column(name = "log_user_id")
@ApiModelProperty(value = "操作者id,另外 -1为系统")
private Integer logUserId;
/**
* 操作者类型
*/
@Column(name = "log_user_type")
@ApiModelProperty(value = "操作者类型")
private Integer logUserType;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 日志类型 11--创建订单;12--创建订单;
*/
@Column(name = "type")
@ApiModelProperty(value = "日志类型 11--创建订单;12--创建订单;")
private Integer type;
}
package com.xxfc.platform.order.entity.inter; package com.xxfc.platform.order.entity.inter;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
public interface OrderDetail { import java.util.List;
public Integer getId(); public interface OrderDetail extends OrderItemInter {
public void setId(Integer id); Integer getId();
void setId(Integer id);
Integer getOrderId(); Integer getOrderId();
...@@ -19,4 +23,9 @@ public interface OrderDetail { ...@@ -19,4 +23,9 @@ public interface OrderDetail {
Integer getOrderOrigin(); Integer getOrderOrigin();
void setOrderOrigin(Integer orderOrigin); void setOrderOrigin(Integer orderOrigin);
List<String> getTickerNo();
void setTickerNo(List<String> tickerNo);
} }
package com.xxfc.platform.order.entity.inter;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
import java.util.List;
public interface OrderItemInter {
List<OrderItem> getItems();
void setItems(List<OrderItem> items);
default OrderItem getItemByTypeEnum(ItemTypeEnum itemTypeEnum) {
for(OrderItem item: getItems()) {
if(itemTypeEnum.getCode().equals(item.getType())) {
return item;
}
}
return null;
}
}
package com.xxfc.platform.order.pojo.mq; package com.xxfc.platform.order.pojo.mq;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.entity.OrderMemberDetail; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.inter.OrderItemInter;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class OrderMQDTO extends BaseOrder { public class OrderMQDTO extends BaseOrder implements OrderItemInter {
public static final int ORDER_CRT = 1; public static final int ORDER_CRT = 1;
public static final int ORDER_CANCEL = 2; public static final int ORDER_CANCEL = 2;
...@@ -20,6 +22,17 @@ public class OrderMQDTO extends BaseOrder { ...@@ -20,6 +22,17 @@ public class OrderMQDTO extends BaseOrder {
OrderMemberDetail orderMemberDetail; OrderMemberDetail orderMemberDetail;
List<OrderItem> items;
public OrderItem getItemByTypeEnum(ItemTypeEnum itemTypeEnum) {
for(OrderItem item: items) {
if(itemTypeEnum.getCode().equals(item.getType())) {
return item;
}
}
return null;
}
/** /**
* 标记是什么操作 * 标记是什么操作
* 0--删除" * 0--删除"
......
...@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; ...@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderMemberDetail; import com.xxfc.platform.order.entity.OrderMemberDetail;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.OrderTourDetail;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
...@@ -27,4 +28,9 @@ public class MemberBO extends OrderMemberDetail implements OrderDetail { ...@@ -27,4 +28,9 @@ public class MemberBO extends OrderMemberDetail implements OrderDetail {
* 优惠券* * 优惠券*
*/ */
private List<String> tickerNo; private List<String> tickerNo;
/**
* 订单子项
*/
List<OrderItem> items;
} }
package com.xxfc.platform.order.pojo.order;
import com.xxfc.platform.order.entity.OrderItem;
public class OrderItemDTO extends OrderItem {
}
...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.pojo.order; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
...@@ -32,4 +33,9 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail ...@@ -32,4 +33,9 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
* 优惠券* * 优惠券*
*/ */
private List<String> tickerNo; private List<String> tickerNo;
/**
* 订单子项
*/
List<OrderItem> items;
} }
...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.entity.User; ...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.entity.User;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.OrderTourDetail;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
...@@ -29,4 +30,9 @@ public class TourBO extends OrderTourDetail implements OrderDetail { ...@@ -29,4 +30,9 @@ public class TourBO extends OrderTourDetail implements OrderDetail {
* 优惠券* * 优惠券*
*/ */
private List<String> tickerNo; private List<String> tickerNo;
/**
* 订单子项
*/
List<OrderItem> items;
} }
...@@ -42,10 +42,10 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -42,10 +42,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import static com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.*; import static com.xxfc.platform.universal.constant.DictionaryKey.*;
import static com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant.*;
/** /**
* *
...@@ -76,6 +76,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -76,6 +76,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
@Autowired @Autowired
OrderRefundBiz orderRefundBiz; OrderRefundBiz orderRefundBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired @Autowired
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
...@@ -514,6 +517,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -514,6 +517,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
orderMQDTO.setOrderRentVehicleDetail(orvd); orderMQDTO.setOrderRentVehicleDetail(orvd);
orderMQDTO.setOrderTourDetail(otd); orderMQDTO.setOrderTourDetail(otd);
orderMQDTO.setOrderMemberDetail(omd); orderMQDTO.setOrderMemberDetail(omd);
//获取item
orderMQDTO.setItems(orderItemBiz.selectList(new OrderItem(){{
setOrderId(baseOrder.getId());
}}));
sendQueue(orderMQDTO, sign); sendQueue(orderMQDTO, sign);
} }
......
package com.xxfc.platform.order.biz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.mapper.OrderItemMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import java.math.BigDecimal;
/**
* 购房车提交表单
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-23 17:33:06
*/
@Service
public class OrderItemBiz extends BaseBiz<OrderItemMapper,OrderItem> {
public OrderItem initOrderItem(BigDecimal price, Integer num, String name, Integer goodId, ItemTypeEnum itemTypeEnum){
return new OrderItem(){{
setMetaUnitPrice(price);
setUnitPrice(price);
setBuyNum(num);
setTotalNum(num);
setAwardNum(0);
setCutNum(0);
setCouponAmount(BigDecimal.ZERO);
setName(name);
setGoodId(goodId);
setType(itemTypeEnum.getCode());
}};
}
}
\ No newline at end of file
package com.xxfc.platform.order.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderLog;
import com.xxfc.platform.order.mapper.OrderLogMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
*
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-23 17:33:06
*/
@Service
public class OrderLogBiz extends BaseBiz<OrderLogMapper,OrderLog> {
}
\ No newline at end of file
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderItem;
import tk.mybatis.mapper.common.Mapper;
/**
* 购房车提交表单
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-23 17:33:06
*/
public interface OrderItemMapper extends Mapper<OrderItem> {
}
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderLog;
import tk.mybatis.mapper.common.Mapper;
/**
*
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-23 17:33:06
*/
public interface OrderLogMapper extends Mapper<OrderLog> {
}
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.entity.OrderItem;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("orderItem")
public class OrderItemController extends BaseController<OrderItemBiz,OrderItem> {
}
\ No newline at end of file
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderLogBiz;
import com.xxfc.platform.order.entity.OrderLog;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("orderLog")
public class OrderLogController extends BaseController<OrderLogBiz,OrderLog> {
}
\ No newline at end of file
...@@ -29,6 +29,7 @@ import springfox.documentation.annotations.ApiIgnore; ...@@ -29,6 +29,7 @@ import springfox.documentation.annotations.ApiIgnore;
import javax.persistence.Column; import javax.persistence.Column;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Controller @Controller
@RequestMapping("orderRentVehicle") @RequestMapping("orderRentVehicle")
...@@ -58,7 +59,8 @@ public class OrderRentVehicleController extends CommonBaseController { ...@@ -58,7 +59,8 @@ public class OrderRentVehicleController extends CommonBaseController {
setBookEndDate(vo.getBookEndDate()); setBookEndDate(vo.getBookEndDate());
}}); }});
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData()); bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos())? Arrays.asList(vo.getTickerNos().split(",")):null); bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos())?
StrUtil.splitTrim(vo.getTickerNos(), ","):null);
orderRentVehicleService.createOrder(bo); orderRentVehicleService.createOrder(bo);
return ObjectRestResponse.succ(bo.getOrder()); return ObjectRestResponse.succ(bo.getOrder());
} }
......
...@@ -6,7 +6,9 @@ import com.github.wxiaoqi.security.common.context.BaseContextHandler; ...@@ -6,7 +6,9 @@ import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.OrderUtil; import com.github.wxiaoqi.security.common.util.OrderUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.BaseOrderBiz; import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
...@@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Transactional @Transactional
public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends OrderDetail>{ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends OrderDetail>{
...@@ -36,6 +39,12 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -36,6 +39,12 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
@Autowired @Autowired
protected BaseOrderBiz baseOrderBiz; protected BaseOrderBiz baseOrderBiz;
@Autowired
protected OrderItemBiz orderItemBiz;
@Autowired
ActivityFeign activityFeign;
protected OrderTypeEnum orderTypeEnum; protected OrderTypeEnum orderTypeEnum;
protected Integer channel; protected Integer channel;
...@@ -101,6 +110,14 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -101,6 +110,14 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
if(updateResult > 0) { if(updateResult > 0) {
detail.getOrder().setVersion(detail.getOrder().getVersion() + 1); detail.getOrder().setVersion(detail.getOrder().getVersion() + 1);
} }
//插入item
if(null != detail.getItems() && detail.getItems().size() > 0) {
orderItemBiz.insertMultiSelective(detail.getItems().stream().map(v -> {
v.setOrderId(detail.getOrderId());
return v;
}).collect(Collectors.toList()));
}
} }
/** /**
......
...@@ -5,13 +5,17 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; ...@@ -5,13 +5,17 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.pojo.order.MemberBO; import com.xxfc.platform.order.pojo.order.MemberBO;
import com.xxfc.platform.order.pojo.price.OrderPriceVO; import com.xxfc.platform.order.pojo.price.OrderPriceVO;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
...@@ -27,7 +31,9 @@ import javax.servlet.http.HttpServletRequest; ...@@ -27,7 +31,9 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER; import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service @Service
...@@ -61,6 +67,9 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -61,6 +67,9 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
@Autowired
ActivityFeign activityFeign;
@Autowired @Autowired
public HttpServletRequest request; public HttpServletRequest request;
...@@ -102,6 +111,14 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -102,6 +111,14 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
//设置订单名称 //设置订单名称
bo.getOrder().setName(bo.getBaseUserMemberLevel().getName()); bo.getOrder().setName(bo.getBaseUserMemberLevel().getName());
OrderItem memberItem = bo.getItemByTypeEnum(ItemTypeEnum.MEMBER);
BigDecimal amount = memberItem.getTotalAmount();
//如果有使用优惠券,则扣减
if(BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) {
activityFeign.use(bo.getOrder().getUserId(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE);
}
super.handleDetail(bo); super.handleDetail(bo);
//发送定时取消订单(30分钟) //发送定时取消订单(30分钟)
...@@ -120,13 +137,28 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -120,13 +137,28 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
BigDecimal orderAmount = BigDecimal.ZERO; BigDecimal orderAmount = BigDecimal.ZERO;
BigDecimal goodsAmount = BigDecimal.ZERO; BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal realAmount = BigDecimal.ZERO; BigDecimal realAmount = BigDecimal.ZERO;
BigDecimal couponAmount = BigDecimal.ZERO;
//设置Item
OrderItem vehicleOrderItem = orderItemBiz.initOrderItem(detail.getBaseUserMemberLevel().getPrice(), 1, detail.getBaseUserMemberLevel().getName(), detail.getBaseUserMemberLevel().getId(), ItemTypeEnum.MEMBER);
//商品价格
goodsAmount = goodsAmount.add(vehicleOrderItem.getCalculateAmount(Boolean.TRUE));
//vehicleAmount 优惠券处理
if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) {
couponAmount = activityFeign.use(detail.getOrder().getUserId(), detail.getTickerNo(), detail.getOrder().getNo(), channel, goodsAmount, ActivityFeign.TYPE_NO_USE);
if(couponAmount.compareTo(BigDecimal.ZERO) > 0) {
detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(",")));
detail.getOrder().setHasDiscount(SYS_TRUE);
vehicleOrderItem.handleCouponAmount(couponAmount);
}
}
//商品价格
goodsAmount = goodsAmount.add(detail.getBaseUserMemberLevel().getPrice());
//订单总价格 //订单总价格
orderAmount = orderAmount.add(goodsAmount); orderAmount = orderAmount.add(goodsAmount);
//真实价格 //真实价格
realAmount = realAmount.add(orderAmount); realAmount = realAmount.add(orderAmount).subtract(couponAmount);
//生成订单明细 //生成订单明细
OrderPriceVO opv = new OrderPriceVO(); OrderPriceVO opv = new OrderPriceVO();
......
...@@ -14,11 +14,14 @@ import com.github.wxiaoqi.security.common.util.process.ResultCode; ...@@ -14,11 +14,14 @@ import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz; import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderCostEnum; import com.xxfc.platform.order.contant.enumerate.OrderCostEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderTemplate; import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.RentVehicleBO; import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
...@@ -36,6 +39,7 @@ import org.springframework.stereotype.Service; ...@@ -36,6 +39,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
...@@ -140,9 +144,12 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -140,9 +144,12 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
} }
} }
OrderItem vehicleModelItem = bo.getItemByTypeEnum(ItemTypeEnum.VEHICLE_MODEL);
BigDecimal amount = vehicleModelItem.getTotalAmount();
//如果有使用优惠券,则扣减 //如果有使用优惠券,则扣减
if(BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) { if(BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) {
activityFeign.use(bo.getAppUserDTO().getUserid(), bo.getTickerNo(), bo.getOrder().getNo(), channel, bo.getOrder().getGoodsAmount(), ActivityFeign.TYPE_USE); activityFeign.use(bo.getAppUserDTO().getUserid(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE);
} }
//获取可用车辆 //获取可用车辆
...@@ -177,6 +184,17 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -177,6 +184,17 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//当前用户 //当前用户
AppUserDTO dto = detail.getAppUserDTO(); AppUserDTO dto = detail.getAppUserDTO();
//车型信息
VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData();
//设置Item
OrderItem vehicleOrderItem = orderItemBiz.initOrderItem(vehicleModel.getPrice(), detail.getDayNum(), vehicleModel.getName(), vehicleModel.getId(), ItemTypeEnum.VEHICLE_MODEL);
OrderItem driverOrderItem = orderItemBiz.initOrderItem(DRIVER_PRICE, detail.getDayNum(), "平台司机", null, ItemTypeEnum.DRIVER);
OrderItem damageSafeOrderItem = orderItemBiz.initOrderItem(DAMAGE_SAFE, detail.getDayNum(), "免赔费用", null, ItemTypeEnum.DAMAGE_SAFE);
detail.setItems(new ArrayList<OrderItem>());
detail.getItems().add(vehicleOrderItem);
//如果用户存在,并且为会员,并且车辆有优惠价 //如果用户存在,并且为会员,并且车辆有优惠价
if(null != dto && null != detail.getRentFreeDay() && detail.getRentFreeDay() > 0 ) { if(null != dto && null != detail.getRentFreeDay() && detail.getRentFreeDay() > 0 ) {
if(null == dto.getRentFreeDays() || dto.getRentFreeDays() <= 0) { if(null == dto.getRentFreeDays() || dto.getRentFreeDays() <= 0) {
...@@ -189,6 +207,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -189,6 +207,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
}else { }else {
freeDayNum = detail.getDayNum(); freeDayNum = detail.getDayNum();
} }
vehicleOrderItem.setCutNum(freeDayNum);
vehicleDayNum = detail.getDayNum() - freeDayNum; vehicleDayNum = detail.getDayNum() - freeDayNum;
detail.getOrder().setHasMemberRight(SYS_TRUE); detail.getOrder().setHasMemberRight(SYS_TRUE);
}else { }else {
...@@ -199,7 +218,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -199,7 +218,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//计算价格 //计算价格
//计算车辆费用 //计算车辆费用
VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData();
//如果用户存在,并且为会员,并且车辆有优惠价 //如果用户存在,并且为会员,并且车辆有优惠价
if(null != dto && SYS_TRUE.equals(dto.getIsMember()) && !NONE.getCode().equals(dto.getMemberLevel()) && !DISCOUNT_STATUS_NONE.equals(vehicleModel.getRentDiscountStatus())) { if(null != dto && SYS_TRUE.equals(dto.getIsMember()) && !NONE.getCode().equals(dto.getMemberLevel()) && !DISCOUNT_STATUS_NONE.equals(vehicleModel.getRentDiscountStatus())) {
...@@ -220,35 +238,41 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -220,35 +238,41 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.getOrder().setHasMemberRight(SYS_TRUE); detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
} }
vehicleOrderItem.setUnitPrice(modelAmount);
}else { }else {
modelAmount = vehicleModel.getPrice(); modelAmount = vehicleModel.getPrice();
} }
vehicleAmount = vehicleAmount.add(modelAmount.multiply(BigDecimal.valueOf(vehicleDayNum)));
//如果有使用会员权益或者优惠券,则设置订单已优惠 //如果有使用会员权益或者优惠券,则设置订单已优惠
if(SYS_TRUE.equals(detail.getOrder().getHasMemberRight())) { if(SYS_TRUE.equals(detail.getOrder().getHasMemberRight())) {
detail.getOrder().setHasDiscount(SYS_TRUE); detail.getOrder().setHasDiscount(SYS_TRUE);
} }
//单价 * (购买天数 - 减免天数)
vehicleAmount = vehicleAmount.add(vehicleOrderItem.getCalculateAmount(Boolean.TRUE));
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) { if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
//计算司机费用 //计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum()))); driverAmount = driverAmount.add(driverOrderItem.getCalculateAmount(Boolean.TRUE));
detail.getItems().add(driverOrderItem);
} }
if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) { if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) {
//免赔费用 //免赔费用
damageSafeAmount = damageSafeAmount.add(DAMAGE_SAFE.multiply(BigDecimal.valueOf(detail.getDayNum()))); damageSafeAmount = damageSafeAmount.add(damageSafeOrderItem.getCalculateAmount(Boolean.TRUE));
detail.getItems().add(damageSafeOrderItem);
} }
//商品价格 //商品价格
goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount).add(damageSafeAmount); goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount).add(damageSafeAmount);
//优惠券处理 //vehicleAmount 优惠券处理
//待完成
if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) { if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) {
couponAmount = activityFeign.use(dto.getUserid(), detail.getTickerNo(), detail.getOrder().getNo(), channel, goodsAmount, ActivityFeign.TYPE_NO_USE); couponAmount = activityFeign.use(dto.getUserid(), detail.getTickerNo(), detail.getOrder().getNo(), channel, vehicleAmount, ActivityFeign.TYPE_NO_USE);
if(couponAmount.compareTo(BigDecimal.ZERO) > 0) { if(couponAmount.compareTo(BigDecimal.ZERO) > 0) {
detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(","))); detail.getOrder().setCouponTickerNos(detail.getTickerNo().stream().collect(Collectors.joining(",")));
detail.getOrder().setHasDiscount(SYS_TRUE);
vehicleOrderItem.handleCouponAmount(couponAmount);
} }
} }
...@@ -257,15 +281,14 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -257,15 +281,14 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
realAmount = orderAmount.subtract(couponAmount); realAmount = orderAmount.subtract(couponAmount);
//生成订单明细 //生成订单明细
RentVehiclePriceVO rvp = new RentVehiclePriceVO(){{ RentVehiclePriceVO rvp = new RentVehiclePriceVO();
setDeposit(vehicleModel.getDeposit()); rvp.setDeposit(vehicleModel.getDeposit());
setDriverPrice(DRIVER_PRICE); rvp.setDriverPrice(DRIVER_PRICE);
setDamageSafePrice(DAMAGE_SAFE); rvp.setDamageSafePrice(DAMAGE_SAFE);
setModelName(vehicleModel.getName()); rvp.setModelName(vehicleModel.getName());
setDayNum(detail.getDayNum()); rvp.setDayNum(detail.getDayNum());
setVehicleNum(1); rvp.setVehicleNum(1);
setDriverNum(1); rvp.setDriverNum(1);
}};
rvp.setCouponAmount(couponAmount); rvp.setCouponAmount(couponAmount);
rvp.setOrderAmount(orderAmount); rvp.setOrderAmount(orderAmount);
rvp.setGoodsAmount(goodsAmount); rvp.setGoodsAmount(goodsAmount);
...@@ -311,6 +334,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -311,6 +334,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) { if(DRIVER_TYPE_DAMAGE_SAFE.equals(detail.getDamageSafe())) {
childrenStr.append(",${tem_0104}"); childrenStr.append(",${tem_0104}");
} }
if(StrUtil.isNotBlank(detail.getOrder().getCouponTickerNos())) {
childrenStr.append(",${tem_9901}");
}
if(childrenStr.length() > 0){ if(childrenStr.length() > 0){
childrenStr.deleteCharAt(0); childrenStr.deleteCharAt(0);
} }
......
...@@ -12,11 +12,14 @@ import com.github.wxiaoqi.security.common.util.process.ResultCode; ...@@ -12,11 +12,14 @@ import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
import com.xxfc.platform.order.biz.OrderTourDetailBiz; import com.xxfc.platform.order.biz.OrderTourDetailBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderCostEnum; import com.xxfc.platform.order.contant.enumerate.OrderCostEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderTemplate; import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.TourBO; import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.TourPriceVO; import com.xxfc.platform.order.pojo.price.TourPriceVO;
...@@ -138,9 +141,13 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -138,9 +141,13 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
//扣減庫存 //扣減庫存
tourFeign.stock(bo.getSpePriceId(), bo.getTotalNumber(), TourFeign.STOCK_SUBTRACT); tourFeign.stock(bo.getSpePriceId(), bo.getTotalNumber(), TourFeign.STOCK_SUBTRACT);
OrderItem tourAdultItem = bo.getItemByTypeEnum(ItemTypeEnum.TOUR_ADULT);
OrderItem tourChildItem = bo.getItemByTypeEnum(ItemTypeEnum.TOUR_CHILD);
BigDecimal amount = tourAdultItem.getTotalAmount().add(tourChildItem.getTotalAmount());
//如果有使用优惠券,则扣减 //如果有使用优惠券,则扣减
if(BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) { if(BigDecimal.ZERO.compareTo(bo.getOrder().getCouponAmount()) < 0) {
activityFeign.use(bo.getAppUserDTO().getUserid(), bo.getTickerNo(), bo.getOrder().getNo(), channel, bo.getOrder().getGoodsAmount(), ActivityFeign.TYPE_USE); activityFeign.use(bo.getAppUserDTO().getUserid(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE);
} }
super.handleDetail(bo); super.handleDetail(bo);
...@@ -203,33 +210,47 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -203,33 +210,47 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
}}); }});
TourSpePriceVo tourSpePriceVo = objectRestResponse.getData(); TourSpePriceVo tourSpePriceVo = objectRestResponse.getData();
//设置Item
OrderItem tourAdultItem = orderItemBiz.initOrderItem(tourSpePriceVo.getOriginalPrice(), detail.getAdultNum(), "成人", detail.getSpePriceId(), ItemTypeEnum.TOUR_ADULT);
tourAdultItem.setUnitPrice(tourSpePriceVo.getPrice());
OrderItem tourChildItem = orderItemBiz.initOrderItem(tourSpePriceVo.getChildOriginalPrice(), detail.getChildNum(), "儿童", detail.getSpePriceId(), ItemTypeEnum.TOUR_CHILD);
tourChildItem.setUnitPrice(tourSpePriceVo.getChildPrice());
//人数 * 天数
OrderItem insureItem = orderItemBiz.initOrderItem(INSURE_PRICE, detail.getTotalNumber() * detail.getTourGood().getNumber(), "旅游保险", null, ItemTypeEnum.TOUR_INSURE);
//需要保险 //需要保险
if(SYS_TRUE.equals(detail.getHasInsure())) { if(SYS_TRUE.equals(detail.getHasInsure())) {
//人数 * 天数 * 价格 //人数 * 天数 * 价格
insureAmount = insureAmount.add(INSURE_PRICE.multiply(new BigDecimal(String.valueOf(detail.getTotalNumber() * detail.getTourGood().getNumber())))); insureAmount = insureAmount.add(insureItem.getCalculateAmount(Boolean.TRUE));
} }
//总价 //总价
tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getTotalChildPrice()); tourAmount = tourAmount.add(tourAdultItem.getCalculateAmount(Boolean.TRUE)).add(tourChildItem.getCalculateAmount(Boolean.TRUE));
//商品价格 //商品价格
goodsAmount = goodsAmount.add(tourAmount); goodsAmount = goodsAmount.add(tourAmount).add(insureAmount);
//优惠券处理 //优惠券处理
//待完成 //待完成
if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) { if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) {
couponAmount = activityFeign.use(dto.getUserid(), detail.getTickerNo(), detail.getOrder().getNo(), channel, goodsAmount, ActivityFeign.TYPE_NO_USE); couponAmount = activityFeign.use(dto.getUserid(), detail.getTickerNo(), detail.getOrder().getNo(), channel, tourAmount, ActivityFeign.TYPE_NO_USE);
if(couponAmount.compareTo(BigDecimal.ZERO) > 0) { if(couponAmount.compareTo(BigDecimal.ZERO) > 0) {
detail.getOrder().setCouponTickerNos(detail.getTickerNo() detail.getOrder().setCouponTickerNos(detail.getTickerNo()
.stream().collect(Collectors.joining(","))); .stream().collect(Collectors.joining(",")));
detail.getOrder().setHasDiscount(SYS_TRUE);
BigDecimal residueCouponAmount = tourAdultItem.handleCouponAmount(couponAmount);
if(residueCouponAmount.compareTo(BigDecimal.ZERO) > 0) {
tourChildItem.handleCouponAmount(residueCouponAmount);
}
} }
} }
//总价格 //总价格
orderAmount = orderAmount.add(goodsAmount).add(insureAmount); orderAmount = orderAmount.add(goodsAmount);
//真实价格 //真实价格
realAmount = realAmount.add(tourSpePriceVo.getRealPrice()).add(tourSpePriceVo.getRealChildPrice()).add(insureAmount).subtract(couponAmount); realAmount = realAmount.add(orderAmount).subtract(couponAmount);
//生成订单明细 //生成订单明细
TourPriceVO tpv = BeanUtil.toBean(tourSpePriceVo, TourPriceVO.class); TourPriceVO tpv = BeanUtil.toBean(tourSpePriceVo, TourPriceVO.class);
...@@ -260,7 +281,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -260,7 +281,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
if(SYS_TRUE.equals(detail.getHasInsure())) { if(SYS_TRUE.equals(detail.getHasInsure())) {
childrenStr.append(",${tem_0203}"); childrenStr.append(",${tem_0203}");
} }
if(StrUtil.isNotBlank(detail.getOrder().getCouponTickerNos())) {
childrenStr.append(",${tem_9901}");
}
if(childrenStr.length() > 0){ if(childrenStr.length() > 0){
childrenStr.deleteCharAt(0); childrenStr.deleteCharAt(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.xxfc.platform.order.mapper.OrderItemMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.order.entity.OrderItem" id="orderItemMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="metaUnitPrice" column="meta_unit_price"/>
<result property="unitPrice" column="unit_price"/>
<result property="totalNum" column="total_num"/>
<result property="buyNum" column="buy_num"/>
<result property="awardNum" column="award_num"/>
<result property="cutNum" column="cut_num"/>
<result property="goodid" column="goodId"/>
<result property="cutAmount" column="cut_amount"/>
<result property="realAmount" column="real_amount"/>
</resultMap>
</mapper>
\ No newline at end of file
<?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.xxfc.platform.order.mapper.OrderLogMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.order.entity.OrderLog" id="orderLogMap">
<result property="id" column="id"/>
<result property="orderId" column="order_id"/>
<result property="orderStatus" column="order_status"/>
<result property="logContent" column="log_content"/>
<result property="logUserId" column="log_user_id"/>
<result property="logUserType" column="log_user_type"/>
<result property="crtTime" column="crt_time"/>
<result property="type" column="type"/>
</resultMap>
</mapper>
\ No newline at end of file
...@@ -214,25 +214,25 @@ ...@@ -214,25 +214,25 @@
v.is_del=0 v.is_del=0
<if test="companyList != null"> <if test="companyList != null">
and ( v.park_branch_company_id in ( and ( v.park_branch_company_id in (
<trim suffixOverrides=","> <trim suffixOverrides=",">
<foreach collection="companyList" item="companyId"> <foreach collection="companyList" item="companyId">
#{companyId}, #{companyId},
</foreach> </foreach>
</trim> </trim>
) )
or v.expect_destination_branch_company_id in ( or v.expect_destination_branch_company_id in (
<trim suffixOverrides=","> <trim suffixOverrides=",">
<foreach collection="companyList" item="companyId"> <foreach collection="companyList" item="companyId">
#{companyId}, #{companyId},
</foreach> </foreach>
</trim> </trim>
) )
<!-- or v.subordinate_branch in (--> <!-- or v.subordinate_branch in (-->
<!-- <trim suffixOverrides=",">--> <!-- <trim suffixOverrides=",">-->
<!-- <foreach collection="companyList" item="companyId">--> <!-- <foreach collection="companyList" item="companyId">-->
<!-- #{companyId},--> <!-- #{companyId},-->
<!-- </foreach>--> <!-- </foreach>-->
<!-- </trim>--> <!-- </trim>-->
) )
</if> </if>
<if test="mRangeDateEnd !=null"> <if test="mRangeDateEnd !=null">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment