12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145 |
- package com.caimei.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.caimei.mapper.OrderMapper;
- import com.caimei.mapper.OrganizeMapper;
- import com.caimei.mapper.ProductMapper;
- import com.caimei.model.ResponseJson;
- import com.caimei.model.enumerate.ReceivablesType;
- import com.caimei.model.po.*;
- import com.caimei.model.vo.*;
- import com.caimei.service.OrderService;
- import com.caimei.utils.*;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.transaction.interceptor.TransactionAspectSupport;
- import org.springframework.util.CollectionUtils;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.text.DecimalFormat;
- import java.text.SimpleDateFormat;
- import java.util.*;
- /**
- * @author Aslee
- */
- @Slf4j
- @Service
- public class OrderServiceImpl implements OrderService {
- @Resource
- private OrderMapper orderMapper;
- @Resource
- private OrganizeMapper organizeMapper;
- @Resource
- private ProductMapper productMapper;
- @Value("${caimei.oldapi}")
- private String domain;
- @Transactional
- @Override
- public ResponseJson orderSubmit(String cmAccount, String data) {
- // 获取组织信息
- CmApiOrganizePo organizePo = organizeMapper.getOrganizeByCmAccount(cmAccount);
- if (null == organizePo) {
- return ResponseJson.error("参数异常,用户不存在");
- }
- // 获得用户Id
- Integer userId = organizePo.getUserId();
- JSONObject orderInfo = null;
- try {
- // 使用组织对应的公钥解密,获得订单数据
- orderInfo = KeyUtils.decryptDataPublic(data, organizePo.getPublicKey());
- // 私钥验签
- String preSign = orderInfo.getString("sign");
- orderInfo.remove("sign");
- String sufSign = KeyUtils.buildSign(orderInfo, organizePo.getPrivateKey());
- if (!preSign.equals(sufSign)) {
- return ResponseJson.error("验签失败");
- }
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseJson.error("解密失败");
- }
- String apiOrganizeOrderId;
- Map<String, Object> addressInfo;
- Map<String, Object> productInfo;
- Map<String, Object> payInfo;
- Map<String, Object> invoiceInfo;
- String notifyUrl;
- try {
- addressInfo = orderInfo.getJSONObject("addressInfo");
- if (null == addressInfo) {
- return ResponseJson.error("地址数据异常");
- }
- // 组织订单Id,由组织自行生成,必须唯一
- apiOrganizeOrderId = orderInfo.getString("orderId");
- // 验证组织订单Id是否唯一
- Integer countByOrderId = orderMapper.getCountByOrderId(userId, apiOrganizeOrderId);
- if (null != countByOrderId && countByOrderId > 0) {
- return ResponseJson.error("订单Id已存在,请勿重复提交");
- }
- productInfo = orderInfo.getJSONObject("productInfo");
- if (null == productInfo) {
- return ResponseJson.error("订单商品数据异常");
- }
- payInfo = orderInfo.getJSONObject("payInfo");
- if (null == payInfo) {
- return ResponseJson.error("订单金额数据异常");
- }
- invoiceInfo = orderInfo.getJSONObject("invoiceInfo");
- if (null == invoiceInfo) {
- return ResponseJson.error("订单发票数据异常");
- }
- notifyUrl = orderInfo.getString("notifyUrl");
- if (StringUtils.isNotEmpty(notifyUrl) && !notifyUrl.equals(organizePo.getNotifyUrl())) {
- //更新回调地址
- orderMapper.updateNotifyUrl(organizePo.getOrganizeId(), notifyUrl);
- }
- } catch (Exception e) {
- return ResponseJson.error("数据异常");
- }
- log.info("******************** 提交订单逻辑处理 start *******************");
- //机构用户
- UserPo user = orderMapper.getUserByUserId(userId);
- if (null == user) {
- return ResponseJson.error("用户信息异常");
- }
- // 商品总数量
- Integer productCount = 0;
- // 赠品数量
- Integer presentCount = 0;
- //促销赠品数量
- Integer promotionalGiftsCount = 0;
- // 商品总金额 (商品单价乘以数量,再加上税费[默认0])
- BigDecimal productTotalFee = BigDecimal.ZERO;
- // 小计金额(商品折后单价乘以数量,再加上税费[默认0])
- BigDecimal orderTotalFee = BigDecimal.ZERO;
- // 订单总额(小计金额减去经理折扣后,再加上运费[默认0])
- BigDecimal payTotalFee = BigDecimal.ZERO;
- // 真实支付金额(订单总额减去抵扣的账户余额)
- BigDecimal payableAmount = BigDecimal.ZERO;
- // 运费
- if (null == payInfo.get("freePostFlag") || null == payInfo.get("freight")) {
- return ResponseJson.error("运费数据异常");
- }
- Integer freePostFlag = (Integer) payInfo.get("freePostFlag");
- BigDecimal freight = new BigDecimal(payInfo.get("freight").toString());
- /*
- * 发票信息获取
- */
- boolean invoiceFlag = false;
- BpOrderInvoicePo invoice = new BpOrderInvoicePo();
- Integer invoiceType = (Integer) invoiceInfo.get("type");
- if (null == invoiceType) {
- return ResponseJson.error("发票类型不能为空");
- } else {
- invoice.setType(invoiceType.longValue());
- if (0 != invoiceType) {
- // 发票类型 0不开发票 1普通发票 2增值税发票
- invoiceFlag = true;
- if (setInvoiceParam(invoiceInfo, invoice, invoiceType)) {
- return ResponseJson.error("发票信息不完整");
- }
- }
- }
- // 获取地址信息
- String provinceName = (String) addressInfo.get("provinceName");
- String cityName = (String) addressInfo.get("cityName");
- String townName = (String) addressInfo.get("townName");
- String receiveMan = (String) addressInfo.get("receiveMan");
- String mobile = (String) addressInfo.get("mobile");
- String addressDetail = (String) addressInfo.get("addressDetail");
- if (StringUtils.isEmpty(provinceName) || StringUtils.isEmpty(cityName) || StringUtils.isEmpty(townName) || StringUtils.isEmpty(receiveMan) || StringUtils.isEmpty(mobile)) {
- return ResponseJson.error("地址信息不完整");
- }
- Integer provinceId = orderMapper.getProvinceId(provinceName);
- Integer cityId = orderMapper.getCityId(cityName);
- Integer townId = orderMapper.getTownId(townName);
- if (null == provinceId || null == cityId || null == townId) {
- return ResponseJson.error("地址信息异常");
- }
- // 验证运费是否正确
- if (1 == freePostFlag) {
- if (19 != provinceId) {
- return ResponseJson.error("广东省外地址只能到付");
- } else if (202 != cityId) {
- if (0 != freight.compareTo(new BigDecimal(15))) {
- return ResponseJson.error("深圳市外运费应为15元");
- }
- } else if (0 != freight.compareTo(new BigDecimal(10))) {
- return ResponseJson.error("深圳室内运费应为10元");
- }
- } else if (0 != freight.compareTo(BigDecimal.ZERO)) {
- return ResponseJson.error("运费应为0元");
- }
- /*
- * 初始化主订单参数
- */
- CmOrderPo order = new CmOrderPo();
- String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());
- // 订单号
- String orderNo = OrderNoUtils.getOrderNo("D");
- order.setOrderNo(orderNo);
- order.setApiOrganizeOrderId(apiOrganizeOrderId);
- // 运营人员下单
- order.setBuyUserID(user.getUserID());
- order.setOrderType(1);
- order.setOrderSubmitType(2);
- order.setConfirmFlag("2");
- order.setUserID(user.getUserID().longValue());
- // 机构ID
- order.setClubID(user.getClubID().longValue());
- // 订单来源
- order.setOrderSource("7");
- order.setOrganizeID(0);
- order.setUpdateDate(curDateStr);
- order.setPayFlag("0");
- order.setCooFreeFlag("0");
- order.setCooFreeAmount(BigDecimal.ZERO);
- order.setCooFreeRate(0);
- order.setOnlinePayFlag("0");
- order.setPreferential(BigDecimal.ZERO);
- order.setDiscountFee(BigDecimal.ZERO);
- // 订单提交时间
- order.setOrderTime(curDateStr);
- // 默认订单可以拆分
- order.setSplitFlag("1");
- // 发票类型
- order.setInvoiceFlag(invoiceType.toString());
- order.setReceiptStatus("1");
- order.setPayStatus("1");
- order.setZeroCostFlag(0);
- order.setSendOutStatus("1");
- order.setRefundType("0");
- // 是否包含活动商品(受订单未支付自动关闭时间影响) 0 否 1 是
- order.setHasActProduct("0");
- // 订单状态 0 有效 其它无效
- order.setDelFlag("0");
- // 是否确认付款供应商
- order.setAffirmPaymentFlag("0");
- /*
- 订单商品
- */
- List<CmOrderProductPo> orderProductList = new ArrayList<>();
- // 收集供应商ID列表
- List<Integer> shopIdList = new ArrayList<>();
- for (Map.Entry<String, Object> product : productInfo.entrySet()) {
- String productId = product.getKey();
- Integer productNum = (Integer)product.getValue();
- // 统计商品数量
- productCount += productNum;
- // 获取商品信息
- CmApiOrganizeProductPo organizeProduct = productMapper.getProductByProductId(productId);
- if (null == organizeProduct) {
- return ResponseJson.error("订单商品数据异常");
- }
- if (null == productNum || productNum == 0) {
- return ResponseJson.error("商品购买数量异常");
- }
- // 获取商品购买价格(活动价格>>>阶梯价格>>>复购价格库>>>商品原始价)
- BigDecimal productPrice = organizeProduct.getPrice();
- // 成本价
- BigDecimal costPrice = BigDecimal.ZERO;
- // 机构税费(单)
- BigDecimal addedValueTax = new BigDecimal(0);
- int priceType = 0;
- // 活动状态
- organizeProduct.setActStatus(0);
- if (1 == organizeProduct.getLadderPriceFlag()) {
- // 启用了阶梯价格
- List<LadderPriceVo> ladderPriceList = productMapper.getLadderPriceByProductId(organizeProduct.getId());
- // 判断阶梯价格的购买数量校验
- long minBuyNumber = null != ladderPriceList.get(0) ? ladderPriceList.get(0).getBuyNum() : 0L;
- if (productNum < minBuyNumber) {
- return ResponseJson.error("商品购买量低于最小起订量");
- }
- //根据商品购买数量获取商品对应阶梯价格
- for (LadderPriceVo ladderPrice : ladderPriceList) {
- if (productNum >= ladderPrice.getBuyNum()) {
- productPrice = ladderPrice.getBuyPrice();
- }
- }
- organizeProduct.setActStatus(2);
- priceType = 2;
- }
- //不含税可开票商品计算税费
- boolean addTaxFlag = 0 == organizeProduct.getIncludedTax() && (1 == organizeProduct.getInvoiceType() || 2 == organizeProduct.getInvoiceType());
- if (addTaxFlag) {
- addedValueTax = MathUtil.div(MathUtil.mul(productPrice, organizeProduct.getClubTaxPoint()), BigDecimal.valueOf(100));
- productPrice = MathUtil.add(productPrice, addedValueTax);
- }
- if (MathUtil.compare(productPrice, BigDecimal.ZERO) == 0) {
- return ResponseJson.error("商品购买价格不能为0");
- }
- // 单个商品的金额
- BigDecimal productFee = MathUtil.mul(productPrice, productNum);
- // 统计商品总金额
- productTotalFee = MathUtil.add(productTotalFee, productFee);
- // 判断是否选中固定成本价
- if (MathUtil.compare(organizeProduct.getCostPrice(), 0) > 0 && 1 == organizeProduct.getCostType()) {
- costPrice = organizeProduct.getCostPrice();
- }
- // 判断是否选中比例成本价
- if (MathUtil.compare(organizeProduct.getCostProportional(), 0) > 0 && 2 == organizeProduct.getCostType()) {
- // 通过售价*比例得到成本价
- costPrice = BigDecimal.valueOf(MathUtil.div(MathUtil.mul(productPrice, organizeProduct.getCostProportional()), 100).floatValue());
- }
- organizeProduct.setCostPrice(costPrice);
- /*
- * 整理订单商品数据
- */
- CmOrderProductPo orderProduct = setOrderProduct(productNum, organizeProduct, productPrice, priceType, 1, addedValueTax);
- // 加入订单商品列表
- orderProductList.add(orderProduct);
- // 保存供应商id
- if (!shopIdList.contains(orderProduct.getShopID().intValue())) {
- shopIdList.add(orderProduct.getShopID().intValue());
- }
- }
- // 设置是否是二手订单
- order.setSecondHandOrderFlag("0");
- order.setPromotionFullReduction(BigDecimal.ZERO);
- // 商品总数量
- order.setProductCount(productCount);
- // 赠品数量
- order.setPresentCount(0);
- //促销赠品数量
- order.setPromotionalGiftsCount(0);
- // 0包邮 -1到付 1 有运费
- order.setFreePostFlag(freePostFlag.toString());
- order.setFreight(freight);
- // 商品总额
- order.setProductTotalFee(productTotalFee);
- // 订单总额(商品金额+运费)
- if (1 == freePostFlag) {
- // 机构用户 计算商品运费
- Double freightFee = computedPostageFee(provinceId, cityId);
- freight = BigDecimal.valueOf(freightFee);
- order.setFreight(freight);
- payTotalFee = MathUtil.add(productTotalFee, freight);
- } else {
- payTotalFee = productTotalFee;
- }
- orderTotalFee = productTotalFee;
- order.setOrderTotalFee(orderTotalFee);
- order.setPayTotalFee(payTotalFee);
- payableAmount = payTotalFee;
- // 订单状态
- order.setStatus("11");
- order.setConfirmTime(curDateStr);
- // 余额支付金额
- order.setBalancePayFee(BigDecimal.ZERO);
- // 实际支付金额(商品金额+运费-余额抵扣)
- order.setPayableAmount(payableAmount);
- // 售后条款
- order.setClauseID(1L);
- order.setClauseName("无条款");
- // 是否返佣订单
- order.setRebateFlag("0");
- // 判断前端传入orderShouldPayFee订单应付金额,和后台计算应付金额对比
- BigDecimal orderShouldPayFee = new BigDecimal(payInfo.get("orderShouldPayFee").toString());
- double v = MathUtil.sub(payableAmount, orderShouldPayFee).doubleValue();
- log.info(">>>>>payableAmount:" + payableAmount + " ,orderShouldPayFee:" + orderShouldPayFee);
- // 考虑前端计算不精确
- if (v < -0.1d || v > 0.1d) {
- // 设置手动回滚事务
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- return ResponseJson.error("订单付款金额异常");
- }
- /*
- * 保存主订单数据
- */
- orderMapper.insertOrder(order);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>新增主订单(insert[cm_order])orderId:" + order.getOrderID());
- /*
- * 设置订单商品订单号
- */
- for (CmOrderProductPo orderProduct : orderProductList) {
- orderProduct.setOrderID(order.getOrderID());
- orderProduct.setOrderNo(order.getOrderNo());
- }
- /*
- * 整理 子订单信息
- */
- // 收集子订单供应商ID字符串
- String shopOrderIds = "";
- for (Integer shopId : shopIdList) {
- // 初始化子订单信息
- CmShopOrderPo shopOrder = saveShopOrder(order, orderProductList, shopId, "");
- // 保存子订单号
- shopOrderIds += (("".equals(shopOrderIds) ? "" : ",") + shopOrder.getShopOrderID());
- // 设置订单商品子订单号
- for (CmOrderProductPo orderProduct : orderProductList) {
- if (shopId.longValue() == orderProduct.getShopID()) {
- orderProduct.setShopOrderID(shopOrder.getShopOrderID());
- orderProduct.setShopOrderNo(shopOrder.getShopOrderNo());
- }
- }
- }
- /*
- * 保存订单商品
- */
- List<OrderProductLadderPricePo> orderProductLadderPriceList = new ArrayList<>();
- for (CmOrderProductPo orderProduct : orderProductList) {
- // 保存订单商品数据
- orderMapper.insertOrderProduct(orderProduct);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>保存订单商品(insert[cm_order_product])OrderProductID:" + orderProduct.getOrderProductID());
- if ("1".equals(orderProduct.getLadderPriceFlag())) {
- //使用阶梯价格的订单商品保存下单时的阶梯价格列表
- List<LadderPriceVo> ladderPriceList = productMapper.findLadderPriceByProductId(orderProduct.getProductID());
- ladderPriceList.forEach(ladderPriceVo -> {
- OrderProductLadderPricePo orderProductLadderPrice = new OrderProductLadderPricePo();
- orderProductLadderPrice.setOrderProductId(orderProduct.getOrderProductID());
- orderProductLadderPrice.setBuyNum(ladderPriceVo.getBuyNum());
- orderProductLadderPrice.setBuyPrice(ladderPriceVo.getBuyPrice());
- orderProductLadderPrice.setCreateDate(new Date());
- orderProductLadderPrice.setLadderNum(ladderPriceVo.getLadderNum());
- orderProductLadderPriceList.add(orderProductLadderPrice);
- });
- }
- }
- if (!CollectionUtils.isEmpty(orderProductLadderPriceList)) {
- orderProductLadderPriceList.forEach(ladderPrice -> {
- orderMapper.insertOrderProductLadderPrice(ladderPrice);
- });
- }
- /*
- * 设置邮费子订单
- */
- if ("1".equals(order.getFreePostFlag())) {
- shopOrderIds = setPostFeeShopOrder(order, shopOrderIds, orderInfo.size());
- }
- // 更新主订单信息, 子订单ID:1000,1002
- order.setShopOrderIDs(shopOrderIds);
- orderMapper.updateOrder(order);
- /*
- * 保存 订单用户地址
- */
- //保存地址信息
- BpOrderUserInfoPo userInfo = new BpOrderUserInfoPo();
- userInfo.setOrderId(order.getOrderID());
- userInfo.setClubId(user.getClubID().longValue());
- userInfo.setUserId(user.getUserID().longValue());
- userInfo.setName(user.getName() == null ? user.getUserName() : user.getName());
- userInfo.setShouHuoRen(receiveMan);
- userInfo.setMobile(mobile);
- userInfo.setPostalCode(null);
- userInfo.setPostalCode(null);
- userInfo.setTownId(townId);
- userInfo.setProvince(provinceName);
- userInfo.setCity(cityName);
- userInfo.setTown(townName);
- userInfo.setAddress(addressDetail);
- orderMapper.insertUserInfo(userInfo);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>保存订单用户地址(insert[bp_order_userinfo])orderId:" + order.getOrderID());
- /*
- * 保存 订单发票信息
- */
- if (invoiceFlag) {
- // 开发票才保存
- invoice.setOrderId(order.getOrderID());
- // 查询是否存在老的增值税信息
- BpOrderInvoicePo userInvoice = orderMapper.getOrderInvoice(order.getOrderID());
- if (null != userInvoice) {
- // 更新 发票信息
- orderMapper.updateOrderInvoice(invoice);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>更新发票信息(update[bp_order_invoice])orderId:" + order.getOrderID());
- } else {
- // 保存 发票信息
- orderMapper.insertOrderInvoice(invoice);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>新增发票信息(insert[bp_order_invoice])orderId:" + order.getOrderID());
- }
- }
- log.info("******************** 提交订单逻辑处理 end *******************");
- /*
- * 构造返回参数
- */
- Map<String, String> info = new HashMap<>(5);
- //组织订单id
- info.put("orderId", apiOrganizeOrderId);
- //真实需要付款金额
- info.put("payableAmount", String.valueOf(order.getPayableAmount()));
- return ResponseJson.success(info);
- }
- @Override
- public ResponseJson<Map<String,Object>> orderDetail(String cmAccount, String data) {
- // 获取组织信息
- CmApiOrganizePo organizePo = organizeMapper.getOrganizeByCmAccount(cmAccount);
- if (null == organizePo) {
- return ResponseJson.error("参数异常,用户不存在", null);
- }
- // 获取用户id
- Integer userId = organizePo.getUserId();
- JSONObject orderInfo = null;
- try {
- // 使用组织对应的公钥解密,获得订单数据
- orderInfo = KeyUtils.decryptDataPublic(data, organizePo.getPublicKey());
- // 私钥验签
- String preSign = orderInfo.getString("sign");
- orderInfo.remove("sign");
- String sufSign = KeyUtils.buildSign(orderInfo, organizePo.getPrivateKey());
- if (!preSign.equals(sufSign)) {
- return ResponseJson.error("验签失败", null);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseJson.error("解密失败", null);
- }
- String apiOrganizeOrderId = (String) orderInfo.get("orderId");
- if (StringUtils.isEmpty(apiOrganizeOrderId)) {
- return ResponseJson.error("参数异常,订单Id不能为空",null);
- }
- // 订单信息,运费
- OrderVo order = orderMapper.getOrderInfo(userId, apiOrganizeOrderId);
- if (null == order) {
- return ResponseJson.error("该订单不存在", null);
- }
- // 收货地址
- AddressInfoVo addressInfo = orderMapper.getAddressInfo(order.getOrderID().intValue());
- // 收款列表
- getDiscernReceipt(order);
- CmOrderVo cmOrderVo = new CmOrderVo();
- // 应付金额
- cmOrderVo.setPayableAmount(order.getPayableAmount());
- // 待付金额
- cmOrderVo.setPendingPayments(order.getPendingPayments());
- // 收发状态
- cmOrderVo.setStatus(order.getStatus());
- // 退款状态
- cmOrderVo.setRefundType(order.getRefundType());
- // 退款记录
- List<CmReturnedPurchasePo> returnedPurchaseList = orderMapper.findReturnedPurchase(order.getOrderID());
- if (returnedPurchaseList != null && returnedPurchaseList.size() > 0) {
- BigDecimal returnedPurchaseFee = new BigDecimal(0);
- for (CmReturnedPurchasePo returnedPurchase : returnedPurchaseList) {
- returnedPurchaseFee = returnedPurchaseFee.add(returnedPurchase.getRefundFee());
- }
- //退款总金额
- cmOrderVo.setReturnedPurchaseFee(returnedPurchaseFee);
- }
- // 运费信息
- cmOrderVo.setFreePostFlag(order.getFreePostFlag());
- cmOrderVo.setFreight(order.getFreight());
- // 发票信息
- BpOrderInvoicePo invoiceInfo = orderMapper.getOrderInvoice(order.getOrderID());
- // 商品信息
- List<OrderProductVo> dbProductList = productMapper.getOrderProduct(order.getOrderID());
- List<DisplayOrderProductVo> orderProductList = new ArrayList<>();
- DecimalFormat decimalFormat = new DecimalFormat("0000");
- for (OrderProductVo orderProduct : dbProductList) {
- DisplayOrderProductVo product = new DisplayOrderProductVo();
- product.setProductId(decimalFormat.format(orderProduct.getApiOrganizeProductId()));
- product.setImage(ImageUtils.getImageURL("product", orderProduct.getProductImage(), 0, domain));
- product.setProductName(orderProduct.getName());
- product.setShopName(orderProduct.getShopName());
- product.setUnit(orderProduct.getProductUnit());
- product.setPrice(orderProduct.getDiscountPrice());
- product.setProductNum(orderProduct.getNum());
- product.setTaxRate(orderProduct.getTaxRate());
- //是否包含充值商品
- /*if (OrderNoUtils.getRechargeProduct(orderProduct.getProductID())) {
- order.setRechargeGoods(true);
- }*/
- //已发货数量
- product.setShipmentsNum(orderProduct.getNum() + orderProduct.getPresentNum() - orderProduct.getNotOutStore());
- //已退货数量
- Integer returnedNum = orderMapper.returnedPurchase(orderProduct.getShopOrderID(), orderProduct.getProductID());
- returnedNum = null != returnedNum ? returnedNum : 0;
- product.setReturnedNum(returnedNum);
- //已取消发货数量
- Integer actualCancelNum = orderMapper.actualCancelNum(orderProduct.getShopOrderID(), orderProduct.getProductID());
- actualCancelNum = null != actualCancelNum ? actualCancelNum : 0;
- product.setActualCancelNum(actualCancelNum);
- //判断商品价格是否含税
- if ("1".equals(orderProduct.getIncludedTax()) || ("0".equals(orderProduct.getIncludedTax()) && ("1".equals(orderProduct.getInvoiceType()) || "2".equals(orderProduct.getInvoiceType())))) {
- product.setIncludedTaxFlag("2");
- } else if (orderProduct.getIncludedTax() != null && "0".equals(orderProduct.getIncludedTax()) && "3".equals(orderProduct.getInvoiceType())) {
- product.setIncludedTaxFlag("1");
- } else {
- product.setIncludedTaxFlag("3");
- }
- //不含税可开票商品,单价/折后单价在原基础上加上税费
- if ("0".equals(orderProduct.getIncludedTax()) && ("1".equals(orderProduct.getInvoiceType()) || "2".equals(orderProduct.getInvoiceType()))) {
- product.setPrice(MathUtil.add(product.getPrice(), orderProduct.getAddedValueTax()));
- }
- orderProductList.add(product);
- }
- HashMap<String, Object> orderDetail = new HashMap<>();
- orderDetail.put("addressInfo", addressInfo);
- orderDetail.put("orderInfo", cmOrderVo);
- orderDetail.put("productInfo", orderProductList);
- orderDetail.put("invoiceInfo", invoiceInfo);
- return ResponseJson.success(orderDetail);
- }
- @Override
- public ResponseJson orderCancel(String cmAccount, String data) {
- // 获取组织信息
- CmApiOrganizePo organizePo = organizeMapper.getOrganizeByCmAccount(cmAccount);
- if (null == organizePo) {
- return ResponseJson.error("参数异常,用户不存在", null);
- }
- // 获取用户id
- Integer userId = organizePo.getUserId();
- JSONObject orderInfo = null;
- try {
- // 使用组织对应的公钥解密,获得订单数据
- orderInfo = KeyUtils.decryptDataPublic(data, organizePo.getPublicKey());
- // 私钥验签
- String preSign = orderInfo.getString("sign");
- orderInfo.remove("sign");
- String sufSign = KeyUtils.buildSign(orderInfo, organizePo.getPrivateKey());
- if (!preSign.equals(sufSign)) {
- return ResponseJson.error("验签失败", null);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseJson.error("解密失败", null);
- }
- String apiOrganizeOrderId = (String) orderInfo.get("orderId");
- if (StringUtils.isEmpty(apiOrganizeOrderId)) {
- return ResponseJson.error("参数异常,订单Id不能为空",null);
- }
- CmOrderPo order = orderMapper.getOrder(userId, apiOrganizeOrderId);
- if (null == order) {
- return ResponseJson.error("该订单不存在");
- }
- if (!("11".equals(order.getStatus()) || "0".equals(order.getStatus()))) {
- return ResponseJson.error("只有未收款未发货的订单才能取消");
- }
- order.setStatus("6");
- order.setCloseReason("协销或用户主动取消订单");
- order.setCloseTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
- orderMapper.updateOrder(order);
- return ResponseJson.success("取消订单成功");
- }
- @Override
- public ResponseJson payCallBack(String cmAccount, String data) {
- // 获取组织信息
- CmApiOrganizePo organizePo = organizeMapper.getOrganizeByCmAccount(cmAccount);
- if (null == organizePo) {
- return ResponseJson.error("参数异常,用户不存在", null);
- }
- // 获取用户id
- Integer userId = organizePo.getUserId();
- JSONObject orderInfo = null;
- try {
- // 使用组织对应的公钥解密,获得订单数据
- orderInfo = KeyUtils.decryptDataPublic(data, organizePo.getPublicKey());
- // 私钥验签
- String preSign = orderInfo.getString("sign");
- orderInfo.remove("sign");
- String sufSign = KeyUtils.buildSign(orderInfo, organizePo.getPrivateKey());
- if (!preSign.equals(sufSign)) {
- return ResponseJson.error("验签失败", null);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return ResponseJson.error("解密失败", null);
- }
- String orderId = (String) orderInfo.get("orderId");
- String result = (String) orderInfo.get("result");
- Double amount = orderInfo.getDouble("amount");
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>订单支付完成通知回调:orderId:" + orderId + ",amount:" + amount + ",result:" + result);
- return ResponseJson.success("SUCCESS");
- }
- /**
- * 设置订单发票
- *
- * @param orderInvoice
- * @param invoice
- * @param invoiceType
- * @return
- */
- private boolean setInvoiceParam(Map<String, Object> orderInvoice, BpOrderInvoicePo invoice, Integer invoiceType) {
- String invoiceTitle = (String) (null != orderInvoice.get("invoiceTitle") ? orderInvoice.get("invoiceTitle") : "");
- invoice.setInvoiceTitle(invoiceTitle);
- if (1 == invoiceType) {
- // 普通发票:发票类型、发票内容(商品明细)、抬头(公司名称)、纳税人识别号[普通发票的公司]
- String invoiceContent = (String) (null != orderInvoice.get("invoiceContent") ? orderInvoice.get("invoiceContent") : "");
- String invoiceTitleType = (null != orderInvoice.get("invoiceTitleType") ? orderInvoice.get("invoiceTitleType") : "").toString();
- if ("".equals(invoiceTitle) || "".equals(invoiceContent) || "".equals(invoiceTitleType)) {
- return true;
- }
- if ("1".equals(invoiceTitleType)) {
- // 企业
- String corporationTaxNum = (String) (null != orderInvoice.get("corporationTaxNum") ? orderInvoice.get("corporationTaxNum") : "");
- if ("".equals(corporationTaxNum)) {
- return true;
- }
- invoice.setCorporationTaxNum(corporationTaxNum);
- }
- invoice.setInvoiceContent(invoiceContent);
- } else if (2 == invoiceType) {
- // 增值税发票:发票类型、发票、抬头(公司名称)、纳税人识别号、注册地址、注册电话、开户银行、开户银行账户
- String corporationTaxNum = (String) (null != orderInvoice.get("corporationTaxNum") ? orderInvoice.get("corporationTaxNum") : "");
- String registeredAddress = (String) (null != orderInvoice.get("registeredAddress") ? orderInvoice.get("registeredAddress") : "");
- String registeredPhone = (String) (null != orderInvoice.get("registeredPhone") ? orderInvoice.get("registeredPhone") : "");
- String openBank = (String) (null != orderInvoice.get("openBank") ? orderInvoice.get("openBank") : "");
- String bankAccountNo = (String) (null != orderInvoice.get("bankAccountNo") ? orderInvoice.get("bankAccountNo") : "");
- boolean flag = "".equals(invoiceTitle) || "".equals(corporationTaxNum) || "".equals(registeredAddress) || "".equals(registeredPhone) || "".equals(openBank) || "".equals(bankAccountNo);
- if (flag) {
- return true;
- }
- invoice.setCorporationTaxNum(corporationTaxNum);
- invoice.setRegisteredAddress(registeredAddress);
- invoice.setRegisteredPhone(registeredPhone);
- invoice.setOpenBank(openBank);
- invoice.setBankAccountNo(bankAccountNo);
- }
- return false;
- }
- /**
- * 整理订单商品数据
- *
- * @param productNum
- * @param product
- * @param productPrice
- * @param priceType 0正常商品 1促销商品 2阶梯价 3复购价
- * @param productType
- * @return
- */
- private CmOrderProductPo setOrderProduct(Integer productNum, CmApiOrganizeProductPo product, BigDecimal productPrice, Integer priceType, Integer productType, BigDecimal addedValueTax) {
- CmOrderProductPo orderProduct = new CmOrderProductPo();
- orderProduct.setShopID(product.getShopId().longValue());
- orderProduct.setProductID(product.getProductId());
- // orderProduct.setOrganizeProductID(product.getId());
- // 预留在保存保存子订单的时候添加
- orderProduct.setProductNo(null);
- orderProduct.setNum(productNum);
- orderProduct.setPresentNum(0);
- orderProduct.setProductUnit(product.getUnit());
- if (MathUtil.compare(product.getNormalPrice(), 0) > 0) {
- orderProduct.setNormalPrice(product.getNormalPrice());
- } else {
- orderProduct.setNormalPrice(BigDecimal.ZERO);
- }
- orderProduct.setCostPrice(product.getCostPrice());
- orderProduct.setPrice0(product.getPrice());
- orderProduct.setPrice1(product.getPrice());
- orderProduct.setTotalAmount(MathUtil.mul(product.getPrice(), productNum));
- orderProduct.setDiscount(new BigDecimal(100));
- // 经理折扣(优惠金额)
- orderProduct.setDiscountFee(new BigDecimal(0));
- //机构税率
- orderProduct.setTaxRate(product.getClubTaxPoint() == null ? new BigDecimal(0) : product.getClubTaxPoint());
- //供应商税率
- orderProduct.setSupplierTaxRate(BigDecimal.valueOf(0));
- orderProduct.setIncludedTax(product.getIncludedTax().toString());
- orderProduct.setInvoiceType(product.getInvoiceType().toString());
- BigDecimal singleShouldPayTotalTax = new BigDecimal(0);
- if (productType == 2) {
- //促销赠品置机构税率和供应商税率为0
- orderProduct.setTaxRate(BigDecimal.ZERO);
- orderProduct.setSupplierTaxRate(BigDecimal.ZERO);
- } else {
- //不含税可开发票商品设置税费
- if (0 == product.getIncludedTax() && (1 == product.getInvoiceType() || 2 == product.getInvoiceType())) {
- //供应商税费(单)=成本价 * 供应商税率
- if (product.getShopTaxPoint() == null) {
- orderProduct.setSupplierTaxRate(product.getClubTaxPoint());
- } else {
- orderProduct.setSupplierTaxRate(product.getShopTaxPoint());
- }
- singleShouldPayTotalTax = MathUtil.div(MathUtil.mul(product.getCostPrice(), orderProduct.getSupplierTaxRate()), BigDecimal.valueOf(100));
- } else if (1 == product.getIncludedTax()) {
- //含税商品设置供应商税率
- if (product.getShopTaxPoint() == null) {
- orderProduct.setSupplierTaxRate(product.getClubTaxPoint());
- } else {
- orderProduct.setSupplierTaxRate(product.getShopTaxPoint());
- }
- } else if ((0 == product.getIncludedTax() && 3 == product.getInvoiceType()) || 2 == product.getIncludedTax()) {
- //不含税不可开票商品和未知商品,税率置为0
- orderProduct.setTaxRate(BigDecimal.ZERO);
- orderProduct.setSupplierTaxRate(BigDecimal.ZERO);
- }
- }
- orderProduct.setAddedValueTax(addedValueTax);
- //机构税费(总)=机构税费(单) * 商品数量
- orderProduct.setTotalAddedValueTax(MathUtil.mul(addedValueTax, productNum));
- orderProduct.setSingleShouldPayTotalTax(singleShouldPayTotalTax);
- //供应商税费(总)=供应商税费(单) * 商品数量
- orderProduct.setShouldPayTotalTax(MathUtil.mul(singleShouldPayTotalTax, productNum));
- orderProduct.setTotalFee(MathUtil.mul(productPrice, productNum));
- orderProduct.setShouldPayFee(MathUtil.mul(productPrice, productNum));
- // 商品费=成本价快照*(购买数量 + 赠品数量)
- orderProduct.setShopProductAmount(MathUtil.mul(product.getCostPrice(), BigDecimal.valueOf(productNum)));
- //不含税可开票商品,单价/折后单价=售价-税费
- if (priceType == 0 || priceType == 1) {
- //正常价格和促销价格
- orderProduct.setPrice(product.getPrice());
- orderProduct.setDiscountPrice(product.getPrice());
- } else if (priceType == 2) {
- //阶梯价
- BigDecimal price1 = productPrice;
- //不含税可开票商品,单价/折后单价=售价-税费
- if (0 == product.getIncludedTax() && (1 == product.getInvoiceType() || 2 == product.getInvoiceType())) {
- price1 = MathUtil.sub(productPrice, orderProduct.getAddedValueTax());
- }
- orderProduct.setPrice(price1);
- orderProduct.setDiscountPrice(price1);
- }
- //应付供应商(单)=成本价+供应商税费(单)
- BigDecimal singleShopFee = MathUtil.add(product.getCostPrice(), singleShouldPayTotalTax);
- orderProduct.setSingleShopFee(singleShopFee);
- // 应付供应商(总)=应付供应商(单) * 商品数量
- orderProduct.setShopFee(MathUtil.mul(singleShopFee, BigDecimal.valueOf(productNum)));
- orderProduct.setOtherFee(new BigDecimal(0));
- orderProduct.setSingleOtherFee(new BigDecimal(0));
- //应付采美(单)=单价+机构税费(单)-(成本(单)+供应商税费(单))
- BigDecimal singleCmFee = MathUtil.sub(MathUtil.add(product.getPrice(), orderProduct.getAddedValueTax()), MathUtil.add(product.getCostPrice(), singleShouldPayTotalTax));
- orderProduct.setSingleCmFee(singleCmFee);
- // 应付采美(总)=应付采美(单)*商品数量
- BigDecimal cmFee = MathUtil.mul(singleCmFee, BigDecimal.valueOf(productNum));
- orderProduct.setCmFee(cmFee);
- orderProduct.setTotalBeans(new BigDecimal(0));
- orderProduct.setUseBalanceAmount(0d);
- // 优惠金额
- orderProduct.setPreferential(new BigDecimal(0));
- orderProduct.setUseBalanceAmount(0d);
- // 订单商品供应商确认标志 0否 1是
- orderProduct.setConfirmProductFlag("0");
- orderProduct.setShopName(product.getShopName());
- orderProduct.setName(product.getName());
- orderProduct.setPayStatus("0");
- orderProduct.setBuyAgainFlag("0");
- // 未出库数量
- orderProduct.setNotOutStore(productNum);
- // 是否已评论 1 是 0 未评论
- orderProduct.setCommentFlag("0");
- orderProduct.setActPreferential(new BigDecimal(0));
- orderProduct.setActType(null);
- orderProduct.setIsActProduct(product.getActStatus().toString());
- orderProduct.setLadderPriceFlag(product.getActStatus() == 2 ? "1" : "0");
- orderProduct.setProductImage(ProductUtils.getImageURL("product", product.getMainImage(), 0, domain));
- orderProduct.setProductType(productType.toString());
- //促销赠品
- if (productType == 2) {
- orderProduct.setPrice0(BigDecimal.ZERO);
- orderProduct.setPrice1(BigDecimal.ZERO);
- orderProduct.setTotalAmount(BigDecimal.ZERO);
- orderProduct.setTotalFee(BigDecimal.ZERO);
- orderProduct.setDiscountPrice(BigDecimal.ZERO);
- orderProduct.setTotalAddedValueTax(BigDecimal.ZERO);
- orderProduct.setShouldPayTotalTax(BigDecimal.ZERO);
- }
- return orderProduct;
- }
- /**
- * 计算总运费
- *
- * @param provinceId
- * @param cityId
- * @return totalPostageFee
- */
- public Double computedPostageFee(Integer provinceId, Integer cityId) {
- if (202 == cityId) {
- // 深圳市内运费10元
- return 10d;
- } else if (19 == provinceId) {
- // 广东省内深圳市外运费15元
- return 15d;
- } else {
- return -1d;
- }
- }
- /**
- * 保存子订单,并返回子订单ids
- *
- * @param order
- * @param orderProductList
- * @param shopId
- * @param shopNote
- * @return
- */
- private CmShopOrderPo saveShopOrder(CmOrderPo order, List<CmOrderProductPo> orderProductList, Integer shopId, String shopNote) {
- /*
- * 初始化子订单信息
- */
- CmShopOrderPo shopOrder = new CmShopOrderPo();
- // 子订单编号
- String shopOrderNo = "";
- String maxShopOrderNo = orderMapper.findMaxShopOrderNo(order.getOrderID());
- if (StringUtils.isNotBlank(maxShopOrderNo)) {
- shopOrderNo = maxShopOrderNo;
- shopOrder.setShopOrderNo(OrderNoUtils.getShopOrderNo(order.getOrderNo(), Integer.parseInt(shopOrderNo.substring(shopOrderNo.length() - 2, shopOrderNo.length())) + 1));
- } else {
- shopOrder.setShopOrderNo(OrderNoUtils.getShopOrderNo(order.getOrderNo(), 1));
- }
- shopOrder.setShopID(shopId);
- shopOrder.setClubID(order.getClubID().intValue());
- shopOrder.setOrderID(order.getOrderID());
- shopOrder.setOrderNo(order.getOrderNo());
- shopOrder.setUserID(order.getUserID().intValue());
- shopOrder.setOrganizeID(order.getOrganizeID());
- /*
- * 统计子订单金额信息
- */
- // 订单总金额
- BigDecimal totalAmount = new BigDecimal(0);
- // 商品总金额
- BigDecimal productAmount = new BigDecimal(0);
- // 需要支付金额
- BigDecimal needPayAmount = new BigDecimal(0);
- // 优惠金额
- BigDecimal preferential = new BigDecimal(0);
- // 佣金
- BigDecimal brokerage = new BigDecimal(0);
- // 商品费
- BigDecimal shopProductAmount = new BigDecimal(0);
- // 供应商税费
- BigDecimal shopTaxFee = new BigDecimal(0);
- // 总购买数
- Integer buyNum = 0;
- // 计算子订单信息
- for (CmOrderProductPo orderProduct : orderProductList) {
- if (shopId.longValue() == orderProduct.getShopID()) {
- // 商品总金额
- productAmount = MathUtil.add(productAmount, orderProduct.getTotalAmount());
- // 订单总金额 包括税费
- totalAmount = MathUtil.add(totalAmount, orderProduct.getTotalFee());
- // 应付金额
- needPayAmount = MathUtil.add(needPayAmount, orderProduct.getShouldPayFee());
- // 总购买数
- buyNum += orderProduct.getNum();
- preferential = MathUtil.add(preferential, orderProduct.getPreferential());
- brokerage = MathUtil.add(brokerage, orderProduct.getCmFee());
- if (null != orderProduct.getShopProductAmount()) {
- shopProductAmount = MathUtil.add(shopProductAmount, orderProduct.getShopProductAmount());
- }
- if (null != orderProduct.getShouldPayTotalTax()) {
- shopTaxFee = MathUtil.add(shopTaxFee, orderProduct.getShouldPayTotalTax());
- }
- }
- }
- shopOrder.setPromotionFullReduction(BigDecimal.ZERO);
- // freePostFlag: 0包邮 -1到付 1 有运费
- // fee: 运费:-1到付,0包邮,其他为具体运费(v5.0版本已废弃,运费已使用商品形式存储)
- if ("1".equals(order.getFreePostFlag())) {
- shopOrder.setFee(0d);
- } else {
- shopOrder.setFee(Double.parseDouble(order.getFreePostFlag()));
- }
- shopOrder.setNote(shopNote);
- shopOrder.setOrderTime(order.getOrderTime());
- shopOrder.setDiscountFee(BigDecimal.ZERO);
- shopOrder.setCanRefundFlag(1);
- shopOrder.setCanRefundAmount(needPayAmount.doubleValue());
- shopOrder.setAccountAmount(BigDecimal.ZERO);
- // 佣金 采美应收
- shopOrder.setBrokerage(brokerage);
- shopOrder.setBuyStatus("1");
- shopOrder.setPresentNum(0);
- shopOrder.setUseBeanFlag(0);
- shopOrder.setUseBeanAmount(0);
- shopOrder.setUseBalanceFlag(0);
- shopOrder.setRefundStatus(0);
- shopOrder.setRefundsAmount(BigDecimal.ZERO);
- shopOrder.setPayStatus("1");
- shopOrder.setZeroCostFlag(0);
- shopOrder.setSendOutStatus("1");
- shopOrder.setPayFlag("0");
- // 订单状态标识,1:非退货退款订单、2:退货退款中、3退货退款完成
- shopOrder.setOrderStatusFlag("1");
- shopOrder.setDelFlag("0");
- shopOrder.setOrderBeanAmount(0);
- // 购买商品数
- shopOrder.setItemCount(buyNum);
- // 普通订单 1 协销订单0 与cm_order一样
- shopOrder.setOrderType(0);
- shopOrder.setStatus(1);
- shopOrder.setOrderSubmitType(order.getOrderSubmitType());
- shopOrder.setTotalAmount(totalAmount);
- shopOrder.setProductAmount(productAmount);
- shopOrder.setNeedPayAmount(needPayAmount);
- shopOrder.setPreferential(preferential);
- shopOrder.setShopProductAmount(shopProductAmount);
- // 付给供应商运费
- shopOrder.setShopPostFee(BigDecimal.ZERO);
- // 付给供应商税费
- shopOrder.setShopTaxFee(shopTaxFee);
- // 已付款金额
- shopOrder.setPayedShopAmount(BigDecimal.ZERO);
- // 付第三方
- shopOrder.setShopOtherFee(BigDecimal.ZERO);
- // 付供应商 = 商品费 + 运费 + 税费
- shopOrder.setShouldPayShopAmount(MathUtil.add(shopProductAmount, shopTaxFee));
- // 订单能否拆分 1 为可拆分, 0为不可拆分
- if (buyNum > 1) {
- shopOrder.setSplitFlag("1");
- } else {
- shopOrder.setSplitFlag("0");
- }
- /*
- * 保存子订单信息到数据库
- */
- orderMapper.insertShopOrder(shopOrder);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>新增子订单(insert[cm_shop_order])shopOrderId:" + shopOrder.getShopOrderID());
- return shopOrder;
- }
- /**
- * 保存运费子订单,并返回子订单ids
- *
- * @param order
- * @param num
- * @return
- */
- private String setPostFeeShopOrder(CmOrderPo order, String shopOrderIds, int num) {
- ProductPo product = productMapper.findPostFeeProduct();
- CmShopOrderPo newShopOrder = new CmShopOrderPo();
- String shopOrderNo = OrderNoUtils.getShopOrderNo(order.getOrderNo(), num + 1);
- newShopOrder.setShopOrderNo(shopOrderNo);
- newShopOrder.setOrderNo(order.getOrderNo());
- newShopOrder.setOrderID(order.getOrderID());
- newShopOrder.setUserID(order.getUserID().intValue());
- newShopOrder.setOrderType(order.getOrderType());
- newShopOrder.setOrderSubmitType(order.getOrderSubmitType());
- newShopOrder.setPresentNum(0);
- newShopOrder.setItemCount(1);
- //运费商品供应商ID默认998
- newShopOrder.setShopID(product.getShopID());
- newShopOrder.setFee(order.getFreight().doubleValue());
- newShopOrder.setProductAmount(order.getFreight());
- newShopOrder.setTotalAmount(order.getFreight());
- newShopOrder.setNeedPayAmount(order.getFreight());
- newShopOrder.setDiscountAmount(BigDecimal.ZERO);
- newShopOrder.setPayFlag("0");
- newShopOrder.setOrderTime(order.getOrderTime());
- newShopOrder.setPayStatus("3");
- newShopOrder.setSendOutStatus("3");
- newShopOrder.setTotalAddedValueTax(BigDecimal.ZERO);
- newShopOrder.setCanRefundAmount(0D);
- newShopOrder.setRefundAmount(0D);
- newShopOrder.setRefundStatus(0);
- newShopOrder.setClubID(order.getClubID().intValue());
- if (null != order.getSpID()) {
- newShopOrder.setSpID(order.getSpID().intValue());
- }
- if (null != order.getMainSpID()) {
- newShopOrder.setMainSpID(order.getMainSpID().intValue());
- }
- newShopOrder.setAutoOverTimeMills(0L);
- newShopOrder.setAutoReceiveTimeMills(0L);
- newShopOrder.setOrderBeanAmount(0);
- newShopOrder.setUseBeanFlag(0);
- newShopOrder.setUseBeanAmount(0);
- newShopOrder.setAccountAmount(BigDecimal.ZERO);
- newShopOrder.setCanRefundFlag(1);
- newShopOrder.setBuyStatus("1");
- newShopOrder.setOutStoreNum(0);
- newShopOrder.setDelFlag("0");
- newShopOrder.setPayFlag("0");
- // 订单默认可拆分
- newShopOrder.setSplitFlag("1");
- /*
- * 保存子订单信息到数据库
- */
- orderMapper.insertShopOrder(newShopOrder);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>新增子订单(运费商品)(insert[cm_shop_order])shopOrderId:" + newShopOrder.getShopOrderID());
- /*
- * 插入订单 运费商品
- */
- CmOrderProductPo feeOrderProduct = new CmOrderProductPo();
- feeOrderProduct.setProductType("0");
- feeOrderProduct.setOrderNo(order.getOrderNo());
- feeOrderProduct.setOrderID(order.getOrderID());
- feeOrderProduct.setShopOrderID(newShopOrder.getShopOrderID());
- feeOrderProduct.setShopOrderNo(newShopOrder.getShopOrderNo());
- feeOrderProduct.setShopID(product.getShopID().longValue());
- feeOrderProduct.setProductID(999);
- feeOrderProduct.setNum(1);
- feeOrderProduct.setPresentNum(0);
- feeOrderProduct.setOutStoreType("0");
- feeOrderProduct.setProps(product.getProps());
- feeOrderProduct.setProductNo(product.getProductCode());
- feeOrderProduct.setPrice(order.getFreight());
- feeOrderProduct.setNormalPrice(order.getFreight());
- feeOrderProduct.setPrice0(order.getFreight());
- feeOrderProduct.setPrice1(order.getFreight());
- feeOrderProduct.setTotalAmount(order.getFreight());
- feeOrderProduct.setTotalFee(order.getFreight());
- feeOrderProduct.setShouldPayFee(order.getFreight());
- feeOrderProduct.setDiscount(new BigDecimal(100));
- feeOrderProduct.setDiscountPrice(order.getFreight());
- feeOrderProduct.setTaxRate(new BigDecimal(100));
- feeOrderProduct.setAddedValueTax(order.getFreight());
- feeOrderProduct.setTotalAddedValueTax(BigDecimal.ZERO);
- feeOrderProduct.setShopFee(BigDecimal.ZERO);
- feeOrderProduct.setOtherFee(BigDecimal.ZERO);
- feeOrderProduct.setCmFee(order.getFreight());
- feeOrderProduct.setSingleShopFee(BigDecimal.ZERO);
- feeOrderProduct.setSingleOtherFee(BigDecimal.ZERO);
- feeOrderProduct.setSingleCmFee(order.getFreight());
- feeOrderProduct.setTotalBeans(BigDecimal.ZERO);
- feeOrderProduct.setUseBalanceAmount(0D);
- feeOrderProduct.setUseBeanAmount(0);
- feeOrderProduct.setNotOutStore(0);
- feeOrderProduct.setCmbeanPrice(0);
- feeOrderProduct.setBuyAgainFlag("0");
- feeOrderProduct.setShopName(product.getShopName());
- feeOrderProduct.setName(product.getName());
- feeOrderProduct.setIncludedTax(product.getIncludedTax());
- feeOrderProduct.setInvoiceType(product.getInvoiceType());
- // 保存订单商品数据
- orderMapper.insertOrderProduct(feeOrderProduct);
- log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>保存订单运费商品(insert[cm_order_product])orderId:" + feeOrderProduct.getOrderProductID());
- shopOrderIds += (("".equals(shopOrderIds) ? "" : ",") + newShopOrder.getShopOrderID());
- return shopOrderIds;
- }
- private List<DiscernReceiptVo> getDiscernReceipt(OrderVo order) {
- //支付记录
- List<DiscernReceiptVo> discernReceiptList = orderMapper.findDiscernReceipt(order.getOrderID().intValue());
- BigDecimal receiptAmount = BigDecimal.ZERO;
- //订单款
- if (discernReceiptList != null && discernReceiptList.size() > 0) {
- for (DiscernReceiptVo discernReceipt : discernReceiptList) {
- receiptAmount = receiptAmount.add(discernReceipt.getAssociateAmount());
- if (discernReceipt.getPayType() != null) {
- discernReceipt.setPayType(ReceivablesType.getReceivablesType(Integer.parseInt(discernReceipt.getPayType())));
- }
- }
- }
- order.setPendingPayments(MathUtil.sub(order.getPayableAmount(), receiptAmount));
- //支付总金额
- order.setReceiptAmount(receiptAmount);
- return discernReceiptList;
- }
- }
|