소스 검색

添加实体类

lijun 5 년 전
부모
커밋
e1dc65f123

+ 54 - 7
src/main/java/com/caimei/controller/order/OrderController.java

@@ -3,15 +3,21 @@ package com.caimei.controller.order;
 import com.caimei.entity.CmOperationUser;
 import com.caimei.entity.WxJsonModel;
 import com.caimei.service.order.OrderService;
+import com.caimei.utils.JsonMapper;
 import com.caimei.utils.SessionHelper;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.thymeleaf.expression.Maps;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -76,7 +82,7 @@ public class OrderController {
      *]
      *参数6=balanceDeductionFlag是否使用余额抵扣(1使用,2使用)
      *参数7=orderShouldPayFee订单应付金额(商品总金额 - 余额抵扣 - 经理折扣默认为0)
-     * @return code:1000=用户账户异常,1001=
+     * @return code:1000=用户账户异常,1001=数据异常
      */
     @ResponseBody
     @RequestMapping("/submitOrder")
@@ -88,13 +94,54 @@ public class OrderController {
         if(null == currentUser){
             return wxJsonModel.error("1000","用户账户异常");
         }
-        //校验传入参数的正确性
-
-
-        //获取用户最新余额,判断是否存在
+        Integer cmOperationID = currentUser.getId();//当前操作者ID
+        if (StringUtils.isBlank(params)) {
+            return wxJsonModel.error("1001","数据异常" );
+        }
+        Map<String, Object> map = new HashMap<String,Object>();
+        try{
+            map =(Map<String, Object>) JsonMapper.getInstance().fromJsonString(params, Map.class);
+            if(null == map){
+                logger.info(">>>>>数据异常,参数不能为空");
+                return wxJsonModel.error("1001","数据异常" );
+            }
+            //校验传入参数的正确性
+            Integer userId = (Integer) map.get("userId");
+            Integer organizeID = (Integer) map.get("organizeID");
+            String cartType = (String) map.get("cartType");
+            Integer addressID = (Integer) map.get("addressID");
+            Object orderInfo =  map.get("orderInfo");
+            String balanceDeductionFlag = (String) map.get("balanceDeductionFlag");
+            Double orderShouldPayFee = (Double) map.get("orderShouldPayFee");//此金额为前端计算,适用于后端计算金额复查
 
-        //提交订单完成后清理购物车(用户ID,商品ID)
+            if(null == userId){
+                return wxJsonModel.error("1001","用户数据异常" );
+            }
+            if(null ==organizeID){
+                return wxJsonModel.error("1001","组织数据异常" );
+            }
+            if(StringUtils.isEmpty(cartType)){
+                return wxJsonModel.error("1001","购买类型数据异常" );
+            }
+            if(null ==addressID){
+                return wxJsonModel.error("1001","地址数据异常" );
+            }
+            if(null == orderInfo){
+                return wxJsonModel.error("1001","订单数据异常" );
+            }
+            if(StringUtils.isEmpty(balanceDeductionFlag)){
+                return wxJsonModel.error("1001","余额抵扣数据异常" );
+            }
+            if(null == orderShouldPayFee){
+                return wxJsonModel.error("1001","订单应付金额数据异常" );
+            }
+            //保存订单信息
+            return orderService.saveOrderInfo(wxJsonModel, userId, organizeID, cartType, addressID, orderInfo, balanceDeductionFlag, orderShouldPayFee,cmOperationID);
+        }catch (Exception e){
+            logger.info(">>>>>系统异常"+e.getMessage());
+            return wxJsonModel.error("1001","数据异常" );
 
-        return wxJsonModel.success();
+        }
     }
 }
+

+ 46 - 0
src/main/java/com/caimei/entity/CmOrder.java

@@ -15,6 +15,7 @@ public class CmOrder implements Serializable {
     private Integer orderType;        // 订单类型 协销订单 0 普通订单 1
     private Integer status;        // 订单状态
     private String statusName;      //订单状态备注
+    private String hasActProduct;//
     private String payFlag;             //支付状态 0未支付 1 已支付
     private String onlinePayFlag;       //能否线上支付 0能  1 只能线下
     private Double productTotalFee;        // 商品总金额 = 子订单商品金额相加
@@ -53,6 +54,10 @@ public class CmOrder implements Serializable {
     private String closeReason;//订单取消原因
     private String splitFlag;  //是否可以拆单
     private String postageOrderFlag; //邮费订单标识 1是邮费订单 0不是邮费订单
+    private String receiptStatus;//(收款买家)收款状态:1待收款、2部分收款、3已收款'
+    private String payStatus;//(付款供应商)付款状态:1待付款、2部分付款、3已付款
+    private String sendOutStatus;//发货状态:1待发货、2部分发货、3已发货
+    private String refundType;//退货退款类型:1部分退、2全部退
 
     public Integer getOrderID() {
         return orderID;
@@ -453,5 +458,46 @@ public class CmOrder implements Serializable {
     public void setOrderMark(String orderMark) {
         this.orderMark = orderMark;
     }
+
+    public String getHasActProduct() {
+        return hasActProduct;
+    }
+
+    public void setHasActProduct(String hasActProduct) {
+        this.hasActProduct = hasActProduct;
+    }
+
+    public String getReceiptStatus() {
+        return receiptStatus;
+    }
+
+    public void setReceiptStatus(String receiptStatus) {
+        this.receiptStatus = receiptStatus;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public String getSendOutStatus() {
+        return sendOutStatus;
+    }
+
+    public void setSendOutStatus(String sendOutStatus) {
+        this.sendOutStatus = sendOutStatus;
+    }
+
+    public String getRefundType() {
+        return refundType;
+    }
+
+    public void setRefundType(String refundType) {
+        this.refundType = refundType;
+    }
 }
 
+

+ 4 - 0
src/main/java/com/caimei/service/order/OrderService.java

@@ -1,5 +1,7 @@
 package com.caimei.service.order;
 
+import com.caimei.entity.WxJsonModel;
+
 import java.util.Map;
 
 public interface OrderService {
@@ -8,4 +10,6 @@ public interface OrderService {
     String shareOrder(Integer orderID);
 
     Map<String, Object> particulars(Integer orderID);
+
+    WxJsonModel saveOrderInfo(WxJsonModel wxJsonModel,Integer userId,Integer organizeID,String cartType,Integer addressID,Object orderInfo,String balanceDeductionFlag,Double orderShouldPayFee,Integer cmOperationID);
 }

+ 72 - 0
src/main/java/com/caimei/service/order/impl/OrderServiceImpl.java

@@ -6,9 +6,12 @@ import com.caimei.mapper.user.LoginMapper;
 import com.caimei.mapper.user.PersonalMapper;
 import com.caimei.service.order.OrderService;
 import com.caimei.utils.AppUtils;
+import com.caimei.utils.NoUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 
@@ -151,4 +154,73 @@ public class OrderServiceImpl implements OrderService {
         map.put("returnedPurchaseList", returnedPurchaseList);
         return map;
     }
+
+    @Override
+    public WxJsonModel saveOrderInfo(WxJsonModel wxJsonModel,Integer userId, Integer organizeID, String cartType, Integer addressID, Object orderInfo, String balanceDeductionFlag, Double orderShouldPayFee,Integer cmOperationID) {
+        //订单信息转化
+        List<Map<String,Object>> orderInfoList = (List<Map<String, Object>>) orderInfo;
+        if(null != orderInfoList){
+            Integer num = 0;//统计购买所有商品的数量
+            double productTotalFee = 0d;//商品总金额 (商品单价乘以数量,再加上税费[默认0])
+            double orderTotalFee = 0d;//小计金额 (商品折后单价乘以数量,再加上税费[默认0])
+            double payTotalFee = 0d;//订单总额(小计金额减去经理折扣后,再加上运费[默认0])
+            double payableAmount = 0d;//真实支付金额(订单总额减去抵扣的账户余额)
+            for(Map<String,Object> shopOrderInfo : orderInfoList){//遍历订单信息
+                String shopId = (String)shopOrderInfo.get("shopId");
+                String note = (String)shopOrderInfo.get("note");
+                Object productInfo = shopOrderInfo.get("productInfo");//一个子订单对应的商品信息
+                if(StringUtils.isEmpty(shopId)){
+                    return wxJsonModel.error("1001","供应商数据异常" );
+                }
+                if(null == productInfo){
+                    return wxJsonModel.error("1001","订单商品数据异常" );
+                }
+                //获取子订单商品信息
+                List<Map<String,Object>> productInfoList = (List<Map<String, Object>>) productInfo;
+                if(!CollectionUtils.isEmpty(productInfoList)){
+                    for(Map<String,Object> product : productInfoList){//遍历所有商品
+                        Integer productId = (Integer) product.get("productId");
+                        Integer productNum = (Integer) product.get("productNum");
+                    }
+                }
+            }
+
+            //保存主订单
+            CmOrder cmOrder = new CmOrder();
+            cmOrder.setOrderNo(NoUtils.getCmOrderNo("X"));
+            cmOrder.setOrganizeID(organizeID);
+            cmOrder.setUserID(userId);
+            cmOrder.setBuyUserID(cmOperationID);//操作者的ID(下单人)
+            cmOrder.setOrderSubmitType(2);// 2:员工帮会所下单
+            cmOrder.setOrderType(null);//小程序
+            cmOrder.setHasActProduct("0");
+            cmOrder.setSendOutStatus("1");//待發貨
+            cmOrder.setProductTotalFee(productTotalFee);
+            cmOrder.setOrderTotalFee(orderTotalFee);
+
+            cmOrder.setShopOrderIDs("");//暂无类型
+            cmOrder.setStatus(0);
+            cmOrder.setReceiptStatus("");//(收款买家)收款状态:1待收款、2部分收款、3已收款
+            cmOrder.setPayWay("");//(付款供应商)付款状态:1待付款、2部分付款、3已付款
+            cmOrder.setPayFlag("");//是否已支付 未支付0 已支付1
+            cmOrder.setOnlinePayFlag("0");//是否能走线上支付 0可以 1不可以 只能线下
+
+
+
+            //保存子订单
+
+            //保存订单商品
+
+
+            //获取用户最新余额,判断是否存在
+
+            //提交订单完成后清理购物车(用户ID,商品ID)
+            if(StringUtils.equals("1",cartType)){//购物车提交后清理购物车
+
+            }
+
+        }
+
+        return wxJsonModel.success();
+    }
 }

+ 215 - 0
src/main/java/com/caimei/utils/JsonMapper.java

@@ -0,0 +1,215 @@
+package com.caimei.utils;
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser.Feature;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.util.JSONPObject;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.TimeZone;
+
+/**
+ * 简单封装Jackson,实现JSON String<->Java Object的Mapper.
+ * 封装不同的输出风格, 使用不同的builder函数创建实例.
+ */
+public class JsonMapper extends ObjectMapper {
+
+	private static final long serialVersionUID = 1L;
+
+	private static Logger logger = LoggerFactory.getLogger(JsonMapper.class);
+
+	private static JsonMapper mapper;
+
+	public JsonMapper() {
+		this(Include.NON_EMPTY);
+	}
+
+	public JsonMapper(Include include) {
+		// 设置输出时包含属性的风格
+		if (include != null) {
+			this.setSerializationInclusion(include);
+		}
+		// 允许单引号、允许不带引号的字段名称
+		this.enableSimple();
+		// 设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性
+		this.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+        // 空值处理为空串
+		this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>(){
+			@Override
+			public void serialize(Object value, JsonGenerator jgen,
+					SerializerProvider provider) throws IOException,
+                    JsonProcessingException {
+				jgen.writeString("");
+			}
+        });
+		// 进行HTML解码。
+		this.registerModule(new SimpleModule().addSerializer(String.class, new JsonSerializer<String>(){
+			@Override
+			public void serialize(String value, JsonGenerator jgen,
+					SerializerProvider provider) throws IOException,
+                    JsonProcessingException {
+				jgen.writeString(StringEscapeUtils.unescapeHtml4(value));
+			}
+        }));
+		// 设置时区
+		this.setTimeZone(TimeZone.getDefault());//getTimeZone("GMT+8:00")
+	}
+
+	/**
+	 * 创建只输出非Null且非Empty(如List.isEmpty)的属性到Json字符串的Mapper,建议在外部接口中使用.
+	 */
+	public static JsonMapper getInstance() {
+		if (mapper == null){
+			mapper = new JsonMapper().enableSimple();
+		}
+		return mapper;
+	}
+
+	/**
+	 * 创建只输出初始值被改变的属性到Json字符串的Mapper, 最节约的存储方式,建议在内部接口中使用。
+	 */
+	public static JsonMapper nonDefaultMapper() {
+		if (mapper == null){
+			mapper = new JsonMapper(Include.NON_DEFAULT);
+		}
+		return mapper;
+	}
+	
+	/**
+	 * Object可以是POJO,也可以是Collection或数组。
+	 * 如果对象为Null, 返回"null".
+	 * 如果集合为空集合, 返回"[]".
+	 */
+	public String toJson(Object object) {
+		try {
+			return this.writeValueAsString(object);
+		} catch (IOException e) {
+			logger.warn("write to json string error:" + object, e);
+			return null;
+		}
+	}
+
+	/**
+	 * 反序列化POJO或简单Collection如List<String>.
+	 * 
+	 * 如果JSON字符串为Null或"null"字符串, 返回Null.
+	 * 如果JSON字符串为"[]", 返回空集合.
+	 * 
+	 * 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String,JavaType)
+	 * @see #fromJson(String, JavaType)
+	 */
+	public <T> T fromJson(String jsonString, Class<T> clazz) {
+		if (StringUtils.isEmpty(jsonString)) {
+			return null;
+		}
+		try {
+			return this.readValue(jsonString, clazz);
+		} catch (IOException e) {
+			logger.warn("parse json string error:" + jsonString, e);
+			return null;
+		}
+	}
+
+	/**
+	 * 反序列化复杂Collection如List<Bean>, 先使用函數createCollectionType构造类型,然后调用本函数.
+	 * @see #createCollectionType(Class, Class...)
+	 */
+	@SuppressWarnings("unchecked")
+	public <T> T fromJson(String jsonString, JavaType javaType) {
+		if (StringUtils.isEmpty(jsonString)) {
+			return null;
+		}
+		try {
+			return (T) this.readValue(jsonString, javaType);
+		} catch (IOException e) {
+			logger.warn("parse json string error:" + jsonString, e);
+			return null;
+		}
+	}
+
+	/**
+	 * 構造泛型的Collection Type如:
+	 * ArrayList<MyBean>, 则调用constructCollectionType(ArrayList.class,MyBean.class)
+	 * HashMap<String,MyBean>, 则调用(HashMap.class,String.class, MyBean.class)
+	 */
+	public JavaType createCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
+		return this.getTypeFactory().constructParametricType(collectionClass, elementClasses);
+	}
+
+	/**
+	 * 當JSON裡只含有Bean的部分屬性時,更新一個已存在Bean,只覆蓋該部分的屬性.
+	 */
+	@SuppressWarnings("unchecked")
+	public <T> T update(String jsonString, T object) {
+		try {
+			return (T) this.readerForUpdating(object).readValue(jsonString);
+		} catch (JsonProcessingException e) {
+			logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
+		} catch (IOException e) {
+			logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);
+		}
+		return null;
+	}
+
+	/**
+	 * 輸出JSONP格式數據.
+	 */
+	public String toJsonP(String functionName, Object object) {
+		return toJson(new JSONPObject(functionName, object));
+	}
+
+	/**
+	 * 設定是否使用Enum的toString函數來讀寫Enum,
+	 * 為False時時使用Enum的name()函數來讀寫Enum, 默認為False.
+	 * 注意本函數一定要在Mapper創建後, 所有的讀寫動作之前調用.
+	 */
+	public JsonMapper enableEnumUseToString() {
+		this.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
+		this.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
+		return this;
+	}
+
+	/**
+	 * 允许单引号
+	 * 允许不带引号的字段名称
+	 */
+	public JsonMapper enableSimple() {
+		this.configure(Feature.ALLOW_SINGLE_QUOTES, true);
+		this.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
+		return this;
+	}
+	
+	/**
+	 * 取出Mapper做进一步的设置或使用其他序列化API.
+	 */
+	public ObjectMapper getMapper() {
+		return this;
+	}
+
+	/**
+	 * 对象转换为JSON字符串
+	 * @param object
+	 * @return
+	 */
+	public static String toJsonString(Object object){
+		return JsonMapper.getInstance().toJson(object);
+	}
+	
+	/**
+	 * JSON字符串转换为对象
+	 * @param jsonString
+	 * @param clazz
+	 * @return
+	 */
+	public static Object fromJsonString(String jsonString, Class<?> clazz){
+		return JsonMapper.getInstance().fromJson(jsonString, clazz);
+	}
+	
+}

+ 40 - 0
src/main/java/com/caimei/utils/NoUtils.java

@@ -0,0 +1,40 @@
+package com.caimei.utils;
+
+import java.util.Random;
+
+/**
+ * 编号生成工具
+ *
+ **/
+public class NoUtils {
+
+    /**
+     * 订单模块生成新订单号
+     *
+     * @param platform
+     * @return
+     */
+    public static String getCmOrderNo(String platform) {
+        Random rand = new Random();
+        String code = "";
+        for (int j = 0; j < 5; j++) {
+            code += rand.nextInt(10) + "";
+        }
+        return platform + System.currentTimeMillis() / 1000 + code;
+    }
+
+
+    /***
+     * 子订单编号生成
+     * @param orderNo
+     * @param num
+     * @return
+     */
+    public static String getCmShopOrderNo(String orderNo,Integer num) {
+        if (num<10){
+            return orderNo+"0"+num;
+        }else {
+            return orderNo+num;
+        }
+    }
+}