Commit c480e78e authored by Menethil's avatar Menethil
Browse files

添加团购

parent 58fc87d2
package org.linlinjava.litemall.wx.web;
import org.linlinjava.litemall.core.qcode.QCodeService;
import org.linlinjava.litemall.core.util.JacksonUtil;
import org.linlinjava.litemall.core.util.ResponseUtil;
import org.linlinjava.litemall.db.domain.LitemallGoods;
import org.linlinjava.litemall.db.domain.LitemallGroupon;
import org.linlinjava.litemall.db.domain.LitemallGrouponRules;
import org.linlinjava.litemall.db.service.LitemallGoodsService;
import org.linlinjava.litemall.db.service.LitemallGrouponRulesService;
import org.linlinjava.litemall.db.service.LitemallGrouponService;
import org.linlinjava.litemall.wx.annotation.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/wx/groupon")
@Validated
public class WxGrouponController {
@Autowired
private LitemallGrouponRulesService rulesService;
@Autowired
private LitemallGrouponService grouponService;
@Autowired
private LitemallGoodsService goodsService;
@Autowired
private QCodeService qCodeService;
@GetMapping("detail")
public Object detail(@LoginUser Integer userId, @NotNull Integer grouponId) {
if (userId == null) {
return ResponseUtil.unlogin();
}
LitemallGroupon groupon = grouponService.queryById(grouponId);
if (groupon == null) {
return ResponseUtil.badArgumentValue();
}
LitemallGrouponRules rules = rulesService.queryById(groupon.getRulesId());
if (rules == null) {
return ResponseUtil.badArgumentValue();
}
LitemallGoods goods = goodsService.findById(rules.getGoodsId());
int count = grouponService.countGroupon(grouponId);
Map<String, Object> groupInfo = new HashMap<>();
groupInfo.put("groupon", groupon);
groupInfo.put("rules", rules);
groupInfo.put("goods", goods);
groupInfo.put("count", count);
return ResponseUtil.ok(groupInfo);
}
@GetMapping("query")
public Object query(@NotNull Integer goodsId) {
LitemallGoods goods = goodsService.findById(goodsId);
if (goods == null) {
return ResponseUtil.fail(-1, "未找到对应的商品");
}
List<LitemallGrouponRules> rules = rulesService.queryByGoodsId(goodsId);
return ResponseUtil.ok(rules);
}
@RequestMapping("join")
public Object join(@LoginUser Integer userId, @RequestBody String body) {
if (userId == null) {
return ResponseUtil.unlogin();
}
Integer rulesId = JacksonUtil.parseInteger(body, "rulesId");
LitemallGrouponRules rules = rulesService.queryById(rulesId);
if (rules == null) {
return ResponseUtil.fail(-1, "未找到对应的团购规则");
}
Integer grouponId = JacksonUtil.parseInteger(body, "grouponId");
LitemallGroupon groupon = grouponService.queryById(grouponId);
if (groupon == null) {
return ResponseUtil.fail(-1, "未找到对应的团购活动");
}
LitemallGroupon groupon2 = new LitemallGroupon();
groupon2.setUserId(userId);
groupon2.setRulesId(rulesId);
groupon2.setShareUrl("");
//参与者
groupon2.setUserType(false);
groupon2.setGrouponId(grouponId);
groupon2.setAddTime(LocalDateTime.now());
//过期时间与创建一致
groupon2.setExpireTime(groupon.getExpireTime());
grouponService.createGroupon(groupon);
return ResponseUtil.ok();
}
@GetMapping("create")
public Object create(@LoginUser Integer userId, @NotNull Integer rulesId) {
if (userId == null) {
return ResponseUtil.unlogin();
}
LitemallGrouponRules rules = rulesService.queryById(rulesId);
if (rules == null) {
return ResponseUtil.fail(-1, "未找到对应的团购规则");
}
LitemallGroupon groupon = new LitemallGroupon();
groupon.setUserId(userId);
groupon.setRulesId(rulesId);
//发起者
groupon.setUserType(true);
groupon.setGrouponId(0);
groupon.setAddTime(LocalDateTime.now());
groupon.setExpireTime(LocalDateTime.now().plusDays(2));
grouponService.createGroupon(groupon);
qCodeService.createGrouponShareImage(rules.getGoodsName(), rules.getPicUrl(), groupon);
groupon.setShareUrl(qCodeService.getShareImageUrl(groupon.getId().toString()));
grouponService.update(groupon);
return ResponseUtil.ok();
}
@RequestMapping("list")
public Object list(@LoginUser Integer userId) {
if (userId == null) {
return ResponseUtil.unlogin();
}
List<LitemallGroupon> myGroupOn = grouponService.queryByUserId(userId);
return ResponseUtil.ok(myGroupOn);
}
}
......@@ -11,6 +11,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.core.notify.NotifyService;
import org.linlinjava.litemall.core.notify.NotifyType;
import org.linlinjava.litemall.core.qcode.QCodeService;
import org.linlinjava.litemall.core.util.DateTimeUtil;
import org.linlinjava.litemall.core.util.JacksonUtil;
import org.linlinjava.litemall.core.util.ResponseUtil;
......@@ -82,15 +83,18 @@ public class WxOrderController {
private LitemallRegionService regionService;
@Autowired
private LitemallProductService productService;
@Autowired
private WxPayService wxPayService;
@Autowired
private NotifyService notifyService;
@Autowired
private LitemallUserFormIdService formIdService;
@Autowired
private LitemallGrouponRulesService grouponRulesService;
@Autowired
private LitemallGrouponService grouponService;
@Autowired
private QCodeService qCodeService;
public WxOrderController() {
}
......@@ -267,6 +271,9 @@ public class WxOrderController {
Integer cartId = JacksonUtil.parseInteger(body, "cartId");
Integer addressId = JacksonUtil.parseInteger(body, "addressId");
Integer couponId = JacksonUtil.parseInteger(body, "couponId");
Integer grouponId = JacksonUtil.parseInteger(body, "grouponId");
Integer grouponLinkId = JacksonUtil.parseInteger(body, "grouponLinkId");
if (cartId == null || addressId == null || couponId == null) {
return ResponseUtil.badArgument();
}
......@@ -304,9 +311,15 @@ public class WxOrderController {
// 可以使用的其他钱,例如用户积分
BigDecimal integralPrice = new BigDecimal(0.00);
// 团购优惠
BigDecimal grouponPrice = new BigDecimal(0.00);
LitemallGrouponRules grouponRules = grouponRulesService.queryById(grouponId);
if (grouponRules != null) {
grouponPrice = grouponRules.getDiscount();
}
// 订单费用
BigDecimal orderTotalPrice = checkedGoodsPrice.add(freightPrice).subtract(couponPrice);
BigDecimal orderTotalPrice = checkedGoodsPrice.add(freightPrice).subtract(couponPrice).subtract(grouponPrice);
BigDecimal actualPrice = orderTotalPrice.subtract(integralPrice);
// 开启事务管理
......@@ -332,6 +345,14 @@ public class WxOrderController {
order.setIntegralPrice(integralPrice);
order.setOrderPrice(orderTotalPrice);
order.setActualPrice(actualPrice);
// 有团购活动
if (grouponRules != null) {
order.setGrouponPrice(grouponPrice); // 团购价格
} else {
order.setGrouponPrice(new BigDecimal(0.00)); // 团购价格
}
// 添加订单表项
orderService.add(order);
orderId = order.getId();
......@@ -369,6 +390,29 @@ public class WxOrderController {
product.setNumber(remainNumber);
productService.updateById(product);
}
//如果是团购项目,添加团购信息
if (grouponId != null && grouponId > 0) {
LitemallGroupon groupon = new LitemallGroupon();
groupon.setOrderId(orderId);
groupon.setPayed(false);
groupon.setUserId(userId);
groupon.setRulesId(grouponId);
//参与者
if (grouponLinkId != null && grouponLinkId > 0) {
groupon.setUserType(false);
groupon.setGrouponId(grouponLinkId);
} else {
groupon.setUserType(true);
groupon.setGrouponId(0);
}
groupon.setAddTime(LocalDateTime.now());
groupon.setExpireTime(LocalDateTime.now().plusDays(2));
grouponService.createGroupon(groupon);
}
} catch (Exception ex) {
txManager.rollback(status);
logger.error("系统内部错误", ex);
......@@ -545,6 +589,7 @@ public class WxOrderController {
String orderSn = result.getOutTradeNo();
String payId = result.getTransactionId();
// 分转化成元
String totalFee = BaseWxPayResult.fenToYuan(result.getTotalFee());
......@@ -568,6 +613,20 @@ public class WxOrderController {
order.setOrderStatus(OrderUtil.STATUS_PAY);
orderService.updateById(order);
// 支付成功,有团购信息,更新团购信息
LitemallGroupon groupon = grouponService.queryByOrderId(order.getId());
if (groupon != null) {
LitemallGrouponRules grouponRules = grouponRulesService.queryById(groupon.getRulesId());
//仅当发起者才创建分享图片
if (groupon.getGrouponId() == 0) {
qCodeService.createGrouponShareImage(grouponRules.getGoodsName(), grouponRules.getPicUrl(), groupon);
groupon.setShareUrl(qCodeService.getShareImageUrl(groupon.getId().toString()));
}
groupon.setPayed(true);
grouponService.update(groupon);
}
//TODO 发送邮件和短信通知,这里采用异步发送
// 订单支付成功以后,会发送短信给用户,以及发送邮件给管理员
notifyService.notifyMail("新订单通知", order.toString());
......
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