Commit 898942fa authored by beaver383's avatar beaver383
Browse files

修复订单确认页优惠券问题

parent 6fec6b58
......@@ -25,10 +25,20 @@ public class CouponVerifyService {
* @param checkedGoodsPrice
* @return
*/
public LitemallCoupon checkCoupon(Integer userId, Integer couponId, BigDecimal checkedGoodsPrice) {
public LitemallCoupon checkCoupon(Integer userId, Integer couponId, Integer userCouponId, BigDecimal checkedGoodsPrice) {
LitemallCoupon coupon = couponService.findById(couponId);
LitemallCouponUser couponUser = couponUserService.queryOne(userId, couponId);
if (coupon == null || couponUser == null) {
if (coupon == null) {
return null;
}
LitemallCouponUser couponUser = couponUserService.findById(userCouponId);
if (couponUser == null) {
couponUser = couponUserService.queryOne(userId, couponId);
} else if (!couponId.equals(couponUser.getCouponId())) {
return null;
}
if (couponUser == null) {
return null;
}
......
......@@ -105,7 +105,7 @@ export default {
methods: {
onSubmit() {
const {AddressId, CartId, CouponId} = getLocalStorage('AddressId', 'CartId', 'CouponId');
const {AddressId, CartId, CouponId, UserCouponId} = getLocalStorage('AddressId', 'CartId', 'CouponId', 'UserCouponId');
if (AddressId === null) {
Toast.fail('请设置收货地址');
......@@ -119,6 +119,7 @@ export default {
addressId: AddressId,
cartId: CartId,
couponId: CouponId,
userCouponId: UserCouponId,
grouponLinkId: 0,
grouponRulesId: 0,
message: this.message
......@@ -155,15 +156,17 @@ export default {
getCoupons() {
const {AddressId, CartId, CouponId} = getLocalStorage('AddressId', 'CartId', 'CouponId');
couponSelectList({cartId: CartId, grouponRulesId: 0}).then(res => {
var cList = res.data.data
var cList = res.data.data.list;
this.coupons = []
this.disabledCoupons = [];
for(var i = 0; i < cList.length; i++){
var c = cList[i]
var coupon = {
id: c.id,
cid: c.cid,
name: c.name,
condition: c.min,
condition: '' + c.min + '元可用',
value: c.discount * 100,
description: c.desc,
startAt: new Date(c.startTime).getTime()/1000,
......@@ -171,11 +174,10 @@ export default {
valueDesc: c.discount,
unitDesc: ''
}
this.coupons.push(coupon)
if(c.id === this.couponId){
this.chosenCoupon = i;
break;
if (c.available) {
this.coupons.push(coupon);
} else {
this.disabledCoupons.push(coupon);
}
}
......@@ -183,9 +185,9 @@ export default {
})
},
init() {
const {AddressId, CartId, CouponId} = getLocalStorage('AddressId', 'CartId', 'CouponId');
const {AddressId, CartId, CouponId, UserCouponId} = getLocalStorage('AddressId', 'CartId', 'CouponId', 'UserCouponId');
cartCheckout({cartId: CartId, addressId: AddressId, couponId: CouponId, grouponRulesId: 0}).then(res => {
cartCheckout({cartId: CartId, addressId: AddressId, couponId: CouponId, userCouponId: UserCouponId, grouponRulesId: 0}).then(res => {
var data = res.data.data
this.checkedGoodsList = data.checkedGoodsList;
......@@ -198,7 +200,7 @@ export default {
this.goodsTotalPrice= data.goodsTotalPrice;
this.orderTotalPrice= data.orderTotalPrice;
setLocalStorage({AddressId: data.addressId, CartId: data.cartId, CouponId: data.couponId});
setLocalStorage({AddressId: data.addressId, CartId: data.cartId, CouponId: data.couponId, UserCouponId: data.userCouponId});
});
},
......@@ -207,11 +209,12 @@ export default {
this.chosenCoupon = index;
if(index === -1 ){
setLocalStorage({CouponId: -1});
setLocalStorage({CouponId: -1, UserCouponId: -1});
}
else{
const couponId = this.coupons[index].id;
setLocalStorage({CouponId: couponId});
const couponId = this.coupons[index].cid;
const userCouponId = this.coupons[index].id;
setLocalStorage({CouponId: couponId, UserCouponId: userCouponId});
}
this.init()
......@@ -226,7 +229,7 @@ export default {
[SubmitBar.name]: SubmitBar,
[Card.name]: Card,
[Field.name]: Field,
[Tag.name]: Field,
[Tag.name]: Tag,
[CouponCell.name]: CouponCell,
[CouponList.name]: CouponList,
[Popup.name]: Popup
......
......@@ -240,6 +240,7 @@ public class WxOrderService {
Integer cartId = JacksonUtil.parseInteger(body, "cartId");
Integer addressId = JacksonUtil.parseInteger(body, "addressId");
Integer couponId = JacksonUtil.parseInteger(body, "couponId");
Integer userCouponId = JacksonUtil.parseInteger(body, "userCouponId");
String message = JacksonUtil.parseString(body, "message");
Integer grouponRulesId = JacksonUtil.parseInteger(body, "grouponRulesId");
Integer grouponLinkId = JacksonUtil.parseInteger(body, "grouponLinkId");
......@@ -301,7 +302,7 @@ public class WxOrderService {
BigDecimal couponPrice = new BigDecimal(0.00);
// 如果couponId=0则没有优惠券,couponId=-1则不使用优惠券
if (couponId != 0 && couponId != -1) {
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice);
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, userCouponId, checkedGoodsPrice);
if (coupon == null) {
return ResponseUtil.badArgumentValue();
}
......@@ -390,7 +391,7 @@ public class WxOrderService {
// 如果使用了优惠券,设置优惠券使用状态
if (couponId != 0 && couponId != -1) {
LitemallCouponUser couponUser = couponUserService.queryOne(userId, couponId);
LitemallCouponUser couponUser = couponUserService.findById(userCouponId);
couponUser.setStatus(CouponUserConstant.STATUS_USED);
couponUser.setUsedTime(LocalDateTime.now());
couponUser.setOrderId(orderId);
......
......@@ -4,6 +4,7 @@ import java.time.LocalDateTime;
public class CouponVo {
private Integer id;
private Integer cid;
private String name;
private String desc;
private String tag;
......@@ -11,6 +12,7 @@ public class CouponVo {
private String discount;
private LocalDateTime startTime;
private LocalDateTime endTime;
private boolean available;
public Integer getId() {
return id;
......@@ -20,6 +22,14 @@ public class CouponVo {
this.id = id;
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getName() {
return name;
}
......@@ -75,4 +85,12 @@ public class CouponVo {
public void setEndTime(LocalDateTime endTime) {
this.endTime = endTime;
}
public boolean isAvailable() {
return available;
}
public void setAvailable(boolean available) {
this.available = available;
}
}
......@@ -386,7 +386,7 @@ public class WxCartController {
* @return 购物车操作结果
*/
@GetMapping("checkout")
public Object checkout(@LoginUser Integer userId, Integer cartId, Integer addressId, Integer couponId, Integer grouponRulesId) {
public Object checkout(@LoginUser Integer userId, Integer cartId, Integer addressId, Integer couponId, Integer userCouponId, Integer grouponRulesId) {
if (userId == null) {
return ResponseUtil.unlogin();
}
......@@ -445,10 +445,12 @@ public class WxCartController {
// 计算优惠券可用情况
BigDecimal tmpCouponPrice = new BigDecimal(0.00);
Integer tmpCouponId = 0;
Integer tmpUserCouponId = 0;
int tmpCouponLength = 0;
List<LitemallCouponUser> couponUserList = couponUserService.queryAll(userId);
for(LitemallCouponUser couponUser : couponUserList){
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponUser.getCouponId(), checkedGoodsPrice);
tmpUserCouponId = couponUser.getId();
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponUser.getCouponId(), tmpUserCouponId, checkedGoodsPrice);
if(coupon == null){
continue;
}
......@@ -468,17 +470,20 @@ public class WxCartController {
// 3. 用户已选择优惠券,则测试优惠券是否合适
if (couponId == null || couponId.equals(-1)){
couponId = -1;
userCouponId = -1;
}
else if (couponId.equals(0)) {
couponPrice = tmpCouponPrice;
couponId = tmpCouponId;
userCouponId = tmpUserCouponId;
}
else {
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice);
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, userCouponId, checkedGoodsPrice);
// 用户选择的优惠券有问题,则选择合适优惠券,否则使用用户选择的优惠券
if(coupon == null){
couponPrice = tmpCouponPrice;
couponId = tmpCouponId;
userCouponId = tmpUserCouponId;
}
else {
couponPrice = coupon.getDiscount();
......@@ -502,6 +507,7 @@ public class WxCartController {
Map<String, Object> data = new HashMap<>();
data.put("addressId", addressId);
data.put("couponId", couponId);
data.put("userCouponId", userCouponId);
data.put("cartId", cartId);
data.put("grouponRulesId", grouponRulesId);
data.put("grouponPrice", grouponPrice);
......
......@@ -99,7 +99,8 @@ public class WxCouponController {
Integer couponId = couponUser.getCouponId();
LitemallCoupon coupon = couponService.findById(couponId);
CouponVo couponVo = new CouponVo();
couponVo.setId(coupon.getId());
couponVo.setId(couponUser.getId());
couponVo.setCid(coupon.getId());
couponVo.setName(coupon.getName());
couponVo.setDesc(coupon.getDesc());
couponVo.setTag(coupon.getTag());
......@@ -160,17 +161,12 @@ public class WxCouponController {
// 计算优惠券可用情况
List<LitemallCouponUser> couponUserList = couponUserService.queryAll(userId);
List<LitemallCouponUser> availableCouponUserList = new ArrayList<>(couponUserList.size());
for (LitemallCouponUser couponUser : couponUserList) {
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponUser.getCouponId(), checkedGoodsPrice);
if (coupon == null) {
continue;
}
availableCouponUserList.add(couponUser);
List<CouponVo> couponVoList = change(couponUserList);
for (CouponVo cv : couponVoList) {
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, cv.getCid(), cv.getId(), checkedGoodsPrice);
cv.setAvailable(coupon != null);
}
List<CouponVo> couponVoList = change(availableCouponUserList);
return ResponseUtil.okList(couponVoList);
}
......
Supports Markdown
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