lijun преди 5 години
родител
ревизия
2e7cf4ee4e

+ 9 - 0
src/main/java/com/caimei/entity/CmOrganizeProducts.java

@@ -32,6 +32,7 @@ public class CmOrganizeProducts implements Serializable {
     private ProductDetailInfo productDetailInfo; //商品详情
     private Shop shop;      //供应商信息
     private String shopName;        //商品名称
+    private Integer shopID;//
     private String productClassifyName;//商品分类名字
     private Boolean productsChecked = false;  //商品勾选状态
 
@@ -274,4 +275,12 @@ public class CmOrganizeProducts implements Serializable {
     public void setProductClassifyName(String productClassifyName) {
         this.productClassifyName = productClassifyName;
     }
+
+    public Integer getShopID() {
+        return shopID;
+    }
+
+    public void setShopID(Integer shopID) {
+        this.shopID = shopID;
+    }
 }

+ 65 - 0
src/main/java/com/caimei/entity/CmShopOrder.java

@@ -69,6 +69,15 @@ public class CmShopOrder implements Serializable {
     private Double shouldPayShopAmount;//付供应商 = 商品费 + 运费 + 税费
     private Double payedShopAmount; //已付款金额
     private Double shopOtherFee; //付第三方
+    private Integer clubID;//会所ID
+    private Integer spID;
+    private Integer mainSpID;
+    private Double brokerage;
+    private String buyStatus;
+    private Integer useBeanAmount;
+    private Integer useBeanFlag;
+
+
 
 
     public Integer getShopOrderID() {
@@ -518,4 +527,60 @@ public class CmShopOrder implements Serializable {
     public void setCmLogisticsRecords(List<CmLogisticsRecord> cmLogisticsRecords) {
         this.cmLogisticsRecords = cmLogisticsRecords;
     }
+
+    public Integer getClubID() {
+        return clubID;
+    }
+
+    public void setClubID(Integer clubID) {
+        this.clubID = clubID;
+    }
+
+    public Integer getSpID() {
+        return spID;
+    }
+
+    public void setSpID(Integer spID) {
+        this.spID = spID;
+    }
+
+    public Integer getMainSpID() {
+        return mainSpID;
+    }
+
+    public void setMainSpID(Integer mainSpID) {
+        this.mainSpID = mainSpID;
+    }
+
+    public Double getBrokerage() {
+        return brokerage;
+    }
+
+    public void setBrokerage(Double brokerage) {
+        this.brokerage = brokerage;
+    }
+
+    public String getBuyStatus() {
+        return buyStatus;
+    }
+
+    public void setBuyStatus(String buyStatus) {
+        this.buyStatus = buyStatus;
+    }
+
+    public Integer getUseBeanAmount() {
+        return useBeanAmount;
+    }
+
+    public void setUseBeanAmount(Integer useBeanAmount) {
+        this.useBeanAmount = useBeanAmount;
+    }
+
+    public Integer getUseBeanFlag() {
+        return useBeanFlag;
+    }
+
+    public void setUseBeanFlag(Integer useBeanFlag) {
+        this.useBeanFlag = useBeanFlag;
+    }
 }

+ 9 - 0
src/main/java/com/caimei/entity/CmUserBalanceRecord.java

@@ -24,6 +24,7 @@ public class CmUserBalanceRecord implements Serializable {
     private String ableUserMoney;//用户可用余额
     private String startTime;   //开始时间
     private String endTime;     //结束时间
+    private String delFlag;
 
     public Integer getUserId() {
         return userId;
@@ -144,4 +145,12 @@ public class CmUserBalanceRecord implements Serializable {
     public void setEndTime(String endTime) {
         this.endTime = endTime;
     }
+
+    public String getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(String delFlag) {
+        this.delFlag = delFlag;
+    }
 }

+ 50 - 0
src/main/java/com/caimei/mapper/order/CmShopOrderMapper.java

@@ -0,0 +1,50 @@
+package com.caimei.mapper.order;
+
+import com.caimei.entity.CmShopOrder;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface CmShopOrderMapper {
+
+    List<CmShopOrder> findList(CmShopOrder cmShopOrder);
+
+    int delete(@Param("shopOrderID") Integer shopOrderID);
+
+    int update(CmShopOrder cmShopOrder);
+
+    int delete(CmShopOrder cmShopOrder);
+
+    int insert(CmShopOrder cmShopOrder);
+
+    int insertCmShopOrder(CmShopOrder cmShopOrder);
+
+    CmShopOrder get(@Param("shopOrderID") Integer shopOrderID);
+
+    List<CmShopOrder> listShopOrderByIDs(@Param("shopOrderIDs") String shopOrderIDs);
+
+    int updateOrderOwner(Map<String, Object> param);
+
+    int updateRefundsInfo(@Param("shopOrderID") Integer shopOrderID, @Param("orderStatusFlag") String orderStatusFlag);
+
+    CmShopOrder findByShopID(@Param("orderID") Integer orderID, @Param("shopID") Integer shopID);
+
+    List<CmShopOrder> findMaxShopOrderNo(@Param("orderID") Integer orderID);
+
+    List<Map<String, Object>> countSupplierOrders(@Param("shopID") Integer shopID);
+
+    List<Map<String, Object>> salesRanking(@Param("shopID") Integer shopID);
+
+    List<Map<String, Object>> salesStatistics(@Param("shopID") Integer shopID, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    int shopOrderBak(CmShopOrder cmShopOrder);
+
+    List<CmShopOrder> findListByOrderID(@Param("orderID") Integer orderID);
+
+    Double findTotalTaxByOrderID(Integer orderID);
+
+    Integer getShopOrderBak(@Param("shopOrderNo") String shopOrderNo);
+}

+ 5 - 0
src/main/java/com/caimei/mapper/order/OrderMapper.java

@@ -9,6 +9,11 @@ import java.util.Map;
 
 @Mapper
 public interface OrderMapper {
+
+    int insert(CmOrder cmOrder);
+
+    int update(CmOrder cmOrder);
+
     OrderShareCode queryCode(Integer orderID);
 
     FreePostageCard queryFree(Integer userId);

+ 54 - 0
src/main/java/com/caimei/mapper/order/OrderProductMapper.java

@@ -0,0 +1,54 @@
+package com.caimei.mapper.order;
+
+import com.caimei.entity.CmOrderProduct;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+@Mapper
+public interface OrderProductMapper {
+
+    CmOrderProduct get(@Param("orderProductID") Integer orderProductID);
+
+    List<CmOrderProduct> findList(CmOrderProduct cmOrderProduct);
+
+    int delete(@Param("orderProductID") Integer orderProductID);
+
+    int update(CmOrderProduct cmOrderProduct);
+
+    int delete(CmOrderProduct cmOrderProduct);
+
+    int insert(CmOrderProduct cmOrderProduct);
+
+    List<CmOrderProduct> findByIds(String[] ids);
+
+    List<CmOrderProduct> findByIdsAndOrderId(@Param("ids") String[] split, @Param("orderID") Integer orderId);
+
+    List<CmOrderProduct> findByOrderIdGroupByShopId(@Param("orderID") Long orderId);
+
+    List<CmOrderProduct> findByShopIdGroupByOrderId(@Param("shopID") Integer shopId);
+
+    // 查询供应商都确认的订单商品的list
+    List<CmOrderProduct> findOrderProductGroup(@Param("shopID") Integer shopId);
+
+    int shopConfirmProduct(@Param("shopID") Integer shopId, @Param("orderID") Integer orderId);
+
+    Integer getUnCommentNum(@Param("shopOrderID") Integer shopOrderID);
+
+    List<CmOrderProduct> getOrderProductDetail(@Param("shopOrderID") Integer shopOrderID);
+
+    String getIdsByOrderID(@Param("orderID") Integer orderID);
+
+    CmOrderProduct findByOrderProductID(@Param("orderProductID") Integer orderProductID);
+
+    Integer getReturningNum(@Param("orderProductID") Integer orderProductID);
+
+    Integer getReturnedNum(@Param("orderProductID") Integer orderProductID);
+
+    Integer getCanceledNum(@Param("orderProductID") Integer orderProductID);
+
+    Integer getReceivedNum(@Param("orderProductID") Integer orderProductID);
+
+}

+ 8 - 0
src/main/java/com/caimei/mapper/products/OrganizeProductsMapper.java

@@ -1,10 +1,18 @@
 package com.caimei.mapper.products;
 
+import com.caimei.entity.CmOrderProduct;
 import com.caimei.entity.CmOrganizeProducts;
+import com.caimei.entity.Product;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface OrganizeProductsMapper {
     CmOrganizeProducts selectProductById(@Param("id") Integer id);
+
+    Product selectCmProductById(@Param("productID") Integer productID);
+
+    int insert(CmOrderProduct cmOrderProduct);
+
+    int update(CmOrderProduct cmOrderProduct);
 }

+ 200 - 7
src/main/java/com/caimei/service/order/impl/OrderServiceImpl.java

@@ -3,13 +3,16 @@ package com.caimei.service.order.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.caimei.controller.order.OrderController;
 import com.caimei.entity.*;
+import com.caimei.mapper.order.CmShopOrderMapper;
 import com.caimei.mapper.order.OrderMapper;
+import com.caimei.mapper.order.OrderProductMapper;
 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.MathUtil;
 import com.caimei.utils.NoUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -38,6 +41,10 @@ public class OrderServiceImpl implements OrderService {
     private UserMapper userMapper;
     @Autowired
     private OrganizeProductsMapper organizeProductsMapper;
+    @Autowired
+    private OrderProductMapper orderProductMapper;
+    @Autowired
+    private CmShopOrderMapper cmShopOrderMapper;
 
     @Value("${miniprogram.domain}")
     private String domain;
@@ -218,6 +225,9 @@ public class OrderServiceImpl implements OrderService {
         boolean isIncludedInstruments = false;//是否包含仪器(默认不包含仪器)
         boolean isIncludedProduct = false;//是否包含商品(默认不包含仪器)
         CmOrder cmOrder = new CmOrder();
+        List<CmOrderProduct> orderProductList = new ArrayList<>();//整理订单商品列表
+//        List<Integer> shopIDs = new ArrayList<>();//整理子订单列表
+        HashMap<Integer, String> shopIDs = new HashMap<>();
         Date date = new Date();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String dateStr = sdf.format(date);
@@ -232,11 +242,14 @@ public class OrderServiceImpl implements OrderService {
             BigDecimal payableAmount = new BigDecimal(0);//真实支付金额(订单总额减去抵扣的账户余额)
             double balancePayFee = 0d;//余额支付金额
             for (Map<String, Object> shopOrderInfo : orderInfoList) {//遍历订单商品信息
-                String shopId = (String) shopOrderInfo.get("shopId");
+                Integer shopId = (Integer) shopOrderInfo.get("shopId");
                 String note = (String) shopOrderInfo.get("note");
                 Object productInfo = shopOrderInfo.get("productInfo");//一个子订单对应的商品信息
-                if (StringUtils.isEmpty(shopId)) return wxJsonModel.error("1001", "供应商数据异常");
+                if (null == shopId) return wxJsonModel.error("1001", "供应商数据异常");
                 if (null == productInfo) return wxJsonModel.error("1001", "订单商品数据异常");
+//                shopIDs.add(shopId);
+                shopIDs.put(shopId,note);
+
                 //获取子订单商品信息
                 List<Map<String, Object>> productInfoList = (List<Map<String, Object>>) productInfo;
                 if (!CollectionUtils.isEmpty(productInfoList)) {
@@ -249,6 +262,7 @@ public class OrderServiceImpl implements OrderService {
                         CmOrganizeProducts cmOrganizeProducts = organizeProductsMapper.selectProductById(productId);
                         if (null == cmOrganizeProducts) return wxJsonModel.error("1001", "订单商品数据异常");
                         if (null == productNum || productNum == 0) return wxJsonModel.error("1001", "商品购买数量异常");
+                        Product cmProduct = organizeProductsMapper.selectCmProductById(cmOrganizeProducts.getProductID());
                         Double retailPrice = cmOrganizeProducts.getRetailPrice();//售价
                         Integer classifyID = cmOrganizeProducts.getClassifyID();
                         double productFee = retailPrice * productNum;//单个商品的金额
@@ -260,6 +274,56 @@ public class OrderServiceImpl implements OrderService {
                         if(classifyID != 3 && !isIncludedProduct){//判断是否存在商品
                             isIncludedProduct = true;
                         }
+
+                        /**整理订单商品集合数据*/
+                        CmOrderProduct cmOrderProduct = new CmOrderProduct();
+                        cmOrderProduct.setShopID(cmOrganizeProducts.getShopID());
+                        cmOrderProduct.setProductID(cmOrganizeProducts.getProductID());//此处保存采美库商品Id
+                        cmOrderProduct.setOrganizeProductID(cmOrganizeProducts.getId());
+                        cmOrderProduct.setOrganizeID(organizeID);
+                        //预留在保存保存子订单的时候添加
+//                        cmOrderProduct.setShopOrderID(0);
+//                        cmOrderProduct.setShopOrderNo("");
+                        cmOrderProduct.setProductNo(null);
+                        cmOrderProduct.setNum(productNum);
+                        cmOrderProduct.setPresentNum(0);
+                        cmOrderProduct.setPrice(retailPrice);
+                        cmOrderProduct.setProductUnit(cmProduct.getUnit());
+                        cmOrderProduct.setNormalPrice(cmOrganizeProducts.getNormalPrice());
+                        cmOrderProduct.setCostPrice(cmOrganizeProducts.getNormalPrice());
+                        cmOrderProduct.setShopProductAmount(cmOrganizeProducts.getCostPrice() * productNum);//商品费=成本价快照*(购买数量  + 赠品数量)
+                        cmOrderProduct.setPrice0(retailPrice);
+                        cmOrderProduct.setPrice1(retailPrice);
+                        cmOrderProduct.setTaxRate(0d);
+                        cmOrderProduct.setAddedValueTax(0d);
+                        cmOrderProduct.setTotalAddedValueTax(0d);
+                        cmOrderProduct.setShopFee(cmOrganizeProducts.getCostPrice() * productNum);//应付供应商=成本价 * 商品数量
+                        cmOrderProduct.setSingleShopFee(cmOrganizeProducts.getCostPrice());
+                        cmOrderProduct.setOtherFee(0d);
+                        cmOrderProduct.setSingleOtherFee(0d);
+                        cmOrderProduct.setCmFee((cmOrganizeProducts.getRetailPrice() * productNum) - (cmOrganizeProducts.getCostPrice() * productNum));//应付采美=应付金额(应收金额)-应付供应商-应付第三方0-税费0)
+                        cmOrderProduct.setSingleCmFee(cmOrganizeProducts.getRetailPrice() - cmOrganizeProducts.getCostPrice());
+                        cmOrderProduct.setTotalAmount(cmOrganizeProducts.getRetailPrice() * productNum);
+                        cmOrderProduct.setTotalFee(cmOrganizeProducts.getRetailPrice() * productNum);
+                        cmOrderProduct.setTotalBeans(0d);
+                        cmOrderProduct.setUseBalanceAmount(0d);
+                        cmOrderProduct.setDiscountFee(0D);//经理折扣 优惠金额
+                        cmOrderProduct.setPreferential(0d);//优惠金额
+                        cmOrderProduct.setUseBalanceAmount(0d);
+                        cmOrderProduct.setConfirmProductFlag("0");//订单商品供应商确认标志 0否 1是
+                        cmOrderProduct.setDiscount(100d);
+                        cmOrderProduct.setDiscountPrice(cmOrganizeProducts.getRetailPrice());
+                        cmOrderProduct.setShopName(cmOrganizeProducts.getShopName());
+                        cmOrderProduct.setName(cmProduct.getName());
+                        cmOrderProduct.setPayStatus("0");
+                        cmOrderProduct.setBuyAgainFlag("0");
+                        cmOrderProduct.setNotOutStore(productNum); // 未出库数量
+                        cmOrderProduct.setCommentFlag("0");//是否已评论 1 是 0 未评论
+                        cmOrderProduct.setActPreferential(0d);
+                        cmOrderProduct.setActType(null);
+                        cmOrderProduct.setIsActProduct("0");//非活动商品
+                        cmOrderProduct.setProductImage(AppUtils.getImageURL("product", cmProduct.getMainImage(), 0, domain));
+                        orderProductList.add(cmOrderProduct);
                     }
                 }
             }
@@ -287,11 +351,13 @@ public class OrderServiceImpl implements OrderService {
             cmOrder.setPayFlag("0");//是否已支付 未支付0 已支付1(设置初始化状态)
 
             /**判断余额使用*/
+            boolean useBalanceFlag = false;//默认不适用余额
             if (StringUtils.equals("1", balanceDeductionFlag)) {//勾选余额抵扣
                 //获取用户最新余额
                 Double userMoney = personalMapper.ableUserMoney(userId);
                 logger.info(">>>>>" + userId + "userMoney:" + userMoney);
                 if (null != userMoney || 0 != userMoney) {
+                    useBalanceFlag = true;
                     BigDecimal bdUserMoney = new BigDecimal(userMoney);
                     if (payTotalFee > userMoney) {//部分抵扣
                         balancePayFee = userMoney;
@@ -322,6 +388,7 @@ public class OrderServiceImpl implements OrderService {
                         cmOrder.setPayFlag("1");
                     }
                     cmOrder.setPayTime(dateStr);//支付时间
+
                 }
             }
 
@@ -334,7 +401,8 @@ public class OrderServiceImpl implements OrderService {
             }
 
             /**初始化主订单参数*/
-            cmOrder.setOrderNo(NoUtils.getCmOrderNo("X"));
+            String orderNo = NoUtils.getCmOrderNo("X");
+            cmOrder.setOrderNo(orderNo);
             cmOrder.setOrganizeID(organizeID);
             cmOrder.setUserID(userId);
             cmOrder.setBuyUserID(cmOperationID);//操作者的ID(下单人)
@@ -368,13 +436,139 @@ public class OrderServiceImpl implements OrderService {
             cmOrder.setPayStatus("1");//(付款供应商)付款状态:1待付款、2部分付款、3已付款
             cmOrder.setOnlinePayFlag("0");//是否能走线上支付 0可以 1不可以 只能线下
 
-            cmOrder.setShopOrderIDs("");//子订单ID
+            //保存住订单数据
+            orderMapper.insert(cmOrder);
+            Integer orderID = cmOrder.getOrderID();
+            logger.info(">>>>>orderID:"+orderID);
+
+            if(useBalanceFlag){
+                /**添加余额收支记录*/
+                CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
+                cmUserBalanceRecord.setUserId(userId);
+                cmUserBalanceRecord.setType("2");
+                cmUserBalanceRecord.setBalanceType("1");
+                cmUserBalanceRecord.setAddDate(new Date());
+                cmUserBalanceRecord.setAmount(String.valueOf(balancePayFee));
+                cmUserBalanceRecord.setOrderId(cmOrder.getOrderID());
+                cmUserBalanceRecord.setDelFlag("0");
+                userMapper.insertUserBalanceRecord(cmUserBalanceRecord);
+            }
+
 
 
+            /**保存子订单后更新主订单信息*/
+            cmOrder.setShopOrderIDs("");//子订单ID:1000,1002
+
+            /**保存订单商品*/
+            for(CmOrderProduct product:orderProductList){//循环插入数据
+                product.setOrderID(orderID);
+                product.setOrderNo(orderNo);
+                //保存订单商品数据
+                organizeProductsMapper.insert(product);
+            }
 
-            //保存子订单
+            String shopOrderIDs = "";//收集子订单信息
+            /**保存子订单*/
+            Iterator<Map.Entry<Integer, String>> iterator = shopIDs.entrySet().iterator();
+            while (iterator.hasNext()) {
+                Map.Entry<Integer, String> shopOrder = iterator.next();
+                Integer shopID = shopOrder.getKey();
+                String note = shopOrder.getValue();
 
-            //保存订单商品
+
+                /**统计子订单金额信息*/
+                CmOrderProduct cmOrderProduct = new CmOrderProduct();
+                cmOrderProduct.setOrderID(cmOrder.getOrderID());
+                cmOrderProduct.setShopID(shopID);
+                //查询属于该供应商的所有订单商品信息
+                List<CmOrderProduct> cmOrderProductList = orderProductMapper.findList(cmOrderProduct);
+                BigDecimal totalAmount = new BigDecimal(0); // 订单总金额
+                BigDecimal productAmount = new BigDecimal(0); //商品总金额
+                BigDecimal needPayAmount = new BigDecimal(0);//需要支付金额
+                BigDecimal preferential = new BigDecimal(0);// 优惠金额
+                BigDecimal fee = new BigDecimal(0);//运费
+                BigDecimal brokerage = new BigDecimal(0);//佣金
+                Double shopProductAmount = 0D;//商品费
+                Double shopTaxFee = 0D; //付给供应商税费
+                Integer itemCount = 0;//总数
+                Integer buyNum = 0;//总购买数
+                Integer presentNum = 0;//总赠送数
+                //计算子订单信息
+                for (CmOrderProduct orderProduct : cmOrderProductList) {
+                    productAmount = MathUtil.add(productAmount, orderProduct.getTotalAmount());//商品总金额 包括赠品
+                    totalAmount = MathUtil.add(totalAmount, orderProduct.getTotalFee());//订单总金额 包括税费
+                    needPayAmount = MathUtil.add(needPayAmount, orderProduct.getShouldPayFee()); //应付金额
+                    buyNum += orderProduct.getNum();//总购买数
+                    itemCount += (orderProduct.getNum() + orderProduct.getPresentNum());
+                    preferential = MathUtil.add(preferential, orderProduct.getPreferential());
+                    brokerage = MathUtil.add(brokerage, orderProduct.getCmFee());
+                    shopProductAmount += (orderProduct.getShopProductAmount() == null ? 0D : orderProduct.getShopProductAmount());
+                }
+
+                //初始化子订单信息
+                CmShopOrder cmShopOrder = new CmShopOrder();
+                cmShopOrder.setClubID(clubID);
+                cmShopOrder.setSpID(null);
+                cmShopOrder.setMainSpID(null);
+                cmShopOrder.setOrderID(orderID);
+                cmShopOrder.setOrderNo(orderNo);
+                cmShopOrder.setUserID(userId);
+                cmShopOrder.setNote(note);
+                cmShopOrder.setOrderTime(dateStr);
+                cmShopOrder.setDiscountFee(0d);
+                cmShopOrder.setCanRefundFlag(1);
+                cmShopOrder.setCanRefundAmount(needPayAmount.doubleValue());
+                cmShopOrder.setAccountAmount(0d);
+                cmShopOrder.setBrokerage(brokerage.doubleValue());//佣金 采美应收
+                cmShopOrder.setBuyStatus("1");
+                cmShopOrder.setPresentNum(0);
+                cmShopOrder.setUseBeanFlag(0);
+                cmShopOrder.setUseBeanAmount(0);
+                cmShopOrder.setUseBalanceFlag(0);
+                cmShopOrder.setRefundStatus(0);
+                cmShopOrder.setRefundsAmount(0d);
+                cmShopOrder.setPayStatus("1");
+                cmShopOrder.setSendOutStatus("1");
+                cmShopOrder.setPayFlag("0");
+                cmShopOrder.setOrderStatusFlag("1");
+                cmShopOrder.setDelFlag("0");
+                cmShopOrder.setItemCount(buyNum);//购买商品数
+                cmShopOrder.setPresentNum(0);//赠送数
+                cmShopOrder.setShopID(shopID);
+                cmShopOrder.setOrderType(1);
+                cmShopOrder.setOrderSubmitType(cmOrder.getOrderSubmitType());
+                cmShopOrder.setTotalAmount(totalAmount.doubleValue());
+                cmShopOrder.setProductAmount(productAmount.doubleValue());
+                cmShopOrder.setNeedPayAmount(needPayAmount.doubleValue());
+                cmShopOrder.setPreferential(preferential.doubleValue());
+                cmShopOrder.setShopProductAmount(shopProductAmount);
+                cmShopOrder.setShopPostFee(0D);//付给供应商运费
+                cmShopOrder.setShopTaxFee(0D);//付给供应商税费
+                cmShopOrder.setPayedShopAmount(0D);//已付款金额
+                cmShopOrder.setShopOtherFee(0D);//付第三方
+                cmShopOrder.setSplitFlag("0");
+
+                List<CmShopOrder> cmShopOrders1 = cmShopOrderMapper.findMaxShopOrderNo(cmOrder.getOrderID());
+                String shopOrderNo = ""; //子订单编号
+                if (!CollectionUtils.isEmpty(cmShopOrders1)) {
+                    shopOrderNo = cmShopOrders1.get(0).getShopOrderNo();
+                    cmShopOrder.setShopOrderNo(NoUtils.getCmShopOrderNo(cmOrder.getOrderNo(), Integer.parseInt(shopOrderNo.substring(shopOrderNo.length() - 2, shopOrderNo.length())) + 1));
+                } else {
+                    cmShopOrder.setShopOrderNo(NoUtils.getCmShopOrderNo(cmOrder.getOrderNo(), 1));
+                }
+                //保存子订单信息到数据库
+                cmShopOrderMapper.insert(cmShopOrder);
+                shopOrderIDs += ((shopOrderIDs.equals("") ? "" : ",") + cmShopOrder.getShopOrderID());
+                for (CmOrderProduct orderProduct : cmOrderProductList) {
+                    orderProduct.setShopOrderID(cmShopOrder.getShopOrderID());
+                    orderProduct.setShopOrderNo(cmShopOrder.getShopOrderNo());
+                    orderProductMapper.update(orderProduct);
+                }
+            }
+
+            //更新主订单信息
+            cmOrder.setShopOrderIDs(shopOrderIDs);
+            orderMapper.update(cmOrder);
 
             //地址信息
 
@@ -386,7 +580,6 @@ public class OrderServiceImpl implements OrderService {
             if (StringUtils.equals("1", cartType)) {//购物车提交后清理购物车
 
             }
-
         }
 
         return wxJsonModel.success();

+ 360 - 0
src/main/java/com/caimei/utils/MathUtil.java

@@ -0,0 +1,360 @@
+package com.caimei.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+public class MathUtil {
+
+
+
+	public static int default_scale = 4;
+
+	private static final int MAX_GENERATE_COUNT = 99999;
+	private static int generateCount = 0;
+
+
+	/**
+	 * 两个实数相除,默认四舍五入到4位
+	 *
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal div(Object v1, Object v2) {
+		return div(v1, v2, default_scale);
+	}
+
+	/**
+	 * 两个实数相除,默认四舍五入到scale位
+	 *
+	 * @param v1
+	 * @param v2
+	 * @param scale
+	 * @return
+	 */
+	public static BigDecimal div(Object v1, Object v2, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("四舍五入的位数不能为负数");
+		}
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		if (equal0(b2)) {
+			throw new IllegalArgumentException("除数不能为0");
+		}
+		return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
+	}
+
+	public static String formatDouble(double s) {
+		DecimalFormat fmt = new DecimalFormat("0.00");
+		return fmt.format(s);
+	}
+
+	public static String[] intersect(String[] arr1, String[] arr2){
+		List<String> l = new LinkedList<String>();
+		Set<String> common = new HashSet<String>();
+		for(String str:arr1){
+			if(!l.contains(str)){
+				l.add(str);
+			}
+		}
+		for(String str:arr2){
+			if(l.contains(str)){
+				common.add(str);
+			}
+		}
+		String[] result={};
+		return common.toArray(result);
+	}
+
+
+	public static synchronized String getUniqueString() {
+		if (generateCount > 99999)
+			generateCount = 0;
+		String uniqueNumber = Long.toString(System.currentTimeMillis())
+				+ Integer.toString(generateCount);
+		generateCount++;
+		return uniqueNumber;
+	}
+
+	/**
+	 * 
+	 * 构造函数
+	 */
+	private MathUtil() {
+
+	}
+
+	/**
+	 * 类型转换函数
+	 * 
+	 * @param o
+	 * @return
+	 */
+	public static BigDecimal convert(Object o) {
+		if (o == null) {
+			return BigDecimal.ZERO;
+		} else if (o instanceof BigDecimal) {
+			return (BigDecimal) o;
+		}
+		String str = o.toString();
+		if (StringUtils.isNotBlank(str)) {
+			return new BigDecimal(str);
+		} else {
+			return BigDecimal.ZERO;
+		}
+	}
+
+	/**
+	 * 两个实数相加
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal add(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.add(b2);
+
+	}
+
+	/**
+	 * 两个实数相减
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal sub(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.subtract(b2);
+
+	}
+
+	/**
+	 * 两个实数相乘
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal mul(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.multiply(b2);
+
+	}
+
+	/**
+	 * 相个实数相乘并四舍五入到Sacle位
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @param scale
+	 * @return
+	 */
+	public static BigDecimal mul(Object v1, Object v2, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("四舍五入的位数不能为负数");
+		}
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP);
+
+	}
+
+	/**
+	 * 两个实数比较
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static int compare(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.compareTo(b2);
+	}
+
+	public static boolean equal0(Object v1) {
+		BigDecimal b1 = convert(v1);
+		return b1.compareTo(BigDecimal.ZERO) == 0;
+	}
+
+	public static boolean notEqual0(Object v1) {
+		BigDecimal b1 = convert(v1);
+		return b1.compareTo(BigDecimal.ZERO) != 0;
+	}
+
+	/**
+	 * 两个整数比较
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static int compareInt(Integer v1, Integer v2) {
+
+		if (v1 == null) {
+			v1 = new Integer(0);
+		}
+		if (v2 == null) {
+			v2 = new Integer(0);
+		}
+		return v1.compareTo(v2);
+	}
+
+	/**
+	 * 判断两个整数是否相等
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static boolean equal(Integer v1, Integer v2) {
+
+		int result = compareInt(v1, v2);
+		return result == 0;
+	}
+
+	/**
+	 * 判断两个整数不等
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static boolean notEqual(Integer v1, Integer v2) {
+		int result = compareInt(v1, v2);
+		return result != 0;
+	}
+
+	/**
+	 * 实数的四舍五入函数
+	 * 
+	 * @param v
+	 * @param scale
+	 * @return
+	 */
+	public static BigDecimal round(Object v, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("四舍五入的位数不能为负数");
+		}
+		BigDecimal b = convert(v);
+		return b.setScale(scale, BigDecimal.ROUND_HALF_UP);
+	}
+
+	/**
+	 * 将字符串转换成整型
+	 * 
+	 * @param value
+	 * @param defaultNum
+	 * @return
+	 */
+	public static int parsetInt(String value, int defaultNum) {
+		if (value != null && !value.equals("")) {
+			int num = defaultNum;
+			try {
+				num = Integer.parseInt(value);
+			} catch (Exception ignored) {
+			}
+			return num;
+		} else {
+			return defaultNum;
+		}
+	}
+
+	/**
+	 * 将string转换为double
+	 * 
+	 * @param value
+	 * @param defaultNum
+	 * @return
+	 */
+	public static double parseDouble(String value, double defaultNum) {
+		if (StringUtils.isBlank(value)) {
+			return defaultNum;
+		}
+
+		value = value.replaceAll(",", "");
+		value = value.replaceAll(" ", "");
+		value = value.replaceAll("¥", "");
+
+		double num = defaultNum;
+		try {
+			num = Double.parseDouble(value);
+		} catch (Exception ignored) {
+		}
+		return num;
+	}
+
+	/**
+	 * 将string 转换为double
+	 * 
+	 * @param value
+	 * @return
+	 */
+	public static double parseDouble(String value) {
+		return parseDouble(value, 0);
+	}
+
+	public static int isNullInteger(Integer v) {
+		if (v == null) {
+			return 0;
+		} else {
+			return v.intValue();
+		}
+	}
+	
+	//
+	private static double EARTH_RADIUS = 6378.137;
+
+	private static double rad(double d) {
+
+		return d * Math.PI / 180.0;
+
+	}
+
+	public static double getDistance(double lat1, double lng1, double lat2,
+
+	double lng2) {
+
+		double radLat1 = rad(lat1);
+
+		double radLat2 = rad(lat2);
+
+		double a = radLat1 - radLat2;
+
+		double b = rad(lng1) - rad(lng2);
+
+		double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+
+		+ Math.cos(radLat1) * Math.cos(radLat2)
+
+		* Math.pow(Math.sin(b / 2), 2)));
+
+		s = s * EARTH_RADIUS;
+
+		s = Math.round(s * 10000) / 10000;
+
+		return s;
+
+	}
+	
+	public static void main(String[] args){
+		double lat1=118.105736;
+		double lng1=24.491558;
+		double lat2=118.110749;
+		double lng2=24.492824;
+		double t=getDistance(lat1,lng1,lat2,lng2);
+		System.out.println(t);
+	}
+
+}

+ 603 - 0
src/main/resources/mapper/CmShopOrderMapper.xml

@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei.mapper.order.CmShopOrderMapper">
+    
+	<sql id="cmShopOrderColumns">
+		a.shopOrderID AS "shopOrderID",
+		a.shopOrderNo AS "shopOrderNo",
+		a.orderNo AS "orderNo",
+		a.orderID AS "orderID",
+		a.userID AS "userID",
+		a.shopID AS "shopID",
+		a.orderSubmitType AS "orderSubmitType",
+		a.orderType AS "orderType",
+		a.itemCount AS "itemCount",
+		a.presentNum AS "presentNum",
+		IFNULL(a.outStoreNum, 0) AS "outStoreNum",
+		IFNULL(a.outStoreTimes, 0) AS "outStoreTimes",
+		a.townID AS "townID",
+		a.note AS "note",
+		a.productAmount AS "productAmount",
+		a.fee AS "fee",
+		a.preferential AS preferential,
+		a.discountFee AS "discountFee",
+		a.accountAmount AS "accountAmount",
+		a.totalAmount AS "totalAmount",
+		a.payFlag AS "payFlag",
+		a.orderTime AS "orderTime",
+		a.payTime AS "payTime",
+		a.finishTime AS "finishTime",
+		a.status AS "status",
+		a.refundStatus AS "refundStatus",
+		a.receiveGoodsTime AS "receiveGoodsTime",
+		a.deliveryTimeMills AS "deliveryTimeMills",
+		a.needPayAmount AS "needPayAmount",
+		a.canRefundAmount AS "canRefundAmount",
+		a.refundAmount AS "refundAmount",
+		a.clubID AS "clubID",
+		a.spID AS "spID",
+		a.mainSpID AS "mainSpID",
+		a.orderBeanAmount AS "orderBeanAmount",
+		a.useBeanAmount AS "useBeanAmount",
+		a.useBeanFlag AS "useBeanFlag",
+		a.canRefundFlag AS "canRefundFlag",
+		a.useBalanceFlag AS "useBalanceFlag",
+		a.canRefundBeans AS "canRefundBeans",
+		a.orderDeliveryID AS "orderDeliveryID",
+		a.freePostageFee AS "freePostageFee",
+		a.freePostageTicketID AS "freePostageTicketID",
+		a.totalAddedValueTax AS  "totalAddedValueTax",
+		a.brokerage AS "brokerage",
+		a.delFlag AS "delFlag",
+		a.refundsAmount AS "refundsAmount",
+		a.orderStatusFlag AS "orderStatusFlag",
+		a.buyStatus AS "buyStatus",
+		a.returnGoodsStatus AS "returnGoodsStatus",
+		a.autoReceiveTimeMills AS "autoReceiveTimeMills",
+		a.autoOverTimeMills AS "autoOverTimeMills",
+		a.splitFlag AS "splitFlag",
+		a.payStatus AS "payStatus",
+		a.sendOutStatus AS "sendOutStatus",
+		(SELECT name FROM shop s WHERE s.shopID = a.shopID) AS "shopName",
+		(SELECT IFNULL(SUM(totalAddedValueTax),0) FROM cm_order_product cop WHERE cop.shopOrderID = a.shopOrderID) AS "totalAddedValueTax"
+	</sql>
+	
+	<sql id="cmShopOrderJoins">
+	</sql>
+    
+	<select id="get" resultType="com.caimei.mapper.order.CmShopOrderMapper">
+		SELECT
+			<include refid="cmShopOrderColumns"/>
+		FROM cm_shop_order a
+		<include refid="cmShopOrderJoins"/>
+		WHERE a.shopOrderID = #{shopOrderID} AND a.delFlag = '0'
+	</select>
+
+	<select id="findList" resultType="com.caimei.mapper.order.CmShopOrderMapper">
+		SELECT
+			<include refid="cmShopOrderColumns"/>
+		FROM cm_shop_order a
+		<include refid="cmShopOrderJoins"/>
+		<where>
+			<if test="shopOrderID != null and shopOrderID != ''">
+				AND a.shopOrderID = #{shopOrderID}
+			</if>
+			<if test="shopOrderNo != null and shopOrderNo != ''">
+				AND a.shopOrderNo = #{shopOrderNo}
+			</if>
+			<if test="orderNo != null and orderNo != ''">
+				AND a.orderNo = #{orderNo}
+			</if>
+			<if test="orderID != null and orderID != ''">
+				AND a.orderID = #{orderID}
+			</if>
+			<if test="userID != null and userID != ''">
+				AND a.userID = #{userID}
+			</if>
+			<if test="shopID != null and shopID != ''">
+				AND a.shopID = #{shopID}
+			</if>
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+			<if test="clubID != null and clubID != ''">
+				AND a.clubID = #{clubID}
+			</if>
+			<if test="buyStatus != null and buyStatus != ''">
+				AND a.buyStatus = #{buyStatus}
+			</if>
+			AND a.delFlag = '0'
+		</where>
+			  ORDER BY a.shopOrderID DESC
+	</select>
+
+	<select id="findAllList" resultType="com.caimei.mapper.order.CmShopOrderMapper">
+		SELECT 
+			<include refid="cmShopOrderColumns"/>
+		FROM cm_shop_order a
+		<include refid="cmShopOrderJoins"/>
+		<where>
+			
+		</where>
+		AND a.delFlag = '0'
+		ORDER BY a.shopOrderID DESC
+	</select>
+	
+	<insert id="insert" parameterType="com.caimei.entity.CmShopOrder"  keyProperty="shopOrderID" useGeneratedKeys="true">
+		INSERT INTO cm_shop_order(
+			shopOrderNo,
+			orderNo,
+			orderID,
+			userID,
+			shopID,
+			itemCount,
+			presentNum,
+			townID,
+			orderType,
+			orderSubmitType,
+			productAmount,
+			fee,
+			discountFee,
+			preferential,
+			accountAmount,
+			totalAmount,
+			payFlag,
+			orderTime,
+			payTime,
+			finishTime,
+			status,
+			refundStatus,
+			receiveGoodsTime,
+			deliveryTimeMills,
+			needPayAmount,
+			canRefundAmount,
+			refundAmount,
+			clubID,
+			spID,
+			mainSpID,
+			orderBeanAmount,
+			useBeanAmount,
+			useBeanFlag,
+			canRefundFlag,
+			useBalanceFlag,
+			canRefundBeans,
+			orderDeliveryID,
+			freePostageFee,
+			freePostageTicketID,
+			brokerage,
+			delFlag,
+			refundsAmount,
+			orderStatusFlag,
+			buyStatus,
+			autoReceiveTimeMills,
+			autoOverTimeMills,
+			totalAddedValueTax,
+			splitFlag,
+			outStoreNum,
+			outStoreTimes,
+			note,
+			returnGoodsStatus,
+			sendOutStatus,
+			payStatus
+		) VALUES (
+			#{shopOrderNo},
+			#{orderNo},
+			#{orderID},
+			#{userID},
+			#{shopID},
+			#{itemCount},
+			#{presentNum},
+			#{townID},
+			#{orderType},
+			#{orderSubmitType},
+			#{productAmount},
+			#{fee},
+			#{discountFee},
+			#{preferential},
+			#{accountAmount},
+			#{totalAmount},
+			#{payFlag},
+			#{orderTime},
+			#{payTime},
+			#{finishTime},
+			#{status},
+			#{refundStatus},
+			#{receiveGoodsTime},
+			#{deliveryTimeMills},
+			#{needPayAmount},
+			#{canRefundAmount},
+			#{refundAmount},
+			#{clubID},
+			#{spID},
+			#{mainSpID},
+			#{orderBeanAmount},
+			#{useBeanAmount},
+			#{useBeanFlag},
+			#{canRefundFlag},
+			#{useBalanceFlag},
+			#{canRefundBeans},
+			#{orderDeliveryID},
+			#{freePostageFee},
+			#{freePostageTicketID},
+			#{brokerage},
+			#{delFlag},
+			#{refundsAmount},
+			#{orderStatusFlag},
+			#{buyStatus},
+			#{autoReceiveTimeMills},
+			#{autoOverTimeMills},
+			#{totalAddedValueTax},
+			#{splitFlag},
+			#{outStoreNum},
+			#{outStoreTimes},
+			#{note},
+			#{returnGoodsStatus},
+			#{sendOutStatus},
+			#{payStatus}
+		)
+	</insert>
+	
+	<update id="update">
+		UPDATE cm_shop_order SET 	
+			shopOrderNo = #{shopOrderNo},
+			orderNo = #{orderNo},
+			orderID = #{orderID},
+			userID = #{userID},
+			shopID = #{shopID},
+			itemCount = #{itemCount},
+			presentNum = #{presentNum},
+			outStoreNum = #{outStoreNum},
+			outStoreTimes = #{outStoreTimes},
+			townID = #{townID},
+			orderType =#{orderType},
+			orderSubmitType =#{orderSubmitType},
+			productAmount = #{productAmount},
+			fee = #{fee},
+			discountFee = #{discountFee},
+			preferential = #{preferential},
+			accountAmount = #{accountAmount},
+			totalAmount = #{totalAmount},
+			payFlag = #{payFlag},
+			orderTime = #{orderTime},
+			payTime = #{payTime},
+			finishTime = #{finishTime},
+			status = #{status},
+			refundStatus = #{refundStatus},
+			receiveGoodsTime = #{receiveGoodsTime},
+			deliveryTimeMills = #{deliveryTimeMills},
+			needPayAmount = #{needPayAmount},
+			canRefundAmount = #{canRefundAmount},
+			refundAmount = #{refundAmount},
+			clubID = #{clubID},
+			spID = #{spID},
+			mainSpID = #{mainSpID},
+			orderBeanAmount = #{orderBeanAmount},
+			useBeanAmount = #{useBeanAmount},
+			useBeanFlag = #{useBeanFlag},
+			canRefundFlag = #{canRefundFlag},
+			useBalanceFlag = #{useBalanceFlag},
+			canRefundBeans = #{canRefundBeans},
+			orderDeliveryID = #{orderDeliveryID},
+			freePostageFee = #{freePostageFee},
+			freePostageTicketID = #{freePostageTicketID},
+			brokerage = #{brokerage},
+			delFlag = #{delFlag},
+			refundsAmount = #{refundsAmount},
+			orderStatusFlag = #{orderStatusFlag},
+			buyStatus = #{buyStatus},
+			autoReceiveTimeMills = #{autoReceiveTimeMills},
+			autoOverTimeMills = #{autoOverTimeMills},
+			totalAddedValueTax = #{totalAddedValueTax},
+			splitFlag = #{splitFlag},
+			note = #{note},
+			returnGoodsStatus = #{returnGoodsStatus},
+			payStatus = #{payStatus},
+			sendOutStatus = #{sendOutStatus}
+		WHERE shopOrderID = #{shopOrderID}
+	</update>
+	
+	<delete id="delete">
+		DELETE FROM cm_shop_order
+		WHERE shopOrderID = #{shopOrderID}
+	</delete>
+
+	<select id="listShopOrderByIDs" parameterType="String" resultType="com.caimei.mapper.order.CmShopOrderMapper">
+		SELECT * FROM cm_shop_order WHERE shopOrderID IN (#{shopOrderIDs})
+	</select>
+
+	<update id="updateOrderOwner" parameterType="Map">
+		UPDATE cm_shop_order
+		<set>
+			<if test="newUserId != null and newUserId != ''">
+				userID = #{newUserId},
+			</if>
+			<if test="clubId != null and clubId != ''">
+				clubID = #{clubId},
+			</if>
+			<if test="spID != null and spID != ''">
+				spID = #{spID},
+			</if>
+			<if test="mainSpID != null and mainSpID != ''">
+				mainSpID = #{mainSpID}
+			</if>
+		</set>
+		WHERE userId = #{oldUserId}
+	</update>
+
+	<update id="updateRefundsInfo">
+		UPDATE cm_shop_order
+		<set>
+			<if test="orderStatusFlag != null and orderStatusFlag != ''">
+				orderStatusFlag = #{orderStatusFlag}
+			</if>
+		</set>
+		WHERE shopOrderID = #{shopOrderID}
+	</update>
+
+	<select id="findByShopID" resultType="com.caimei.mapper.order.CmShopOrderMapper">
+		SELECT * FROM  cm_shop_order WHERE orderID = #{orderID} AND shopID = #{shopID}
+	</select>
+
+	<select id="findMaxShopOrderNo" resultType="com.caimei.mapper.order.CmShopOrderMapper">
+		SELECT * FROM  cm_shop_order WHERE orderID = #{orderID} ORDER BY shopOrderNo DESC
+	</select>
+
+	<insert id="insertCmShopOrder" parameterType="com.caimei.entity.CmShopOrder" >
+		INSERT INTO cm_shop_order(
+		shopOrderID,
+		shopOrderNo,
+		orderNo,
+		orderID,
+		userID,
+		shopID,
+		itemCount,
+		presentNum,
+		outStoreNum,
+		outStoreTimes,
+		townID,
+		orderType,
+		orderSubmitType,
+		productAmount,
+		fee,
+		discountFee,
+		preferential,
+		accountAmount,
+		totalAmount,
+		payFlag,
+		orderTime,
+		payTime,
+		finishTime,
+		status,
+		refundStatus,
+		receiveGoodsTime,
+		deliveryTimeMills,
+		needPayAmount,
+		canRefundAmount,
+		refundAmount,
+		clubID,
+		spID,
+		mainSpID,
+		orderBeanAmount,
+		useBeanAmount,
+		useBeanFlag,
+		canRefundFlag,
+		useBalanceFlag,
+		canRefundBeans,
+		orderDeliveryID,
+		freePostageFee,
+		freePostageTicketID,
+		brokerage,
+		delFlag,
+		refundsAmount,
+		orderStatusFlag,
+		buyStatus,
+		autoReceiveTimeMills,
+		autoOverTimeMills,
+		totalAddedValueTax,
+		splitFlag,
+		note,
+		returnGoodsStatus
+		) VALUES (
+		#{shopOrderID},
+		#{shopOrderNo},
+		#{orderNo},
+		#{orderID},
+		#{userID},
+		#{shopID},
+		#{itemCount},
+		#{presentNum},
+		#{outStoreNum},
+		#{outStoreTimes},
+		#{townID},
+		#{orderType},
+		#{orderSubmitType},
+		#{productAmount},
+		#{fee},
+		#{discountFee},
+		#{preferential},
+		#{accountAmount},
+		#{totalAmount},
+		#{payFlag},
+		#{orderTime},
+		#{payTime},
+		#{finishTime},
+		#{status},
+		#{refundStatus},
+		#{receiveGoodsTime},
+		#{deliveryTimeMills},
+		#{needPayAmount},
+		#{canRefundAmount},
+		#{refundAmount},
+		#{clubID},
+		#{spID},
+		#{mainSpID},
+		#{orderBeanAmount},
+		#{useBeanAmount},
+		#{useBeanFlag},
+		#{canRefundFlag},
+		#{useBalanceFlag},
+		#{canRefundBeans},
+		#{orderDeliveryID},
+		#{freePostageFee},
+		#{freePostageTicketID},
+		#{brokerage},
+		#{delFlag},
+		#{refundsAmount},
+		#{orderStatusFlag},
+		#{buyStatus},
+		#{autoReceiveTimeMills},
+		#{autoOverTimeMills},
+		#{totalAddedValueTax},
+		#{splitFlag},
+		#{note},
+		#{returnGoodsStatus}
+		)
+	</insert>
+	
+	<select id="countSupplierOrders" parameterType="int" resultType="map">
+		select  `status` AS "status", count(`status`) "num"
+		from cm_shop_order where shopID = #{shopID} GROUP BY `status`;
+	</select>
+
+	<select id="salesRanking" parameterType="int" resultType="map">
+		SELECT
+		  productID,
+		  SUM(num) total
+		FROM
+		  cm_order_product cop
+		  JOIN cm_order co ON co.orderID = cop.orderID
+		WHERE
+		  cop.shopID = #{shopID}
+		  AND co.STATUS NOT IN ('0', '6', '7')
+		  AND co.delFlag = '0'
+		GROUP BY
+		  productID
+		ORDER BY
+		  total DESC
+		LIMIT
+		  5;
+	</select>
+
+	<select id="salesStatistics" resultType="map">
+		SELECT COUNT(DISTINCT so.shopOrderID) AS orderQuantity,
+		IFNULL( SUM(o.productTotalFee),0) AS orderAmount
+		FROM cm_order o JOIN cm_shop_order so ON o.orderID = so.orderID
+		WHERE
+		o.status NOT IN('0','6','7')
+		AND o.delFlag = '0'
+		AND so.delFlag='0'
+		AND so.shopID = #{shopID}
+		<if test="startTime != null and startTime != ''">
+			AND o.orderTime <![CDATA[  >=  ]]> #{startTime}
+		</if>
+		<if test="endTime != null and endTime != ''">
+			AND o.orderTime <![CDATA[   <=  ]]> #{endTime}
+		</if>
+	</select>
+
+	<insert id="shopOrderBak" parameterType="com.caimei.entity.CmShopOrder"  keyProperty="shopOrderBakID" useGeneratedKeys="true">
+		INSERT INTO cm_shop_order_bak(
+			orderID,
+			shopOrderNo,
+			orderNo,
+			userID,
+			shopID,
+			itemCount,
+			townID,
+			productAmount,
+			fee,
+			discountAmount,
+			accountAmount,
+			totalAmount,
+			payFlag,
+			payTime,
+			finishTime,
+			status,
+			refundStatus,
+			needPayAmount,
+			canRefundAmount,
+			refundAmount,
+			clubID,
+			spID,
+			mainSpID,
+			orderBeanAmount,
+			useBeanAmount,
+			useBeanFlag,
+			canRefundFlag,
+			useBalanceFlag,
+			canRefundBeans,
+			freePostageFee,
+			freePostageTicketID,
+			brokerage,
+			delFlag,
+			refundsAmount,
+			orderStatusFlag,
+			buyStatus,
+			orderSubmitType,
+			orderType,
+			orderTime,
+			deliveryTimeMills,
+			presentNum,
+			preferential
+		) VALUES (
+			#{orderID},
+			#{shopOrderNo},
+			#{orderNo},
+			#{userID},
+			#{shopID},
+			#{itemCount},
+			#{townID},
+			#{productAmount},
+			#{fee},
+			#{discountAmount},
+			#{accountAmount},
+			#{totalAmount},
+			#{payFlag},
+			#{payTime},
+			#{finishTime},
+			#{status},
+			#{refundStatus},
+			#{needPayAmount},
+			#{canRefundAmount},
+			#{refundAmount},
+			#{clubID},
+			#{spID},
+			#{mainSpID},
+			#{orderBeanAmount},
+			#{useBeanAmount},
+			#{useBeanFlag},
+			#{canRefundFlag},
+			#{useBalanceFlag},
+			#{canRefundBeans},
+			#{freePostageFee},
+			#{freePostageTicketID},
+			#{brokerage},
+			#{delFlag},
+			#{refundsAmount},
+			#{orderStatusFlag},
+			#{buyStatus},
+			#{orderSubmitType},
+			#{orderType},
+			#{orderTime},
+			#{deliveryTimeMills},
+			#{presentNum},
+			#{preferential}
+		)
+	</insert>
+
+	<select id="findListByOrderID" resultType="com.caimei.entity.CmShopOrder">
+		SELECT <include refid="cmShopOrderColumns"/>
+		FROM cm_shop_order a
+		WHERE a.orderID = #{orderID} ORDER BY a.shopOrderNo DESC
+	</select>
+
+	<select id="findTotalTaxByOrderID" resultType="Double">
+		SELECT sum(a.totalAddedValueTax)
+		FROM cm_shop_order a
+		WHERE a.orderID = #{orderID} ORDER BY a.shopOrderNo DESC
+	</select>
+
+    <select id="getShopOrderBak" resultType="integer">
+        select shopOrderBakID from cm_shop_order_bak where shopOrderNo = #{shopOrderNo}
+    </select>
+</mapper>

+ 150 - 0
src/main/resources/mapper/OrderMapper.xml

@@ -3,6 +3,156 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei.mapper.order.OrderMapper">
+
+    <insert id="insert" parameterType="com.caimei.entity.CmOrder"  keyProperty="orderID" useGeneratedKeys="true">
+        INSERT INTO cm_order(
+        orderNo,
+        organizeID,
+        userID,
+        buyUserID,
+        shopOrderIDs,
+        orderSubmitType,
+        orderType,
+        status,
+        productTotalFee,
+        orderTotalFee,
+        payTotalFee,
+        balancePayFee,
+        discountFee,
+        spID,
+        mainSpID,
+        note,
+        clubID,
+        clubScanTime,
+        payWay,
+        payFlag,
+        orderSource,
+        orderTime,
+        payTime,
+        productCount,
+        presentCount,
+        cooFreeFlag,
+        cooFreeRate,
+        cooFreeAmount,
+        confirmFlag,
+        clauseID,
+        clauseContent,
+        clauseName,
+        updateDate,
+        freePostFlag,
+        freight,
+        freePostageTicketID,
+        delFlag,
+        invoiceFlag,
+        autoCloseTimeMills,
+        hasActProduct,
+        preferential,
+        confirmTime,
+        closeTime,
+        splitFlag
+        ) VALUES (
+        #{orderNo},
+        #{organizeID},
+        #{userID},
+        #{buyUserID},
+        #{shopOrderIDs},
+        #{orderSubmitType},
+        #{orderType},
+        #{status},
+        #{productTotalFee},
+        #{orderTotalFee},
+        #{payTotalFee},
+        #{balancePayFee},
+        #{discountFee},
+        #{spID},
+        #{mainSpID},
+        #{note},
+        #{clubID},
+        #{clubScanTime},
+        #{payWay},
+        #{payFlag},
+        #{orderSource},
+        #{orderTime},
+        #{payTime},
+        #{productCount},
+        #{presentCount},
+        #{cooFreeFlag},
+        #{cooFreeRate},
+        #{cooFreeAmount},
+        #{confirmFlag},
+        #{clauseID},
+        #{clauseContent},
+        #{clauseName},
+        #{updateDate},
+        #{freePostFlag},
+        #{freight},
+        #{freePostageTicketID},
+        #{delFlag},
+        #{invoiceFlag},
+        #{autoCloseTimeMills},
+        #{hasActProduct},
+        #{preferential},
+        #{confirmTime},
+        #{closeTime},
+        #{splitFlag}
+        )
+    </insert>
+
+    <update id="update">
+        UPDATE cm_order SET
+        orderNo = #{orderNo},
+        organizeID = #{organizeID},
+        userID = #{userID},
+        buyUserID = #{buyUserID},
+        shopOrderIDs = #{shopOrderIDs},
+        orderSubmitType = #{orderSubmitType},
+        orderType = #{orderType},
+        status = #{status},
+        receiptStatus = #{receiptStatus},
+        payStatus = #{payStatus},
+        sendOutStatus = #{sendOutStatus},
+        refundType = #{refundType},
+        payableAmount = #{payableAmount},
+        productTotalFee = #{productTotalFee},
+        orderTotalFee = #{orderTotalFee},
+        payTotalFee = #{payTotalFee},
+        balancePayFee = #{balancePayFee},
+        discountFee = #{discountFee},
+        spID = #{spID},
+        mainSpID = #{mainSpID},
+        note = #{note},
+        clubID = #{clubID},
+        clubScanTime = #{clubScanTime},
+        payWay = #{payWay},
+        payFlag = #{payFlag},
+        orderSource = #{orderSource},
+        orderTime = #{orderTime},
+        payTime = #{payTime},
+        productCount = #{productCount},
+        presentCount = #{presentCount},
+        cooFreeFlag = #{cooFreeFlag},
+        cooFreeRate = #{cooFreeRate},
+        cooFreeAmount = #{cooFreeAmount},
+        confirmFlag = #{confirmFlag},
+        clauseID = #{clauseID},
+        clauseContent = #{clauseContent},
+        clauseName = #{clauseName},
+        updateDate = #{updateDate},
+        freePostFlag = #{freePostFlag},
+        freight = #{freight},
+        freePostageTicketID = #{freePostageTicketID},
+        delFlag = #{delFlag},
+        invoiceFlag = #{invoiceFlag},
+        autoCloseTimeMills = #{autoCloseTimeMills},
+        hasActProduct = #{hasActProduct},
+        preferential = #{preferential},
+        confirmTime = #{confirmTime},
+        closeTime = #{closeTime},
+        splitFlag = #{splitFlag}
+        WHERE orderID = #{orderID}
+    </update>
+
+
     <select id="queryCode" parameterType="int" resultType="com.caimei.entity.OrderShareCode">
         SELECT
           *

+ 424 - 0
src/main/resources/mapper/OrderProductMapper.xml

@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.caimei.mapper.order.OrderProductMapper" >
+		<sql id="cmOrderProductColumns">
+			a.orderProductID AS "orderProductID",
+			a.orderNo AS "orderNo",
+			a.orderID AS "orderID",
+			a.shopOrderID AS "shopOrderID",
+			a.shopOrderNo AS "shopOrderNo",
+			a.shopID AS "shopID",
+			a.productID AS "productID",
+			a.organizeProductID AS "organizeProductID",
+			a.organizeID AS "organizeID",
+			a.num AS "num",
+			a.presentNum AS "presentNum",
+			a.outStoreType AS "outStoreType",
+			a.skuID AS "skuID",
+			a.props AS "props",
+			a.propName AS "propName",
+			a.productNo AS "productNo",
+			a.price AS "price",
+			a.normalPrice AS "normalPrice",
+			a.price0 AS "price0",
+			a.price1 AS "price1",
+			a.totalAmount AS "totalAmount",
+			a.discount AS "discount",
+			a.discountPrice AS "discountPrice",
+			a.taxRate AS "taxRate",
+			a.addedValueTax AS "addedValueTax",
+			a.totalAddedValueTax AS "totalAddedValueTax",
+			a.`shouldPayTotalTax` AS `shouldPayTotalTax`,
+			a.shopFee AS "shopFee",
+			a.otherFee AS "otherFee",
+			a.cmFee AS "cmFee",
+			a.singleShopFee AS "singleShopFee",
+			a.singleOtherFee AS "singleOtherFee",
+			a.singleCmFee AS "singleCmFee",
+			a.shouldPayFee AS "shouldPayFee",
+			a.status AS "status",
+			a.commentFlag AS "commentFlag",
+			a.totalFee AS "totalFee",
+			a.totalBeans AS "totalBeans",
+			a.useBalanceAmount AS "useBalanceAmount",
+			a.useBeanAmount AS "useBeanAmount",
+			IFNULL(a.notOutStore, 0) AS "notOutStore",
+			a.cmbeanPrice AS "cmbeanPrice",
+			a.isGiftProduct AS "isGiftProduct",
+			a.productActInfo AS "productActInfo",
+			a.buyAgainFlag AS "buyAgainFlag",
+			a.confirmProductFlag AS "confirmProductFlag",
+			a.payStatus AS "payStatus",
+			a.shopName AS "shopName",
+			a.name AS "name",
+			a.discountFee AS "discountFee",
+			a.isActProduct AS "isActProduct",
+			a.preferential AS "preferential",
+			a.actPreferential AS "actPreferential",
+			a.actType AS "actType",
+			a.productImage AS productImage,
+			a.productUnit AS productUnit
+		</sql>
+
+		<sql id="cmOrderProductJoins">
+		</sql>
+
+		<select id="get" resultType="com.caimei.entity.CmOrderProduct">
+			SELECT
+			<include refid="cmOrderProductColumns"/>
+			FROM cm_order_product a
+			<include refid="cmOrderProductJoins"/>
+			WHERE a.orderProductID = #{orderProductID}
+		</select>
+
+
+		<select id="findList" resultType="com.caimei.entity.CmOrderProduct">
+			SELECT
+			<include refid="cmOrderProductColumns"/>
+			FROM cm_order_product a
+			<include refid="cmOrderProductJoins"/>
+			<where>
+
+				<if test="orderProductID != null and orderProductID != ''">
+					AND a.orderProductID = #{orderProductID}
+				</if>
+				<if test="orderNo != null and orderNo != ''">
+					AND a.orderNo = #{orderNo}
+				</if>
+				<if test="orderID != null and orderID != ''">
+					AND a.orderID = #{orderID}
+				</if>
+				<if test="shopOrderID != null and shopOrderID != ''">
+					AND a.shopOrderID = #{shopOrderID}
+				</if>
+				<if test="shopOrderNo != null and shopOrderNo != ''">
+					AND a.shopOrderNo = #{shopOrderNo}
+				</if>
+				<if test="shopID != null and shopID != ''">
+					AND a.shopID = #{shopID}
+				</if>
+				<if test="productID != null and productID != ''">
+					AND a.productID = #{productID}
+				</if>
+				<if test="name != null and name != ''">
+					AND a.name LIKE
+					<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>
+					<if test="dbName == 'mssql'">'%'+#{name}+'%'</if>
+					<if test="dbName == 'mysql'">concat('%',#{name},'%')</if>
+				</if>
+			</where>
+			ORDER BY a.orderProductID
+		</select>
+
+		<select id="findAllList" resultType="com.caimei.entity.CmOrderProduct">
+			SELECT
+			<include refid="cmOrderProductColumns"/>
+			FROM cm_order_product a
+			<include refid="cmOrderProductJoins"/>
+			<where>
+
+			</where>
+			ORDER BY a.orderProductID
+		</select>
+
+		<select id="findReturnedPurchaseList" resultType="CmReturnedPurchase">
+			SELECT
+			*
+			FROM cm_returned_purchase a
+			<where>
+				<if test="orderID != null and orderID != ''">
+					AND a.orderID = #{orderID}
+				</if>
+				<if test="status != null and status != ''">
+					AND a.status = #{status}
+				</if>
+			</where>
+			ORDER BY a.returnTime desc
+		</select>
+
+
+		<insert id="insert" parameterType="com.caimei.entity.CmOrderProduct"  keyProperty="orderProductID" useGeneratedKeys="true">
+			INSERT INTO cm_order_product(
+			orderNo,
+			orderID,
+			shopOrderID,
+			shopOrderNo,
+			shopID,
+			productID,
+			num,
+			presentNum,
+			outStoreType,
+			skuID,
+			props,
+			propName,
+			productNo,
+			price,
+			normalPrice,
+			costPrice,
+			price0,
+			price1,
+			totalAmount,
+			discount,
+			discountPrice,
+			taxRate,
+			addedValueTax,
+			totalAddedValueTax,
+			shouldPayTotalTax,
+			shopProductAmount,
+			shopFee,
+			otherFee,
+			cmFee,
+			singleShopFee,
+			singleOtherFee,
+			singleCmFee,
+			shouldPayFee,
+			commentFlag,
+			totalFee,
+			totalBeans,
+			useBalanceAmount,
+			useBeanAmount,
+			notOutStore,
+			cmbeanPrice,
+			isGiftProduct,
+			productActInfo,
+			buyAgainFlag,
+			confirmProductFlag,
+			payStatus,
+			shopName,
+			name,
+			discountFee,
+			isActProduct,
+			preferential,
+			actPreferential,
+			actType,
+			productImage,
+			productUnit
+			) VALUES (
+			#{orderNo},
+			#{orderID},
+			#{shopOrderID},
+			#{shopOrderNo},
+			#{shopID},
+			#{productID},
+			#{num},
+			#{presentNum},
+			#{outStoreType},
+			#{skuID},
+			#{props},
+			#{propName},
+			#{productNo},
+			#{price},
+			#{normalPrice},
+			#{costPrice},
+			#{price0},
+			#{price1},
+			#{totalAmount},
+			#{discount},
+			#{discountPrice},
+			#{taxRate},
+			#{addedValueTax},
+			#{totalAddedValueTax},
+			#{shouldPayTotalTax},
+			#{shopProductAmount},
+			#{shopFee},
+			#{otherFee},
+			#{cmFee},
+			#{singleShopFee},
+			#{singleOtherFee},
+			#{singleCmFee},
+			#{shouldPayFee},
+			#{commentFlag},
+			#{totalFee},
+			#{totalBeans},
+			#{useBalanceAmount},
+			#{useBeanAmount},
+			#{notOutStore},
+			#{cmbeanPrice},
+			#{isGiftProduct},
+			#{productActInfo},
+			#{buyAgainFlag},
+			#{confirmProductFlag},
+			#{payStatus},
+			#{shopName},
+			#{name},
+			#{discountFee},
+			#{isActProduct},
+			#{preferential},
+			#{actPreferential},
+			#{actType},
+			#{productImage},
+			#{productUnit}
+			)
+		</insert>
+
+		<update id="update">
+			UPDATE cm_order_product SET
+			orderNo = #{orderNo},
+			orderID = #{orderID},
+			shopOrderID = #{shopOrderID},
+			shopOrderNo = #{shopOrderNo},
+			shopID = #{shopID},
+			productID = #{productID},
+			organizeProductID = #{organizeProductID},
+			organizeID = #{organizeID},
+			num = #{num},
+			presentNum = #{presentNum},
+			outStoreType = #{outStoreType},
+			skuID = #{skuID},
+			props = #{props},
+			propName = #{propName},
+			productNo = #{productNo},
+			price = #{price},
+			normalPrice = #{normalPrice},
+			price0 = #{price0},
+			price1 = #{price1},
+			totalAmount = #{totalAmount},
+			discount = #{discount},
+			discountPrice = #{discountPrice},
+			taxRate = #{taxRate},
+			addedValueTax = #{addedValueTax},
+			totalAddedValueTax = #{totalAddedValueTax},
+			shouldPayTotalTax = #{shouldPayTotalTax,jdbcType=DECIMAL},
+			shopFee = #{shopFee},
+			otherFee = #{otherFee},
+			cmFee = #{cmFee},
+			singleShopFee = #{singleShopFee},
+			singleOtherFee = #{singleOtherFee},
+			singleCmFee = #{singleCmFee},
+			shouldPayFee = #{shouldPayFee},
+			commentFlag = #{commentFlag},
+			totalFee = #{totalFee},
+			totalBeans = #{totalBeans},
+			useBalanceAmount = #{useBalanceAmount},
+			useBeanAmount = #{useBeanAmount},
+			notOutStore = #{notOutStore},
+			cmbeanPrice = #{cmbeanPrice},
+			isGiftProduct = #{isGiftProduct},
+			productActInfo = #{productActInfo},
+			buyAgainFlag = #{buyAgainFlag},
+			confirmProductFlag = #{confirmProductFlag},
+			payStatus = #{payStatus},
+			shopName = #{shopName},
+			name = #{name},
+			discountFee = #{discountFee},
+			isActProduct = #{isActProduct},
+			preferential = #{preferential},
+			actPreferential = #{actPreferential},
+			actType = #{actType},
+			productImage = #{productImage},
+			productUnit = #{productUnit}
+			WHERE orderProductID = #{orderProductID}
+		</update>
+
+		<delete id="delete">
+			DELETE FROM cm_order_product
+			WHERE orderProductID = #{orderProductID}
+		</delete>
+
+		<select id="getUnCommentNum" parameterType="Integer" resultType="Integer">
+			SELECT COUNT(op.orderProductID)
+			FROM cm_order_product op LEFT JOIN cm_shop_order so ON op.shopOrderID = so.shopOrderID
+			WHERE op.commentFlag = '0'
+			AND so.status IN (5)
+			AND op.shopOrderID = #{shopOrderID}
+		</select>
+
+		<select id="getOrderProductDetail" resultType="com.caimei.entity.CmOrderProduct" parameterType="com.caimei.entity.CmOrderProduct">
+			SELECT
+			<include refid="cmOrderProductColumns"/>
+			FROM cm_order_product a
+			<where>
+				<if test="shopOrderID != null and shopOrderID != ''">
+					AND a.shopOrderID = #{shopOrderID}
+				</if>
+			</where>
+			ORDER BY a.orderProductID ASC
+		</select>
+
+		<select id="findByShopID" resultType="com.caimei.entity.CmOrderProduct">
+			SELECT `cm_order_product` WHERE shopID = #{shopID} AND orderID = #{orderID}
+		</select>
+
+		<select id="findByOrderIdGroupByShopId" resultType="com.caimei.entity.CmOrderProduct">
+			SELECT
+			<include refid="com.caimei.entity.CmOrderProductColumns"/>
+			FROM cm_order_product a
+			<include refid="cmOrderProductJoins"/>
+			WHERE a.orderID=#{orderID} GROUP BY a.shopID;
+		</select>
+
+		<select id="getIdsByOrderID" resultType="java.lang.String">
+			SELECT GROUP_CONCAT(orderProductID) FROM `cm_order_product` where orderID = #{orderID}
+		</select>
+
+		<select id="findByIds" resultType="CmOrderProduct">
+			SELECT
+			<include refid="cmOrderProductColumns"/>
+			FROM cm_order_product a
+			<include refid="cmOrderProductJoins"/>
+			WHERE a.orderProductID IN
+			<foreach collection="array" item="item" index="index" open="(" separator="," close=")" >
+				#{item}
+			</foreach>
+			ORDER BY a.orderProductID ASC
+		</select>
+
+		<select id="findByIdsAndOrderId" resultType="com.caimei.po.neworder.CmOrderProduct">
+			SELECT
+			<include refid="cmOrderProductColumns"/>
+			FROM cm_order_product a
+			<include refid="cmOrderProductJoins"/>
+			WHERE a.orderProductID IN
+			<foreach collection="ids" item="id" index="index" open="(" separator="," close=")" >
+				#{orderProductID}
+			</foreach>
+			AND a.orderID=#{orderID}
+			ORDER BY a.orderProductID ASC
+		</select>
+
+		<select id="findByOrderProductID" resultType="com.caimei.po.neworder.CmOrderProduct" useCache="false" flushCache="true">
+			SELECT
+			<include refid="cmOrderProductColumns"/>
+			FROM cm_order_product a
+			<include refid="cmOrderProductJoins"/>
+			WHERE a.orderProductID = #{orderProductID}
+		</select>
+
+		<select id="getReturningNum" resultType="Integer">
+			SELECT
+			  IFNULL(sum(a.applicationReturnedNum),0)
+			FROM cm_returned_purchase_product a
+			right join cm_returned_purchase b on a.returnedID = b.id
+		  	WHERE a.orderProductID = #{orderProductID}
+		  	and b.status = 1
+		</select>
+
+		<select id="getReturnedNum" resultType="Integer">
+			SELECT
+			  IFNULL(sum(a.actualReturnedNum),0)
+			FROM cm_returned_purchase_product a
+			right join cm_returned_purchase b on a.returnedID = b.id
+		  	WHERE a.orderProductID = #{orderProductID}
+		  	and b.status = 2
+		</select>
+
+		<select id="getCanceledNum" resultType="Integer">
+			SELECT
+			  IFNULL(sum(a.actualCancelNum),0)
+			FROM cm_returned_purchase_product a
+			right join cm_returned_purchase b on a.returnedID = b.id
+		  	WHERE a.orderProductID = #{orderProductID}
+		  	and b.status = 2
+		</select>
+
+		<select id="getReceivedNum" resultType="Integer">
+			SELECT
+			  IFNULL(sum(a.num),0)
+			FROM cm_logistics_record a
+			right join cm_logistics_batch b on a.logisticsBatchID = b.id
+		  	WHERE a.orderProductID = #{orderProductID}
+		  	and b.status = 1
+		</select>
+
+
+</mapper>

+ 187 - 0
src/main/resources/mapper/OrganizeProductsMapper.xml

@@ -24,6 +24,7 @@
 		p.mainImage AS "mainImage",
 		p.name AS "name",
 		s.name AS "shopName",
+		s.shopID AS "shopID",
 		cmpc.classifyName AS "productClassifyName"
 	</sql>
 	
@@ -40,5 +41,191 @@
 		<include refid="cmMallOrganizeProductsJoins"/>
 		WHERE a.id = #{id}
 	</select>
+
+    <!--获取采美商品信息-->
+    <select id="selectCmProductById" resultType="com.caimei.entity.Product">
+        SELECT
+        a.*
+        FROM product a
+        WHERE a.productID = #{productID}
+    </select>
+
+    <insert id="insert" parameterType="com.caimei.entity.CmOrderProduct"  keyProperty="orderProductID" useGeneratedKeys="true">
+        INSERT INTO cm_order_product(
+        orderNo,
+        orderID,
+        shopOrderID,
+        shopOrderNo,
+        shopID,
+        productID,
+        organizeProductID,
+        organizeID
+        num,
+        presentNum,
+        outStoreType,
+        skuID,
+        props,
+        propName,
+        productNo,
+        price,
+        normalPrice,
+        costPrice,
+        price0,
+        price1,
+        totalAmount,
+        discount,
+        discountPrice,
+        taxRate,
+        addedValueTax,
+        totalAddedValueTax,
+        shouldPayTotalTax,
+        shopProductAmount,
+        shopFee,
+        otherFee,
+        cmFee,
+        singleShopFee,
+        singleOtherFee,
+        singleCmFee,
+        shouldPayFee,
+        commentFlag,
+        totalFee,
+        totalBeans,
+        useBalanceAmount,
+        useBeanAmount,
+        notOutStore,
+        cmbeanPrice,
+        isGiftProduct,
+        productActInfo,
+        buyAgainFlag,
+        confirmProductFlag,
+        payStatus,
+        shopName,
+        name,
+        discountFee,
+        isActProduct,
+        preferential,
+        actPreferential,
+        actType,
+        productImage,
+        productUnit
+        ) VALUES (
+        #{orderNo},
+        #{orderID},
+        #{shopOrderID},
+        #{shopOrderNo},
+        #{shopID},
+        #{productID},
+        #{organizeProductID},
+        #{organizeID},
+        #{num},
+        #{presentNum},
+        #{outStoreType},
+        #{skuID},
+        #{props},
+        #{propName},
+        #{productNo},
+        #{price},
+        #{normalPrice},
+        #{costPrice},
+        #{price0},
+        #{price1},
+        #{totalAmount},
+        #{discount},
+        #{discountPrice},
+        #{taxRate},
+        #{addedValueTax},
+        #{totalAddedValueTax},
+        #{shouldPayTotalTax},
+        #{shopProductAmount},
+        #{shopFee},
+        #{otherFee},
+        #{cmFee},
+        #{singleShopFee},
+        #{singleOtherFee},
+        #{singleCmFee},
+        #{shouldPayFee},
+        #{commentFlag},
+        #{totalFee},
+        #{totalBeans},
+        #{useBalanceAmount},
+        #{useBeanAmount},
+        #{notOutStore},
+        #{cmbeanPrice},
+        #{isGiftProduct},
+        #{productActInfo},
+        #{buyAgainFlag},
+        #{confirmProductFlag},
+        #{payStatus},
+        #{shopName},
+        #{name},
+        #{discountFee},
+        #{isActProduct},
+        #{preferential},
+        #{actPreferential},
+        #{actType},
+        #{productImage},
+        #{productUnit}
+        )
+    </insert>
+
+
+    <update id="update">
+        UPDATE cm_order_product SET
+        orderNo = #{orderNo},
+        orderID = #{orderID},
+        shopOrderID = #{shopOrderID},
+        shopOrderNo = #{shopOrderNo},
+        shopID = #{shopID},
+        productID = #{productID},
+        organizeProductID = #{organizeProductID},
+        organizeID = #{organizeID},
+        num = #{num},
+        presentNum = #{presentNum},
+        outStoreType = #{outStoreType},
+        skuID = #{skuID},
+        props = #{props},
+        propName = #{propName},
+        productNo = #{productNo},
+        price = #{price},
+        normalPrice = #{normalPrice},
+        price0 = #{price0},
+        price1 = #{price1},
+        totalAmount = #{totalAmount},
+        discount = #{discount},
+        discountPrice = #{discountPrice},
+        taxRate = #{taxRate},
+        addedValueTax = #{addedValueTax},
+        totalAddedValueTax = #{totalAddedValueTax},
+        shouldPayTotalTax = #{shouldPayTotalTax,jdbcType=DECIMAL},
+        shopFee = #{shopFee},
+        otherFee = #{otherFee},
+        cmFee = #{cmFee},
+        singleShopFee = #{singleShopFee},
+        singleOtherFee = #{singleOtherFee},
+        singleCmFee = #{singleCmFee},
+        shouldPayFee = #{shouldPayFee},
+        commentFlag = #{commentFlag},
+        totalFee = #{totalFee},
+        totalBeans = #{totalBeans},
+        useBalanceAmount = #{useBalanceAmount},
+        useBeanAmount = #{useBeanAmount},
+        notOutStore = #{notOutStore},
+        cmbeanPrice = #{cmbeanPrice},
+        isGiftProduct = #{isGiftProduct},
+        productActInfo = #{productActInfo},
+        buyAgainFlag = #{buyAgainFlag},
+        confirmProductFlag = #{confirmProductFlag},
+        payStatus = #{payStatus},
+        shopName = #{shopName},
+        name = #{name},
+        discountFee = #{discountFee},
+        isActProduct = #{isActProduct},
+        preferential = #{preferential},
+        actPreferential = #{actPreferential},
+        actType = #{actType},
+        productImage = #{productImage},
+        productUnit = #{productUnit}
+        WHERE orderProductID = #{orderProductID}
+    </update>
 	
 </mapper>