ApiGoodsGroupOpenService.java 11 KB

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