HeHeNewOrderController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. package com.caimei.modules.hehe.web;
  2. import com.caimei.modules.bulkpurchase.entity.BpClause;
  3. import com.caimei.modules.bulkpurchase.service.BpClauseService;
  4. import com.caimei.modules.bulkpurchase.service.CmFinanceChargeService;
  5. import com.caimei.modules.bulkpurchase.service.PurchaseProductService;
  6. import com.caimei.modules.hehe.dao.CmHeheUserDao;
  7. import com.caimei.modules.hehe.entity.CmHeheUser;
  8. import com.caimei.modules.hehe.service.CmHeheUserService;
  9. import com.caimei.modules.hehe.service.HeHeNewOrderService;
  10. import com.caimei.modules.order.dao.CmDiscernReceiptDao;
  11. import com.caimei.modules.order.dao.CmReceiptOrderRelationDao;
  12. import com.caimei.modules.order.dao.CmReturnedPurchaseDao;
  13. import com.caimei.modules.order.dao.NewOrderProductDao;
  14. import com.caimei.modules.order.entity.*;
  15. import com.caimei.modules.order.service.*;
  16. import com.caimei.modules.product.dao.CmPromotionDao;
  17. import com.caimei.modules.product.dao.ProductDao;
  18. import com.caimei.modules.product.service.CmSecondHandDetailService;
  19. import com.caimei.modules.product.service.RepeatPurchasePriceHistoryService;
  20. import com.caimei.modules.product.service.RepeatPurchasePriceService;
  21. import com.caimei.modules.project.dao.ClubDao;
  22. import com.caimei.modules.user.dao.CmUserDao;
  23. import com.caimei.modules.user.service.CmMessageService;
  24. import com.caimei.modules.user.service.CmUserOrganizeService;
  25. import com.caimei.modules.user.service.CmUserService;
  26. import com.caimei.modules.user.service.NewCmShopService;
  27. import com.thinkgem.jeesite.common.persistence.Page;
  28. import com.thinkgem.jeesite.common.utils.StringUtils;
  29. import com.thinkgem.jeesite.common.web.BaseController;
  30. import org.apache.commons.collections.CollectionUtils;
  31. import org.apache.shiro.authz.annotation.RequiresPermissions;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Controller;
  34. import org.springframework.ui.Model;
  35. import org.springframework.web.bind.annotation.ModelAttribute;
  36. import org.springframework.web.bind.annotation.RequestMapping;
  37. import org.springframework.web.bind.annotation.RequestParam;
  38. import javax.annotation.Resource;
  39. import javax.servlet.http.HttpServletRequest;
  40. import javax.servlet.http.HttpServletResponse;
  41. import java.text.SimpleDateFormat;
  42. import java.util.*;
  43. /**
  44. * Description
  45. *
  46. * @author : plf
  47. * @date : 2021/4/27
  48. */
  49. @Controller
  50. @RequestMapping(value = "${adminPath}/hehe/new/order")
  51. public class HeHeNewOrderController extends BaseController {
  52. @Autowired
  53. private HeHeNewOrderService heHeNewOrderService;
  54. @Autowired
  55. private CmHeheUserDao cmHeheUserDao;
  56. @Resource
  57. private BpClauseService bpClauseService;
  58. @Resource
  59. private NewOrderProductService newOrderProductService;
  60. @Autowired
  61. private NewReceiptListService newReceiptListService;
  62. @Resource
  63. private NewShopOrderService newShopOrderService;
  64. @Resource
  65. private CmFinanceChargeService cmFinanceChargeService;
  66. @Resource
  67. private OrderUserInfoService orderUserInfoService;
  68. @Resource
  69. private CmMessageService cmMessageService;
  70. @Resource
  71. private ClubDao clubDao;
  72. @Autowired
  73. private ProductDao productDao;
  74. @Resource
  75. private CmProductSnService cmProductSnService;
  76. @Autowired
  77. private NewOrderProductDao newOrderProductDao;
  78. @Resource
  79. private CmReturnedPurchaseDao cmReturnedPurchaseDao;
  80. @Resource
  81. private CmUserService cmUserService;
  82. @Resource
  83. private RepeatPurchasePriceService repeatPurchasePriceService;
  84. @Resource
  85. private NewCmShopService newCmShopService;
  86. @Resource
  87. private RepeatPurchasePriceHistoryService repeatPurchasePriceHistoryService;
  88. @Resource
  89. private NewOrderConfigService newOrderConfigService;
  90. @Resource
  91. private CmDiscernReceiptService cmDiscernReceiptService;
  92. @Resource
  93. private CmUserDao cmUserDao;
  94. @Resource
  95. private CmReturnedPurchaseService cmReturnedPurchaseService;
  96. @Resource
  97. private CmReceiptOrderRelationDao cmReceiptOrderRelationDao;
  98. @Autowired
  99. private CmUserOrganizeService cmUserOrganizeService;
  100. @Autowired
  101. private CmSecondHandDetailService cmSecondHandDetailService;
  102. @Autowired
  103. private CmDiscernReceiptDao cmDiscernReceiptDao;
  104. @Autowired
  105. private CmReceiptOrderRelationService cmReceiptOrderRelationService;
  106. @Resource
  107. private CmPromotionDao cmPromotionDao;
  108. @Autowired
  109. private PurchaseProductService purchaseProductService;
  110. @ModelAttribute
  111. public NewOrder get(@RequestParam(required = false) String id) {
  112. NewOrder entity = null;
  113. if (StringUtils.isNotBlank(id)) {
  114. entity = heHeNewOrderService.get(id);
  115. }
  116. if (entity == null) {
  117. entity = new NewOrder();
  118. }
  119. return entity;
  120. }
  121. @RequestMapping("orderList")
  122. public String orderList(NewOrder order, HttpServletRequest request, HttpServletResponse response, Model model) {
  123. if (null != order.getStartTime() && !"".equals(order.getStartTime()) && !order.getStartTime().endsWith("00:00:00")) {
  124. model.addAttribute("startTime", order.getStartTime());
  125. order.setStartTime(order.getStartTime() + " 00:00:00");
  126. }
  127. if (null != order.getEndTime() && !"".equals(order.getEndTime()) && !order.getEndTime().endsWith("23:59:59")) {
  128. model.addAttribute("endTime", order.getEndTime());
  129. order.setEndTime(order.getEndTime() + " 23:59:59");
  130. }
  131. if (null != order.getStartConfirmTime() && !"".equals(order.getStartConfirmTime()) && !order.getStartConfirmTime().endsWith("00:00:00")) {
  132. model.addAttribute("startConfirmTime", order.getStartConfirmTime());
  133. order.setStartConfirmTime(order.getStartConfirmTime() + " 00:00:00");
  134. }
  135. if (null != order.getEndConfirmTime() && !"".equals(order.getEndConfirmTime()) && !order.getEndConfirmTime().endsWith("23:59:59")) {
  136. model.addAttribute("endConfirmTime", order.getEndConfirmTime());
  137. order.setEndConfirmTime(order.getEndConfirmTime() + " 23:59:59");
  138. }
  139. if (null != order.getStartRefundTime() && !"".equals(order.getStartRefundTime()) && !order.getStartRefundTime().endsWith("00:00:00")) {
  140. model.addAttribute("startRefundTime", order.getStartRefundTime());
  141. order.setStartRefundTime(order.getStartRefundTime() + " 00:00:00");
  142. }
  143. if (null != order.getEndRefundTime() && !"".equals(order.getEndRefundTime()) && !order.getEndRefundTime().endsWith("23:59:59")) {
  144. model.addAttribute("endRefundTime", order.getEndRefundTime());
  145. order.setEndRefundTime(order.getEndRefundTime() + " 23:59:59");
  146. }
  147. model.addAttribute("orderRefundType", order.getOrderRefundType());
  148. if (null != order.getBuyer()) {
  149. order.setBuyer(order.getBuyer().trim());
  150. }
  151. if (null != order.getReceiver()) {
  152. order.setReceiver(order.getReceiver().trim());
  153. }
  154. //查询内部处理了已收,未付统计(包含运费)
  155. Page<NewOrder> page = heHeNewOrderService.findPage(new Page<>(request, response, 20), order);
  156. CmHeheUser user = new CmHeheUser();
  157. user.setUserIdentity("2");
  158. List<CmHeheUser> heUsers = cmHeheUserDao.findList(user);
  159. model.addAttribute("page", page);
  160. model.addAttribute("heUsers", heUsers);
  161. return "modules/hehe/heheNewOrderList";
  162. }
  163. /**
  164. * 订单详情
  165. */
  166. @RequestMapping("detail")
  167. public String detail(NewOrder order, Model model) {
  168. BpClause bpClause = new BpClause();
  169. bpClause.setEnabledStatus("1");
  170. List<BpClause> bpClauses = bpClauseService.findList(bpClause);
  171. model.addAttribute("bpClauses", bpClauses);
  172. //获取订单是否可以申请付款
  173. List<Integer> oId = new ArrayList<>();
  174. oId.add(order.getOrderID());
  175. List<Integer> orderIdsInApplyReturn = cmReturnedPurchaseDao.findOrderIDsInApplyReturnFlag(oId);
  176. if (CollectionUtils.isNotEmpty(orderIdsInApplyReturn) && orderIdsInApplyReturn.size() > 0) {
  177. order.setApplyReturnedPurchaseFlag("0");
  178. } else {
  179. order.setApplyReturnedPurchaseFlag("1");
  180. }
  181. //判断是否有在收款审核的订单
  182. List<Integer> ids = cmReceiptOrderRelationDao.toAudit(order.getOrderID());
  183. if (ids != null && ids.size() > 0) {
  184. order.setToAudit("1");
  185. }
  186. //一个子订单只有一个商品时,不可拆分
  187. int count = 0;
  188. for (NewShopOrder newShopOrder : order.getNewShopOrders()) {
  189. if (newShopOrder.getShopID() != 998) {
  190. count++;
  191. }
  192. }
  193. if (order.getProductCount() == null) {
  194. order.setProductCount(1);
  195. }
  196. if (order.getProductCount() <= count) {
  197. order.setSplitFlag("0");
  198. }
  199. //是否抹平支付过(抹平最多只允许存在一次)
  200. CmDiscernReceipt cmDiscernReceipt = cmDiscernReceiptDao.findSmoothoutInfo(order.getOrderID().toString());
  201. if (null != cmDiscernReceipt) {
  202. order.setAssociationType(cmDiscernReceipt.getAssociationType());
  203. String confirmType = cmDiscernReceipt.getConfirmType();
  204. order.setConfirmType(confirmType);
  205. // 是否是一比款收了多个订单
  206. if (StringUtils.equals(confirmType, "1") || StringUtils.equals(confirmType, "2") || StringUtils.equals(confirmType, "3")) {
  207. List<CmReceiptOrderRelation> byReceiptList = cmReceiptOrderRelationService.findByReceiptID(cmDiscernReceipt.getId());
  208. if (CollectionUtils.isNotEmpty(byReceiptList) && byReceiptList.size() > 1) {
  209. order.setReceiptOrderFlag(true);
  210. }
  211. }
  212. }
  213. // 订单已收款才会出现抹平或者多收退余额,(已收再退款或者撤销退款订单即使存在抹平也需要当未抹平重新计算付款)
  214. String receiptStatus = order.getReceiptStatus();
  215. if (StringUtils.equals("3", receiptStatus)) {
  216. if (null != cmDiscernReceipt) {
  217. String confirmType = cmDiscernReceipt.getConfirmType();
  218. order.setConfirmType(confirmType);
  219. double associateAmount = cmDiscernReceiptDao.getAssociateAmount(String.valueOf(order.getOrderID()));
  220. order.setOrderReceivedAmount(associateAmount);
  221. //大额退余额
  222. if (StringUtils.equals("3", confirmType)) {
  223. String id = cmDiscernReceipt.getId();
  224. double returnBalanceAmount = cmDiscernReceiptDao.getReturnBalanceAmount(id);
  225. order.setReturnBalanceAmount(returnBalanceAmount);
  226. }
  227. }
  228. }
  229. model.addAttribute("order", order);
  230. if ("0".equals(order.getStatus())) {
  231. try {
  232. NewOrderConfig confirmOverTime = newOrderConfigService.getValueByKey("confirmOverTime");
  233. Double value = confirmOverTime.getValue(); //待确认超过 value 小时自动取消订单
  234. GregorianCalendar gc = new GregorianCalendar();
  235. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  236. Date orderTime = sdf.parse(order.getOrderTime());
  237. gc.setTime(orderTime);
  238. gc.add(Calendar.HOUR, value.intValue());
  239. Date time = gc.getTime();
  240. String ot = sdf.format(time);
  241. if (time.after(new Date()))
  242. model.addAttribute("time", ot);
  243. } catch (Exception e) {
  244. e.printStackTrace();
  245. }
  246. }
  247. CmReturnedPurchase cmReturnedPurchase = new CmReturnedPurchase();
  248. cmReturnedPurchase.setStatus("2");
  249. cmReturnedPurchase.setOrderID(order.getOrderID());
  250. List<CmReturnedPurchase> dataList = cmReturnedPurchaseService.getReturnedPurchaseList(cmReturnedPurchase);
  251. Double returnedPurchaseFee = 0D; //退款(退货)总金额
  252. Double refundFee = 0D; //退款总额(给买家)
  253. for (CmReturnedPurchase bean : dataList) {
  254. if (!bean.getStatus().equals("3")) {
  255. returnedPurchaseFee += bean.getReturnedPurchaseFee();
  256. refundFee += bean.getRefundFee();
  257. }
  258. }
  259. double returnValue = 0d; //退货价值
  260. if (order.getDiscountFee() >= returnedPurchaseFee) {
  261. returnValue = 0d; //如果经理折扣大于退款(退货)总金额之和 那么先抵扣经理折扣 退款价值为0
  262. } else {
  263. returnValue = returnedPurchaseFee - order.getDiscountFee(); //抵用完经理折扣后才是真实价值
  264. }
  265. //订单已收金额
  266. Double receiptAmount = cmDiscernReceiptService.findOrderReceipt(order.getOrderID());
  267. model.addAttribute("returnValue", returnValue);
  268. model.addAttribute("receiptAmount", receiptAmount == null ? 0 : receiptAmount);
  269. model.addAttribute("returnedPurchaseFee", returnedPurchaseFee);
  270. return "modules/hehe/heheNewOrderDetail";
  271. }
  272. }