HeHeNewOrderController.java 11 KB

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