package com.caimei.modules.hehe.web; import com.caimei.modules.bulkpurchase.entity.BpClause; import com.caimei.modules.bulkpurchase.service.BpClauseService; import com.caimei.modules.hehe.dao.CmHeheUserDao; import com.caimei.modules.hehe.entity.CmHeheUser; import com.caimei.modules.hehe.service.HeHeNewOrderService; import com.caimei.modules.order.dao.CmDiscernReceiptDao; import com.caimei.modules.order.dao.CmReceiptOrderRelationDao; import com.caimei.modules.order.dao.CmReturnedPurchaseDao; import com.caimei.modules.order.entity.*; import com.caimei.modules.order.service.CmDiscernReceiptService; import com.caimei.modules.order.service.CmReceiptOrderRelationService; import com.caimei.modules.order.service.CmReturnedPurchaseService; import com.caimei.modules.order.service.NewOrderConfigService; import com.thinkgem.jeesite.common.persistence.Page; import com.thinkgem.jeesite.common.utils.StringUtils; import com.thinkgem.jeesite.common.web.BaseController; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.*; /** * Description * * @author : plf * @date : 2021/4/27 */ @Controller @RequestMapping(value = "${adminPath}/hehe/new/order") public class HeHeNewOrderController extends BaseController { @Autowired private HeHeNewOrderService heHeNewOrderService; @Autowired private CmHeheUserDao cmHeheUserDao; @Resource private BpClauseService bpClauseService; @Resource private CmReturnedPurchaseDao cmReturnedPurchaseDao; @Resource private NewOrderConfigService newOrderConfigService; @Resource private CmDiscernReceiptService cmDiscernReceiptService; @Resource private CmReturnedPurchaseService cmReturnedPurchaseService; @Resource private CmReceiptOrderRelationDao cmReceiptOrderRelationDao; @Autowired private CmDiscernReceiptDao cmDiscernReceiptDao; @Autowired private CmReceiptOrderRelationService cmReceiptOrderRelationService; @ModelAttribute public NewOrder get(@RequestParam(required = false) String id) { NewOrder entity = null; if (StringUtils.isNotBlank(id)) { entity = heHeNewOrderService.get(id); } if (entity == null) { entity = new NewOrder(); } return entity; } @RequestMapping("orderList") public String orderList(NewOrder order, HttpServletRequest request, HttpServletResponse response, Model model) { if (null != order.getStartTime() && !"".equals(order.getStartTime()) && !order.getStartTime().endsWith("00:00:00")) { model.addAttribute("startTime", order.getStartTime()); order.setStartTime(order.getStartTime() + " 00:00:00"); } if (null != order.getEndTime() && !"".equals(order.getEndTime()) && !order.getEndTime().endsWith("23:59:59")) { model.addAttribute("endTime", order.getEndTime()); order.setEndTime(order.getEndTime() + " 23:59:59"); } if (null != order.getStartConfirmTime() && !"".equals(order.getStartConfirmTime()) && !order.getStartConfirmTime().endsWith("00:00:00")) { model.addAttribute("startConfirmTime", order.getStartConfirmTime()); order.setStartConfirmTime(order.getStartConfirmTime() + " 00:00:00"); } if (null != order.getEndConfirmTime() && !"".equals(order.getEndConfirmTime()) && !order.getEndConfirmTime().endsWith("23:59:59")) { model.addAttribute("endConfirmTime", order.getEndConfirmTime()); order.setEndConfirmTime(order.getEndConfirmTime() + " 23:59:59"); } if (null != order.getStartRefundTime() && !"".equals(order.getStartRefundTime()) && !order.getStartRefundTime().endsWith("00:00:00")) { model.addAttribute("startRefundTime", order.getStartRefundTime()); order.setStartRefundTime(order.getStartRefundTime() + " 00:00:00"); } if (null != order.getEndRefundTime() && !"".equals(order.getEndRefundTime()) && !order.getEndRefundTime().endsWith("23:59:59")) { model.addAttribute("endRefundTime", order.getEndRefundTime()); order.setEndRefundTime(order.getEndRefundTime() + " 23:59:59"); } model.addAttribute("orderRefundType", order.getOrderRefundType()); if (null != order.getBuyer()) { order.setBuyer(order.getBuyer().trim()); } if (null != order.getReceiver()) { order.setReceiver(order.getReceiver().trim()); } //查询内部处理了已收,未付统计(包含运费) Page page = heHeNewOrderService.findPage(new Page<>(request, response, 20), order); CmHeheUser user = new CmHeheUser(); user.setUserIdentity("2"); List heUsers = cmHeheUserDao.findList(user); model.addAttribute("page", page); model.addAttribute("heUsers", heUsers); return "modules/hehe/heheNewOrderList"; } /** * 订单详情 */ @RequestMapping("detail") public String detail(NewOrder order, Model model) { BpClause bpClause = new BpClause(); bpClause.setEnabledStatus("1"); List bpClauses = bpClauseService.findList(bpClause); model.addAttribute("bpClauses", bpClauses); //获取订单是否可以申请付款 List oId = new ArrayList<>(); oId.add(order.getOrderID()); List orderIdsInApplyReturn = cmReturnedPurchaseDao.findOrderIDsInApplyReturnFlag(oId); if (CollectionUtils.isNotEmpty(orderIdsInApplyReturn) && orderIdsInApplyReturn.size() > 0) { order.setApplyReturnedPurchaseFlag("0"); } else { order.setApplyReturnedPurchaseFlag("1"); } //判断是否有在收款审核的订单 List ids = cmReceiptOrderRelationDao.toAudit(order.getOrderID()); if (ids != null && ids.size() > 0) { order.setToAudit("1"); } //一个子订单只有一个商品时,不可拆分 int count = 0; for (NewShopOrder newShopOrder : order.getNewShopOrders()) { if (newShopOrder.getShopID() != 998) { count++; } } if (order.getProductCount() == null) { order.setProductCount(1); } if (order.getProductCount() <= count) { order.setSplitFlag("0"); } //是否抹平支付过(抹平最多只允许存在一次) CmDiscernReceipt cmDiscernReceipt = cmDiscernReceiptDao.findSmoothoutInfo(order.getOrderID().toString()); if (null != cmDiscernReceipt) { order.setAssociationType(cmDiscernReceipt.getAssociationType()); String confirmType = cmDiscernReceipt.getConfirmType(); order.setConfirmType(confirmType); // 是否是一比款收了多个订单 if (StringUtils.equals(confirmType, "1") || StringUtils.equals(confirmType, "2") || StringUtils.equals(confirmType, "3")) { List byReceiptList = cmReceiptOrderRelationService.findByReceiptID(cmDiscernReceipt.getId()); if (CollectionUtils.isNotEmpty(byReceiptList) && byReceiptList.size() > 1) { order.setReceiptOrderFlag(true); } } } // 订单已收款才会出现抹平或者多收退余额,(已收再退款或者撤销退款订单即使存在抹平也需要当未抹平重新计算付款) String receiptStatus = order.getReceiptStatus(); if (StringUtils.equals("3", receiptStatus)) { if (null != cmDiscernReceipt) { String confirmType = cmDiscernReceipt.getConfirmType(); order.setConfirmType(confirmType); double associateAmount = cmDiscernReceiptDao.getAssociateAmount(String.valueOf(order.getOrderID())); order.setOrderReceivedAmount(associateAmount); //大额退余额 if (StringUtils.equals("3", confirmType)) { String id = cmDiscernReceipt.getId(); double returnBalanceAmount = cmDiscernReceiptDao.getReturnBalanceAmount(id); order.setReturnBalanceAmount(returnBalanceAmount); } } } model.addAttribute("order", order); if ("0".equals(order.getStatus())) { try { NewOrderConfig confirmOverTime = newOrderConfigService.getValueByKey("confirmOverTime"); Double value = confirmOverTime.getValue(); //待确认超过 value 小时自动取消订单 GregorianCalendar gc = new GregorianCalendar(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date orderTime = sdf.parse(order.getOrderTime()); gc.setTime(orderTime); gc.add(Calendar.HOUR, value.intValue()); Date time = gc.getTime(); String ot = sdf.format(time); if (time.after(new Date())) model.addAttribute("time", ot); } catch (Exception e) { e.printStackTrace(); } } CmReturnedPurchase cmReturnedPurchase = new CmReturnedPurchase(); cmReturnedPurchase.setStatus("2"); cmReturnedPurchase.setOrderID(order.getOrderID()); List dataList = cmReturnedPurchaseService.getReturnedPurchaseList(cmReturnedPurchase); Double returnedPurchaseFee = 0D; //退款(退货)总金额 Double refundFee = 0D; //退款总额(给买家) for (CmReturnedPurchase bean : dataList) { if (!bean.getStatus().equals("3")) { returnedPurchaseFee += bean.getReturnedPurchaseFee(); refundFee += bean.getRefundFee(); } } double returnValue = 0d; //退货价值 if (order.getDiscountFee() >= returnedPurchaseFee) { returnValue = 0d; //如果经理折扣大于退款(退货)总金额之和 那么先抵扣经理折扣 退款价值为0 } else { returnValue = returnedPurchaseFee - order.getDiscountFee(); //抵用完经理折扣后才是真实价值 } //订单已收金额 Double receiptAmount = cmDiscernReceiptService.findOrderReceipt(order.getOrderID()); model.addAttribute("returnValue", returnValue); model.addAttribute("receiptAmount", receiptAmount == null ? 0 : receiptAmount); model.addAttribute("returnedPurchaseFee", returnedPurchaseFee); return "modules/hehe/heheNewOrderDetail"; } }