LotGroupController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. package cn.hobbystocks.auc.web;
  2. import cn.hobbystocks.auc.annotation.RequireRoles;
  3. import cn.hobbystocks.auc.app.AppClient;
  4. import cn.hobbystocks.auc.common.constant.Constants;
  5. import cn.hobbystocks.auc.common.core.domain.AjaxResult;
  6. import cn.hobbystocks.auc.common.user.UserUtils;
  7. import cn.hobbystocks.auc.common.utils.SensitiveDataUtils;
  8. import cn.hobbystocks.auc.common.utils.StringUtils;
  9. import cn.hobbystocks.auc.common.utils.UserType;
  10. import cn.hobbystocks.auc.domain.Bid;
  11. import cn.hobbystocks.auc.domain.Lot;
  12. import cn.hobbystocks.auc.domain.LotFans;
  13. import cn.hobbystocks.auc.domain.LotGroup;
  14. import cn.hobbystocks.auc.service.ILotFansService;
  15. import cn.hobbystocks.auc.service.IOrderStatusService;
  16. import cn.hobbystocks.auc.vo.LotGroupVO;
  17. import cn.hobbystocks.auc.vo.SkuDTO;
  18. import io.swagger.annotations.Api;
  19. import io.swagger.annotations.ApiOperation;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.springframework.beans.BeanUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.util.CollectionUtils;
  24. import org.springframework.web.bind.annotation.PostMapping;
  25. import org.springframework.web.bind.annotation.RequestBody;
  26. import org.springframework.web.bind.annotation.RequestMapping;
  27. import org.springframework.web.bind.annotation.RestController;
  28. import javax.annotation.Resource;
  29. import javax.validation.Valid;
  30. import java.util.Date;
  31. import java.util.List;
  32. import java.util.Objects;
  33. /**
  34. * 拍品Controller
  35. */
  36. @RestController
  37. @RequestMapping("/auction/admin/shipping/lot")
  38. @Slf4j
  39. @Api(tags = "商家拍品组管理")
  40. public class LotGroupController extends AdminBaseController {
  41. @Autowired
  42. private AppClient appClient;
  43. @Autowired
  44. ILotFansService lotFansService;
  45. //根据businessCode查询拍品组信息
  46. @ApiOperation(value = "根据businessCode查询商品", notes = "根据商品名称,审核状态查询商品列表", response = LotGroup.class, responseContainer = "List<LotGroup>")
  47. @PostMapping("/list")
  48. @RequireRoles({UserType.USER_ROLE_SHIPPING})
  49. public AjaxResult list(@RequestBody LotGroupVO lotGroup) {
  50. if (StringUtils.isEmpty(lotGroup.getBusinessCode())){
  51. AjaxResult.error("业务系统编码不能为空");
  52. }
  53. startPage(lotGroup);
  54. lotGroup.setDelFlag(Constants.DEL_FLAG_NO_DELETE);
  55. if (Objects.nonNull(UserUtils.getSimpleUserInfo()) && Objects.nonNull(UserUtils.getSimpleUserInfo().getMerchantId())) {
  56. lotGroup.setMerchantId(UserUtils.getSimpleUserInfo().getMerchantId().longValue());
  57. }
  58. if (Objects.equals(0, lotGroup.getNewStatus())) {
  59. lotGroup.setPubStatus(Constants.PUB_STATUS_NO_PUBLISHED);
  60. }else if (Objects.equals(1, lotGroup.getNewStatus())) {
  61. lotGroup.setPubStatus(Constants.PUB_STATUS_PUBLISHED);
  62. }else if (Objects.equals(2, lotGroup.getNewStatus())) {
  63. lotGroup.setPubStatus(Constants.PUB_STATUS_PUBLISHED);
  64. lotGroup.setStatus(Constants.GROUP_STATUS_WAITING);
  65. }else if (Objects.equals(3, lotGroup.getNewStatus())) {
  66. lotGroup.setStatus(Constants.GROUP_STATUS_STARTING);
  67. }
  68. List<LotGroup> data = lotService.selectLotGroupList(lotGroup);
  69. data.forEach(group -> {
  70. SkuDTO sku = appClient.getSku(Integer.parseInt(group.getGoodsId()));
  71. if (Objects.nonNull(sku)) {
  72. group.setSkuStock(sku.getSkuStock());
  73. group.setSkuCode(sku.getCode());
  74. }
  75. });
  76. return AjaxResult.successPage(data);
  77. }
  78. @ApiOperation(value = "克隆商品", notes = "insertLotGroup with no id", response = AjaxResult.class, responseContainer = "AjaxResult")
  79. @PostMapping("/clone")
  80. @RequireRoles({UserType.USER_ROLE_SHIPPING})
  81. public AjaxResult clone(@RequestBody LotGroupVO lotGroupVO) {
  82. LotGroup lotGroup = lotService.selectLotGroupById(lotGroupVO.getId());
  83. String error = checkUser(lotGroup.getMerchantId());
  84. if (!StringUtils.isEmpty(error)) {
  85. return AjaxResult.error(error);
  86. }
  87. lotGroup.setId(null);
  88. lotGroup.setCreateTime(new Date());
  89. lotGroup.setCreateBy(getUsername());
  90. lotGroup.setUpdateTime(null);
  91. lotGroup.setUpdateBy(null);
  92. lotGroup.setStatus(Constants.GROUP_STATUS_WAITING);
  93. lotGroup.setDelFlag(Constants.DEL_FLAG_NO_DELETE);
  94. lotGroup.setGoodsType(lotGroup.getGoodsType());
  95. lotGroup.setPubStatus(Constants.PUB_STATUS_NO_PUBLISHED);
  96. lotGroup.setAuctionId(2L);
  97. lotGroup.setFinishNum(0L);
  98. lotGroup.setStartNum(0L);
  99. lotGroup.setSoldNum(0L);
  100. lotGroup.setPaid(0L);
  101. lotGroup.setOrderId(null);
  102. lotGroup.setPubTime(null);
  103. lotGroup.setLotId(null);
  104. lotGroup.setNextLotId(null);
  105. lotService.insertLotGroup(lotGroup);
  106. return AjaxResult.success();
  107. }
  108. @ApiOperation(value = "添加拍卖商品", notes = "insertLotGroup", response = AjaxResult.class, responseContainer = "AjaxResult")
  109. @PostMapping("/add")
  110. @RequireRoles({UserType.USER_ROLE_SHIPPING})
  111. public AjaxResult addSave(@RequestBody @Valid LotGroupVO lotGroup) {
  112. if (lotGroup.getNum() <= 0) {
  113. return AjaxResult.error("商品数量必须大于0");
  114. }
  115. String error = checkUser(lotGroup.getMerchantId());
  116. if (!StringUtils.isEmpty(error)) {
  117. return AjaxResult.error(error);
  118. }
  119. lotGroup.setId(null);
  120. lotGroup.setCreateTime(new Date());
  121. lotGroup.setCreateBy(getUsername());
  122. lotGroup.setStatus(Constants.GROUP_STATUS_WAITING);
  123. lotGroup.setDelFlag(Constants.DEL_FLAG_NO_DELETE);
  124. lotGroup.setPubStatus(Constants.PUB_STATUS_NO_PUBLISHED);
  125. lotGroup.setAuctionId(2L);
  126. lotGroup.setFinishNum(0L);
  127. lotGroup.setStartNum(0L);
  128. lotGroup.setSoldNum(0L);
  129. lotGroup.setPaid(0L);
  130. lotGroup.setOrderId(null);
  131. lotGroup.setPubTime(null);
  132. lotGroup.setLotId(null);
  133. SkuDTO sku = appClient.getSku(Integer.parseInt(lotGroup.getGoodsId()));
  134. if (Objects.isNull(sku)) {
  135. return AjaxResult.error("未找到商品!");
  136. }
  137. lotGroup.setImgs(sku.getCarouselImgUrl());
  138. lotService.insertLotGroup(lotGroup);
  139. return AjaxResult.success();
  140. }
  141. @ApiOperation(value = "修改商品基础信息", notes = "竞价已开启不能改只能改name rule detail sort", response = AjaxResult.class, responseContainer = "AjaxResult")
  142. @PostMapping("/editLot")
  143. @RequireRoles({UserType.USER_ROLE_SHIPPING})
  144. public AjaxResult editLot(@RequestBody LotGroupVO lotGroup) {
  145. Long lotId = lotGroup.getId();
  146. Lot lot = lotService.selectLotById(lotId);
  147. if (!Constants.LOT_STATUS_WAITING.equals(lot.getStatus())) {
  148. return AjaxResult.error("竞价已开启");
  149. }
  150. lotService.updateLot(Lot.builder()
  151. .id(lot.getId())
  152. .name(lotGroup.getName())
  153. .ruleContent(lotGroup.getRuleContent())
  154. .detail(lotGroup.getDetail())
  155. .sort(lotGroup.getSort()).build());
  156. return AjaxResult.success();
  157. }
  158. /**
  159. * 修改保存拍品
  160. */
  161. @ApiOperation(value = "修改保存拍品 ", notes = "竞价正在进行中的不能改", response = AjaxResult.class, responseContainer = "AjaxResult")
  162. @PostMapping("/edit")
  163. @RequireRoles({UserType.USER_ROLE_SHIPPING})
  164. public AjaxResult editSave(@RequestBody LotGroupVO lotGroup) {
  165. if (Objects.nonNull(lotGroup.getNum()) &&lotGroup.getNum() <= 0) {
  166. return AjaxResult.error("商品数量必须大于0");
  167. }
  168. String error = checkUser(lotGroup.getMerchantId());
  169. if (!StringUtils.isEmpty(error)) {
  170. return AjaxResult.error(error);
  171. }
  172. LotGroup dbLotGroup = lotService.selectLotGroupById(lotGroup.getId());
  173. if (Objects.nonNull(lotGroup.getGoodsId()) && Constants.GROUP_STATUS_STARTING.equals(dbLotGroup.getStatus())) {
  174. return AjaxResult.error("竞价正在进行中");
  175. }
  176. error = checkUser(dbLotGroup.getMerchantId());
  177. if (!StringUtils.isEmpty(error)) {
  178. return AjaxResult.error(error);
  179. }
  180. if (Objects.nonNull(lotGroup.getGoodsId())) {
  181. lotGroup.setAuctionId(2L);
  182. SkuDTO sku = appClient.getSku(Integer.parseInt(lotGroup.getGoodsId()));
  183. if (Objects.isNull(sku)) {
  184. return AjaxResult.error("未找到商品!");
  185. }
  186. if (Objects.equals(Constants.PUB_STATUS_PUBLISHED, dbLotGroup.getPubStatus())) {
  187. List<LotGroup> list =
  188. lotService.selectLotGroupList(LotGroup.builder().goodsId(dbLotGroup.getGoodsId()).pubStatus(Constants.PUB_STATUS_PUBLISHED).delFlag(Constants.DEL_FLAG_NO_DELETE).build());
  189. long num = 0;
  190. for (LotGroup group : list) {
  191. if (!Objects.equals(group.getId(), dbLotGroup.getId())) {
  192. List<Lot> lotList = lotService.selectLotList(Lot.builder().delFlag(Constants.DEL_FLAG_NO_DELETE).status(Constants.LOT_STATUS_PASS).groupId(group.getId()).build());
  193. num += (group.getNum() - lotList.size());
  194. }
  195. }
  196. List<Lot> lotList =
  197. lotService.selectLotList(Lot.builder().delFlag(Constants.DEL_FLAG_NO_DELETE).status(Constants.LOT_STATUS_PASS).groupId(dbLotGroup.getId()).build());
  198. num += (lotGroup.getNum() - lotList.size());
  199. long skuStock = Objects.nonNull(sku.getSkuStock()) ? sku.getSkuStock() : 0L;
  200. if (skuStock < num) {
  201. return AjaxResult.error("商品数量超过当前库存!");
  202. }
  203. }
  204. if (StringUtils.isNotEmpty(lotGroup.getGoodsId()) &&
  205. !Objects.equals(lotGroup.getGoodsId(), dbLotGroup.getGoodsId()) ) {
  206. lotGroup.setImgs(sku.getCarouselImgUrl());
  207. }
  208. }
  209. lotService.updateLotGroup(lotGroup);
  210. return AjaxResult.success();
  211. }
  212. /**
  213. * 发布拍品
  214. */
  215. @ApiOperation(value = "发布竞价商品", notes = "已审核不能再次审核 有sku库存校验", response = AjaxResult.class, responseContainer = "AjaxResult.success()")
  216. @PostMapping(value = "/pub")
  217. @RequireRoles({UserType.USER_ROLE_SHIPPING})
  218. public AjaxResult pub(@RequestBody LotGroupVO lotGroup) {
  219. LotGroup dbLotGroup = lotService.selectLotGroupById(lotGroup.getId());
  220. String error = checkUser(dbLotGroup.getMerchantId());
  221. if (!StringUtils.isEmpty(error)) {
  222. return AjaxResult.error(error);
  223. }
  224. if (Objects.equals(Constants.PUB_STATUS_PUBLISHED, dbLotGroup.getPubStatus()))
  225. return AjaxResult.error("已审核不能再次审核");
  226. //查询关联商品的id
  227. String goodsId = dbLotGroup.getGoodsId();
  228. //查询所有使用此商品的拍卖
  229. List<LotGroup> list =
  230. lotService.selectLotGroupList(LotGroup.builder().goodsId(dbLotGroup.getGoodsId()).pubStatus(Constants.PUB_STATUS_PUBLISHED).delFlag(Constants.DEL_FLAG_NO_DELETE).build());
  231. long num = 0;
  232. for (LotGroup group : list) {
  233. List<Lot> lotList = lotService.selectLotList(Lot.builder().delFlag(Constants.DEL_FLAG_NO_DELETE).status(Constants.LOT_STATUS_PASS).groupId(group.getId()).build());
  234. num += (group.getNum() - lotList.size());
  235. }
  236. //计算库存
  237. num += dbLotGroup.getNum();
  238. SkuDTO sku = appClient.getSku(Integer.parseInt(goodsId));
  239. long skuStock = Objects.nonNull(sku.getSkuStock()) ? sku.getSkuStock() : 0L;
  240. if (skuStock < num) {
  241. return AjaxResult.error("商品数量超过当前库存!");
  242. }
  243. dbLotGroup.setPubStatus(Constants.PUB_STATUS_PUBLISHED);
  244. lotService.updateLotGroup0(LotGroup.builder()
  245. .id(dbLotGroup.getId())
  246. .pubStatus(Constants.PUB_STATUS_PUBLISHED)
  247. .pubTime(new Date())
  248. .build());
  249. return AjaxResult.success();
  250. }
  251. //此处查询未指定方法,导致swagger会重复
  252. @ApiOperation(value = "商家拍品列表", notes = "selectLotList with lotGroupids", response = Lot.class, responseContainer = "List<Lot>")
  253. @RequestMapping("/liveLot")
  254. @RequireRoles({UserType.USER_ROLE_ADMIN,UserType.USER_ROLE_SHIPPING})
  255. public AjaxResult listLot(@RequestBody LotGroupVO lotGroup){
  256. startPage(lotGroup);
  257. Lot lot = new Lot();
  258. BeanUtils.copyProperties(lotGroup, lot, "id");
  259. lot.setGroupId(lotGroup.getId());
  260. List<Lot> lotList = lotService.selectLotList(lot);
  261. lotList.forEach(lot1 -> {
  262. lot1.setDealAccount(SensitiveDataUtils.maskString(lot1.getDealAccount(), 4));
  263. lot1.setAnonymous(0);
  264. List<Bid> bids = bidService.selectBidList(Bid.builder().lotId(lot1.getId()).build());
  265. if (!CollectionUtils.isEmpty(bids)) {
  266. lot1.setAnonymous(bids.get(0).getAnonymous());
  267. }
  268. /*LotFans lotFans = lotFansService.selectLotFansByLotIdAndType(lot1.getId(), "pay_expire");
  269. if(lotFans != null) {
  270. lot1.setLotFansId(lotFans.getId());
  271. }*/
  272. // List<Order> orderList = orderStatusService.selectOrderStatusList(Order.builder().lotId(lot1.getId()).flag(1).build());
  273. });
  274. return AjaxResult.successPage(lotList);
  275. }
  276. public String checkUser(Long merchantId) {
  277. Integer merchantIdReq = UserUtils.getSimpleUserInfo().getMerchantId();
  278. if (Objects.nonNull(merchantIdReq) && Objects.nonNull(merchantId)) {
  279. if (!Objects.equals(merchantIdReq.longValue(), merchantId)) {
  280. return "您无权新增或者修改此商品";
  281. }
  282. }
  283. return null;
  284. }
  285. /*@ApiOperation(value = "删除订单逾期未支付的用户记录", notes = "delFans with id", response = AjaxResult.class, responseContainer = "AjaxResult.success")
  286. @PostMapping("/delFans/{id}")
  287. public AjaxResult delExpire(@PathVariable("id") Long id){
  288. int rs = lotFansService.updateLotFansDel(id);
  289. if(rs == 0) {
  290. return AjaxResult.error();
  291. }
  292. return AjaxResult.success();
  293. }*/
  294. }