123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- 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<String, Object> confirmOrder(Integer userId, String classifyIDS, Integer organizeID, String productIDs, Integer count) {
- Map<String, Object> map = new HashMap();
- //商品信息
- List<String> list = new ArrayList();
- if (productIDs.contains(",")) {
- String[] split = productIDs.split(",");
- list = Arrays.asList(split);
- } else {
- list.add(productIDs);
- }
- List<Shop> shopList = orderMapper.findShop(list);
- for (Shop shop : shopList) {
- List<CmOrganizeProducts> productsList = new ArrayList();
- Double totalPrice = 0d;
- if (count == null) {
- //购物车购买
- Map<String, Object> 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<String, Object> particulars(Integer orderID) {
- Map<String, Object> 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<CmShopOrder> shopOrderList = orderMapper.findAllShopOrder(ShopOrderIDs);
- for (CmShopOrder shopOrder : shopOrderList) {
- List<CmOrderProduct> 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<CmDiscernReceipt> discernReceiptList = orderMapper.findDiscernReceipt(orderID);
- //退款记录
- List<CmReturnedPurchase> 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<Map<String, Object>> orderInfoList = (List<Map<String, Object>>) orderInfo;
- if (null != orderInfoList) {
- Integer productCount = 0;//统计购买所有商品的数量
- double productTotalFee = 0d;//商品总金额 (商品单价乘以数量,再加上税费[默认0])
- //double orderTotalFee = 0d;//小计金额 (商品折后单价乘以数量,再加上税费[默认0])商城下单和商品总金额一样
- double payTotalFee = 0d;//订单总额(小计金额减去经理折扣后,再加上运费[默认0])
- double payableAmount = 0d;//真实支付金额(订单总额减去抵扣的账户余额)
- for (Map<String, Object> 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<Map<String, Object>> productInfoList = (List<Map<String, Object>>) productInfo;
- if (!CollectionUtils.isEmpty(productInfoList)) {
- for (Map<String, Object> 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<String, Object> logistics(Integer orderID) {
- Map<String, Object> 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<CmShopOrder> shopOrderList = orderMapper.findAllShopOrder(ShopOrderIDs);
- for (CmShopOrder shopOrder : shopOrderList) {
- List<CmLogisticsRecord> logisticsRecordList = orderMapper.findLogisticsRecord(shopOrder.getShopOrderID());
- for (CmLogisticsRecord logisticsRecord : logisticsRecordList) {
- logisticsRecord.setImage(AppUtils.getImageURL("product", logisticsRecord.getImage(), 0, domain));
- }
- shopOrder.setCmLogisticsRecords(logisticsRecordList);
- }
- //物流信息
- List<LogisticsInfo> logisticsInfoList = orderMapper.findLogisticsInfo(orderID);
- for (LogisticsInfo logisticsInfo : logisticsInfoList) {
- List<Router> routers = JSONArray.parseArray(logisticsInfo.getInfo(), Router.class);
- logisticsInfo.setRouters(routers);
- }
- map.put("logisticsInfoList", logisticsInfoList);
- map.put("shopOrderList", shopOrderList);
- return map;
- }
- }
|