package com.caimei.service.order.impl; import com.alibaba.fastjson.JSONArray; import com.caimei.entity.*; import com.caimei.mapper.order.OrderMapper; import com.caimei.mapper.products.OrganizeProductsMapper; import com.caimei.mapper.user.LoginMapper; import com.caimei.mapper.user.PersonalMapper; import com.caimei.mapper.user.UserMapper; import com.caimei.service.order.OrderService; import com.caimei.utils.AppUtils; import com.caimei.utils.NoUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; import java.util.*; @Service public class OrderServiceImpl implements OrderService { @Autowired private OrderMapper orderMapper; @Autowired private PersonalMapper personalMapper; @Autowired private LoginMapper loginMapper; @Autowired private UserMapper userMapper; @Autowired private OrganizeProductsMapper organizeProductsMapper; @Value("${miniprogram.domain}") private String domain; @Override public Map confirmOrder(Integer userId, String classifyIDS, Integer organizeID, String productIDs, Integer count) { Map map = new HashMap(); //商品信息 List list = new ArrayList(); if (productIDs.contains(",")) { String[] split = productIDs.split(","); list = Arrays.asList(split); } else { list.add(productIDs); } List shopList = orderMapper.findShop(list); for (Shop shop : shopList) { List productsList = new ArrayList(); Double totalPrice = 0d; if (count == null) { //购物车购买 Map params = new HashMap(); params.put("productIDs", list); params.put("shopID", shop.getShopID()); params.put("userId", userId); productsList = orderMapper.findAllCommodity(params); for (CmOrganizeProducts products : productsList) { products.setMainImage(AppUtils.getImageURL("product", products.getMainImage(), 0, domain)); totalPrice += products.getRetailPrice() * products.getProductCount(); } } else { //立即购买 CmOrganizeProducts products = orderMapper.findCommodity(productIDs, shop.getShopID()); products.setMainImage(AppUtils.getImageURL("product", products.getMainImage(), 0, domain)); products.setProductCount(count); totalPrice = products.getRetailPrice() * products.getProductCount(); productsList.add(products); } shop.setLogo(AppUtils.getImageURL("shopLogo", shop.getLogo(), 0, domain)); shop.setTotalPrice(totalPrice); shop.setProductsList(productsList); } //发票信息 UserInvoiceInfo invoice = personalMapper.findInvoice(userId); //运费 FreePostageCard freePostageCard = orderMapper.queryFree(userId); String freight = ""; if (freePostageCard != null && classifyIDS.contains("3")) { freight = "仪器到付,产品包邮"; } else if (freePostageCard != null) { freight = "包邮"; } else { freight = "到付"; } //客服热线号码 String cellPhone = loginMapper.cellPhone(organizeID); //可用余额 Double userMoney = personalMapper.ableUserMoney(userId); if (userMoney == null) userMoney = 0d; map.put("shopList", shopList); map.put("invoice", invoice); map.put("freight", freight); map.put("cellPhone", cellPhone); map.put("userMoney", userMoney); return map; } @Override public String shareOrder(Integer orderID) { OrderShareCode orderShareCode = orderMapper.queryCode(orderID); //生成分享码 String shareCode = RandomStringUtils.random(4, false, true); //过期时间 Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.DATE, 1); if (orderShareCode != null && orderShareCode.getExpiredTime().compareTo(new Date()) == 1) { return orderShareCode.getShareCode(); } else if (orderShareCode != null) { orderShareCode.setShareCode(shareCode); orderShareCode.setExpiredTime(calendar.getTime()); orderShareCode.setDelFlag("0"); orderMapper.updateCode(orderShareCode); return String.valueOf(shareCode); } else { OrderShareCode code = new OrderShareCode(); code.setOrderID(orderID); code.setShareCode(shareCode); code.setExpiredTime(calendar.getTime()); code.setAddTime(new Date()); code.setDelFlag("0"); orderMapper.insertCode(code); return String.valueOf(shareCode); } } @Override public WxJsonModel verifyShareCode(String shareCode, String openid, Integer orderID) { CmMallShareCodeRecord shareCodeRecord = orderMapper.findShareCodeRecord(openid, orderID); return null; } @Override public Map particulars(Integer orderID) { Map map = new HashMap(); //收货地址 BpOrderUserInfo userInfo = orderMapper.findUserInfo(orderID); //订单信息,运费 CmOrder order = orderMapper.findOrder(orderID); order.setOrderMark("#" + order.getOrderID() + "#"); //商品信息 String[] ShopOrderIDs = {}; if (order.getShopOrderIDs().contains(",")) { ShopOrderIDs = order.getShopOrderIDs().split(","); } else { ShopOrderIDs = new String[]{order.getShopOrderIDs()}; } List shopOrderList = orderMapper.findAllShopOrder(ShopOrderIDs); for (CmShopOrder shopOrder : shopOrderList) { List orderProductList = orderMapper.findOrderProduct(shopOrder.getShopOrderID()); for (CmOrderProduct orderProduct : orderProductList) { orderProduct.setProductImage(AppUtils.getImageURL("product", orderProduct.getProductImage(), 0, domain)); } shopOrder.setCmOrderProducts(orderProductList); shopOrder.setShopLogo(AppUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain)); } //发票信息 UserInvoiceInfo invoice = personalMapper.findInvoice(order.getUserID()); //支付记录 List discernReceiptList = orderMapper.findDiscernReceipt(orderID); //退款记录 List returnedPurchaseList = orderMapper.findReturnedPurchase(orderID); map.put("order", order); map.put("userInfo", userInfo); map.put("shopOrderList", shopOrderList); map.put("invoice", invoice); map.put("discernReceiptList", discernReceiptList); map.put("returnedPurchaseList", returnedPurchaseList); return map; } @Override public WxJsonModel saveOrderInfo(WxJsonModel wxJsonModel, Integer userId, Integer organizeID, String cartType, Integer addressID, Object orderInfo, String balanceDeductionFlag, Double orderShouldPayFee, Integer cmOperationID) { //查询用户信息 User user = userMapper.findUserById(userId); if (null == user) { return wxJsonModel.error("1000", "用户账户异常"); } Integer clubID = user.getClubID(); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdf.format(date); //订单信息转化 List> orderInfoList = (List>) orderInfo; if (null != orderInfoList) { Integer productCount = 0;//统计购买所有商品的数量 double productTotalFee = 0d;//商品总金额 (商品单价乘以数量,再加上税费[默认0]) //double orderTotalFee = 0d;//小计金额 (商品折后单价乘以数量,再加上税费[默认0])商城下单和商品总金额一样 double payTotalFee = 0d;//订单总额(小计金额减去经理折扣后,再加上运费[默认0]) double payableAmount = 0d;//真实支付金额(订单总额减去抵扣的账户余额) for (Map shopOrderInfo : orderInfoList) {//遍历订单商品信息 String shopId = (String) shopOrderInfo.get("shopId"); String note = (String) shopOrderInfo.get("note"); Object productInfo = shopOrderInfo.get("productInfo");//一个子订单对应的商品信息 if (StringUtils.isEmpty(shopId)) return wxJsonModel.error("1001", "供应商数据异常"); if (null == productInfo) return wxJsonModel.error("1001", "订单商品数据异常"); //获取子订单商品信息 List> productInfoList = (List>) productInfo; if (!CollectionUtils.isEmpty(productInfoList)) { for (Map product : productInfoList) {//遍历所有商品 Integer productId = (Integer) product.get("productId"); Integer productNum = (Integer) product.get("productNum"); //统计商品总数量 productCount += productCount; //获取商品信息 CmOrganizeProducts cmOrganizeProducts = organizeProductsMapper.selectProductById(productId); if (null == cmOrganizeProducts) return wxJsonModel.error("1001", "订单商品数据异常"); if (null == productNum || productNum == 0) return wxJsonModel.error("1001", "商品购买数量异常"); Double retailPrice = cmOrganizeProducts.getRetailPrice();//售价 double productFee = retailPrice * productNum;//单个商品的金额 //统计商品总金额 productTotalFee += productFee; } } } payTotalFee = productTotalFee; //初始化主订单参数 CmOrder cmOrder = new CmOrder(); cmOrder.setOrderNo(NoUtils.getCmOrderNo("X")); cmOrder.setOrganizeID(organizeID); cmOrder.setUserID(userId); cmOrder.setBuyUserID(cmOperationID);//操作者的ID(下单人) cmOrder.setOrderSubmitType(2);// 2:员工帮会所下单 cmOrder.setOrderType(null);//小程序 cmOrder.setHasActProduct("0"); cmOrder.setSendOutStatus("1");//待发货 cmOrder.setProductTotalFee(productTotalFee); cmOrder.setOrderTotalFee(productTotalFee); cmOrder.setPayTotalFee(payTotalFee); cmOrder.setPreferential(0d); cmOrder.setDiscountFee(0d);//经理折扣 cmOrder.setSpID(null); cmOrder.setMainSpID(null); cmOrder.setClubID(clubID); cmOrder.setOrderSource("6");//小程序 cmOrder.setConfirmTime(dateStr); cmOrder.setOrderTime(dateStr); cmOrder.setProductCount(productCount); cmOrder.setPresentCount(0); cmOrder.setConfirmFlag("1"); cmOrder.setClauseID(1); cmOrder.setClauseContent(null); cmOrder.setClauseName(null); cmOrder.setUpdateDate(dateStr); cmOrder.setDelFlag("0"); cmOrder.setSplitFlag("0");//0不可拆分 cmOrder.setPostageOrderFlag("0");//0不是邮费订单 cmOrder.setShopOrderIDs("");//暂无类型 cmOrder.setStatus(0); cmOrder.setReceiptStatus("");//(收款买家)收款状态:1待收款、2部分收款、3已收款 cmOrder.setPayWay("");//(付款供应商)付款状态:1待付款、2部分付款、3已付款 cmOrder.setPayFlag("");//是否已支付 未支付0 已支付1 cmOrder.setOnlinePayFlag("0");//是否能走线上支付 0可以 1不可以 只能线下 cmOrder.setBalancePayFee(0d);//余额支付金额 cmOrder.setPayTime(dateStr);//支付时间 cmOrder.setInvoiceFlag("");//是否开发票 没开发票0 /开个人发票1 /开企业发票2 cmOrder.setFreePostFlag("");//免邮标志 运费:-1到付,0包邮,1需要运费,-2仪器到付其它包邮 //保存子订单 //保存订单商品 //获取用户最新余额,判断是否存在 //提交订单完成后清理购物车(用户ID,商品ID) if (StringUtils.equals("1", cartType)) {//购物车提交后清理购物车 } } return wxJsonModel.success(); } @Override public Map logistics(Integer orderID) { Map map = new HashMap(); //物流商品信息 CmOrder order = orderMapper.findOrder(orderID); String[] ShopOrderIDs = {}; if (order.getShopOrderIDs().contains(",")) { ShopOrderIDs = order.getShopOrderIDs().split(","); } else { ShopOrderIDs = new String[]{order.getShopOrderIDs()}; } List shopOrderList = orderMapper.findAllShopOrder(ShopOrderIDs); for (CmShopOrder shopOrder : shopOrderList) { List logisticsRecordList = orderMapper.findLogisticsRecord(shopOrder.getShopOrderID()); for (CmLogisticsRecord logisticsRecord : logisticsRecordList) { logisticsRecord.setImage(AppUtils.getImageURL("product", logisticsRecord.getImage(), 0, domain)); } shopOrder.setCmLogisticsRecords(logisticsRecordList); } //物流信息 List logisticsInfoList = orderMapper.findLogisticsInfo(orderID); for (LogisticsInfo logisticsInfo : logisticsInfoList) { List routers = JSONArray.parseArray(logisticsInfo.getInfo(), Router.class); logisticsInfo.setRouters(routers); } map.put("logisticsInfoList", logisticsInfoList); map.put("shopOrderList", shopOrderList); return map; } }