ApiGoodsGroupOpenService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package com.kmall.api.service;
  2. import com.google.common.collect.Maps;
  3. import com.kmall.api.dao.*;
  4. import com.kmall.api.entity.*;
  5. import com.kmall.api.util.CommonUtil;
  6. import com.kmall.common.utils.Constant;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import java.math.BigDecimal;
  11. import java.util.*;
  12. /**
  13. * Service实现类
  14. *
  15. * @author Scott
  16. * @email
  17. * @date 2017-10-18 16:00:50
  18. */
  19. @Service
  20. public class ApiGoodsGroupOpenService {
  21. @Autowired
  22. private ApiGoodsGroupOpenMapper apiGoodsGroupOpenMapper;
  23. @Autowired
  24. private ApiGoodsMapper apiGoodsMapper;
  25. @Autowired
  26. private ApiAddressMapper apiAddressMapper;
  27. @Autowired
  28. private ApiOrderMapper apiOrderMapper;
  29. @Autowired
  30. private ApiOrderGoodsMapper apiOrderGoodsMapper;
  31. @Autowired
  32. private ApiProductMapper apiProductMapper;
  33. @Autowired
  34. private ApiGoodsSpecificationService apiGoodsSpecificationService;
  35. @Autowired
  36. private ApiGoodsGroupMapper apiGoodsGroupMapper;
  37. @Autowired
  38. private ApiGoodsGroupOpenDetailMapper apiGoodsGroupOpenDetailMapper;
  39. public GoodsGroupOpenVo queryObject(Long id) {
  40. return apiGoodsGroupOpenMapper.queryObject(id);
  41. }
  42. public List<GoodsGroupOpenVo> queryList(Map<String, Object> map) {
  43. return apiGoodsGroupOpenMapper.queryList(map);
  44. }
  45. public int queryTotal(Map<String, Object> map) {
  46. return apiGoodsGroupOpenMapper.queryTotal(map);
  47. }
  48. public int save(GoodsGroupOpenVo groupOpenDetail) {
  49. return apiGoodsGroupOpenMapper.save(groupOpenDetail);
  50. }
  51. public int update(GoodsGroupOpenVo groupOpenDetail) {
  52. return apiGoodsGroupOpenMapper.update(groupOpenDetail);
  53. }
  54. public int delete(Long id) {
  55. return apiGoodsGroupOpenMapper.delete(id);
  56. }
  57. public int deleteBatch(Long[] ids) {
  58. return apiGoodsGroupOpenMapper.deleteBatch(ids);
  59. }
  60. /**
  61. * 开团
  62. */
  63. @Transactional
  64. public Map openGroup(Long groupId, Long productId, String postscript,
  65. Integer number, Long userId, Long addressId, Long storeId, String delivery_remark) {
  66. Map resultObj = Maps.newHashMap();
  67. // 开团
  68. GoodsGroupVo groupVo = apiGoodsGroupMapper.queryObject(groupId);
  69. GoodsVo goodsVo = apiGoodsMapper.queryObjectByStoreId(groupVo.getGoods_id(), storeId);
  70. GoodsGroupOpenVo openVo = new GoodsGroupOpenVo();
  71. openVo.setUser_id(userId);
  72. openVo.setGroup_id(groupId);
  73. openVo.setGoods_id(groupVo.getGoods_id());
  74. openVo.setAttend_status(0); // 拼团中
  75. openVo.setAttend_num(0); // 当前参团1人
  76. //取得规格的信息,判断规格库存
  77. ProductVo productVo = apiProductMapper.queryObjectByStoreId(productId, storeId);
  78. if (null == productVo || null == productVo.getStock_num() || productVo.getStock_num() < 1) {
  79. resultObj.put("errno", 400);
  80. resultObj.put("errmsg", "商品已下架");
  81. return resultObj;
  82. }
  83. productVo.setStock_num(productVo.getStock_num() - 1);
  84. productVo.addSellVolume();
  85. productVo.setStore_id(storeId);
  86. //
  87. Calendar cal = Calendar.getInstance();
  88. cal.setTime(new Date());
  89. openVo.setOpen_time(cal.getTime());
  90. cal.add(Calendar.DAY_OF_MONTH, groupVo.getValid_days());
  91. openVo.setEnd_time(cal.getTime());
  92. apiGoodsGroupOpenMapper.save(openVo);
  93. // 参团记录
  94. GoodsGroupOpenDetailVo openDetailVo = new GoodsGroupOpenDetailVo();
  95. openDetailVo.setAttend_status(0);
  96. openDetailVo.setOpen_id(openVo.getId());
  97. openDetailVo.setUser_id(userId);
  98. openDetailVo.setAttend_time(new Date());
  99. apiGoodsGroupOpenDetailMapper.save(openDetailVo);
  100. //统计商品总价
  101. BigDecimal orderTotalPrice = groupVo.getRetail_min_price().multiply(new BigDecimal(number)); //订单的总价
  102. AddressVo addressVo = apiAddressMapper.queryObject(addressId);
  103. //
  104. OrderVo orderInfo = new OrderVo();
  105. orderInfo.setOrder_sn(CommonUtil.generateOrderNumber());
  106. orderInfo.setUser_id(userId);
  107. //收货地址和运费
  108. orderInfo.setConsignee(addressVo.getUserName());
  109. orderInfo.setMobile(addressVo.getTelNumber());
  110. orderInfo.setCountry(addressVo.getNationalCode());
  111. orderInfo.setProvince(addressVo.getProvinceName());
  112. orderInfo.setCity(addressVo.getCityName());
  113. orderInfo.setDistrict(addressVo.getCountyName());
  114. orderInfo.setAddress(addressVo.getDetailInfo());
  115. orderInfo.setAddress_id(addressVo.getId());
  116. orderInfo.setStore_id(storeId);
  117. //
  118. orderInfo.setFreight_price(0);
  119. //留言
  120. orderInfo.setPostscript(postscript);
  121. orderInfo.setAdd_time(new Date());
  122. orderInfo.setGoods_price(orderTotalPrice);
  123. orderInfo.setOrder_price(orderTotalPrice);
  124. orderInfo.setActual_price(orderTotalPrice);
  125. // 待付款
  126. orderInfo.setOrder_status(0);
  127. orderInfo.setShipping_status(0);
  128. orderInfo.setPay_status(0);
  129. orderInfo.setShipping_id(0L);
  130. orderInfo.setShipping_fee(Constant.ZERO);
  131. orderInfo.setIntegral(0);
  132. orderInfo.setIntegral_money(Constant.ZERO);
  133. orderInfo.setOrder_type("2"); // 订单类型 1:普通订单 2:团购订单
  134. orderInfo.setActivity_id(openDetailVo.getId());
  135. orderInfo.setDelivery_remark(delivery_remark);
  136. //开启事务,插入订单信息和订单商品
  137. apiOrderMapper.save(orderInfo);
  138. if (null == orderInfo.getId()) {
  139. resultObj.put("errno", 1);
  140. resultObj.put("errmsg", "订单提交失败");
  141. return resultObj;
  142. }
  143. //统计商品总价
  144. OrderGoodsVo orderGoodsVo = new OrderGoodsVo();
  145. orderGoodsVo.setOrder_id(orderInfo.getId());
  146. orderGoodsVo.setGoods_id(groupVo.getGoods_id());
  147. orderGoodsVo.setGoods_sn(goodsVo.getGoods_sn());
  148. orderGoodsVo.setProduct_id(productId);
  149. orderGoodsVo.setGoods_name(goodsVo.getName());
  150. orderGoodsVo.setList_pic_url(goodsVo.getList_pic_url());
  151. orderGoodsVo.setMarket_price(goodsVo.getMarket_price());
  152. orderGoodsVo.setRetail_price(goodsVo.getRetail_price());
  153. orderGoodsVo.setNumber(number);
  154. //添加规格名和值
  155. orderGoodsVo.setGoods_specification_name_value(productVo.getGoods_specification_name_value());
  156. orderGoodsVo.setGoods_specification_ids(productVo.getGoods_specification_ids());
  157. apiOrderGoodsMapper.save(orderGoodsVo);
  158. //
  159. apiProductMapper.updateStockNum(productVo);
  160. resultObj.put("errno", 0);
  161. resultObj.put("errmsg", "订单提交成功");
  162. //
  163. Map orderInfoMap = Maps.newHashMap();
  164. orderInfoMap.put("orderInfo", orderInfo);
  165. //
  166. resultObj.put("data", orderInfoMap);
  167. return resultObj;
  168. }
  169. /**
  170. * 参团
  171. */
  172. @Transactional
  173. public Map attendGroup(Long openId, Long productId, String postscript,
  174. Integer number, Long userId, Long addressId, String delivery_remark) {
  175. Map resultObj = Maps.newHashMap();
  176. // 开团
  177. GoodsGroupOpenVo openVo = apiGoodsGroupOpenMapper.queryObject(openId);
  178. GoodsGroupVo groupVo = apiGoodsGroupMapper.queryObject(openVo.getGroup_id());
  179. // 参团记录
  180. GoodsGroupOpenDetailVo openDetailVo = new GoodsGroupOpenDetailVo();
  181. openDetailVo.setAttend_status(0);
  182. openDetailVo.setOpen_id(openVo.getId());
  183. openDetailVo.setUser_id(userId);
  184. openDetailVo.setAttend_time(new Date());
  185. apiGoodsGroupOpenDetailMapper.save(openDetailVo);
  186. //
  187. GoodsVo goodsVo = apiGoodsMapper.queryObjectByStoreId(groupVo.getGoods_id(), 0l);
  188. //统计商品总价
  189. BigDecimal orderTotalPrice = groupVo.getRetail_min_price().multiply(new BigDecimal(number)); //订单的总价
  190. AddressVo addressVo = apiAddressMapper.queryObject(addressId);
  191. //
  192. OrderVo orderInfo = new OrderVo();
  193. orderInfo.setOrder_sn(CommonUtil.generateOrderNumber());
  194. orderInfo.setUser_id(userId);
  195. //收货地址和运费
  196. orderInfo.setConsignee(addressVo.getUserName());
  197. orderInfo.setMobile(addressVo.getTelNumber());
  198. orderInfo.setCountry(addressVo.getNationalCode());
  199. orderInfo.setProvince(addressVo.getProvinceName());
  200. orderInfo.setCity(addressVo.getCityName());
  201. orderInfo.setDistrict(addressVo.getCountyName());
  202. orderInfo.setAddress(addressVo.getDetailInfo());
  203. //
  204. orderInfo.setFreight_price(0);
  205. //留言
  206. orderInfo.setPostscript(postscript);
  207. orderInfo.setAdd_time(new Date());
  208. orderInfo.setGoods_price(orderTotalPrice);
  209. orderInfo.setOrder_price(orderTotalPrice);
  210. orderInfo.setActual_price(orderTotalPrice);
  211. // 待付款
  212. orderInfo.setOrder_status(0);
  213. orderInfo.setShipping_status(0);
  214. orderInfo.setPay_status(0);
  215. orderInfo.setShipping_id(0L);
  216. orderInfo.setShipping_fee(Constant.ZERO);
  217. orderInfo.setIntegral(0);
  218. orderInfo.setIntegral_money(Constant.ZERO);
  219. orderInfo.setOrder_type("2"); // 订单类型 1:普通订单 2:团购订单
  220. orderInfo.setActivity_id(openDetailVo.getId());
  221. orderInfo.setDelivery_remark(delivery_remark);
  222. //开启事务,插入订单信息和订单商品
  223. apiOrderMapper.save(orderInfo);
  224. if (null == orderInfo.getId()) {
  225. resultObj.put("errno", 1);
  226. resultObj.put("errmsg", "订单提交失败");
  227. return resultObj;
  228. }
  229. //统计商品总价
  230. OrderGoodsVo orderGoodsVo = new OrderGoodsVo();
  231. orderGoodsVo.setOrder_id(orderInfo.getId());
  232. orderGoodsVo.setGoods_id(groupVo.getGoods_id());
  233. orderGoodsVo.setGoods_sn(goodsVo.getGoods_sn());
  234. orderGoodsVo.setProduct_id(productId);
  235. orderGoodsVo.setGoods_name(goodsVo.getName());
  236. orderGoodsVo.setList_pic_url(goodsVo.getList_pic_url());
  237. orderGoodsVo.setMarket_price(goodsVo.getMarket_price());
  238. orderGoodsVo.setRetail_price(goodsVo.getRetail_price());
  239. orderGoodsVo.setNumber(number);
  240. //添加规格名和值
  241. ProductVo productVo = apiProductMapper.queryObject(productId);
  242. orderGoodsVo.setGoods_specification_name_value(productVo.getGoods_specification_name_value());
  243. orderGoodsVo.setGoods_specification_ids(productVo.getGoods_specification_ids());
  244. apiOrderGoodsMapper.save(orderGoodsVo);
  245. resultObj.put("errno", 0);
  246. resultObj.put("errmsg", "订单提交成功");
  247. //
  248. Map orderInfoMap = Maps.newHashMap();
  249. orderInfoMap.put("orderInfo", orderInfo);
  250. //
  251. resultObj.put("data", orderInfoMap);
  252. return resultObj;
  253. }
  254. }