wangxiaoming před 7 roky
rodič
revize
a77803022a

+ 16 - 0
tooth-wechat-interface/src/main/java/com/iamberry/wechat/face/agentInfo/AgentPurchaseOrderService.java

@@ -10,5 +10,21 @@ import java.util.Map;
  * 采购&订单
  */
 public interface AgentPurchaseOrderService {
+    /**
+     * 生成订单
+     * @param agentOrder
+     * @param agentOrderItemList
+     * @return
+     */
     Map<String,Object> addAgentOrder(AgentOrder agentOrder, List<AgentOrderItem> agentOrderItemList);
+
+    /**
+     * 查询订单项
+     * @param orderId
+     * @return
+     */
+    List<AgentOrderItem> listAgentOrderItemByOrderId(String orderId);
+
 }
+
+

+ 20 - 3
tooth-wechat-service/src/main/java/com/iamberry/wechat/service/agentInfo/AgentPurchaseOrderServiceImpl.java

@@ -37,7 +37,7 @@ public class AgentPurchaseOrderServiceImpl implements AgentPurchaseOrderService
     @Transactional
     public Map<String,Object> addAgentOrder(AgentOrder agentOrder, List<AgentOrderItem> agentOrderItemList) {
         Map<String,Object> map = new HashMap<String,Object>();
-        map.put("status","400");
+        map.put("status",400);
 
         agentOrder.setAgentStatus(OrderUtil.ORDERSTAUTS_TOBEPAID);      //设置状态为:未支付
         int amount  = 0;    //订单总金额
@@ -52,6 +52,7 @@ public class AgentPurchaseOrderServiceImpl implements AgentPurchaseOrderService
                 map.put("msg","查询产品出错!");
                 return map;
             }
+            agentOrderItem.setAgentOrderid(agentOrder.getAgentOrderid());   //订单id
             agentOrderItem.setProductId(product.getProductId());            //产品id
             agentOrderItem.setItemProductName(product.getProductName());    //产品名称
             agentOrderItem.setColorId(productColor.getColorId());           //颜色id
@@ -82,10 +83,26 @@ public class AgentPurchaseOrderServiceImpl implements AgentPurchaseOrderService
             itemSummary = agentOrderItem.getItemNum() * discount;   //计算订单项小结
             amount += itemSummary;  //计算订单总金额
         }
+        agentOrder.setAgentAmount(amount);  //订单金额
+        agentOrder.setAgentYetAmount(amount);   //付款金额
+        Integer flag = agentPurchaseOrderMapper.addAgentOrder(agentOrder);
+        if(flag < 1){
+            map.put("msg","生成订单失败!");
+            return map;
+        }
 
-        agentPurchaseOrderMapper.addAgentOrder(agentOrder);
+        flag = agentPurchaseOrderMapper.addAgentOrderItemList(agentOrderItemList);
 
+        map.put("status",200);
+        map.put("agentOrder",agentOrder);
+        map.put("msg","订单生成成功!");
+        return map;
+    }
 
-        return null;
+    @Override
+    public List<AgentOrderItem> listAgentOrderItemByOrderId(String orderId) {
+        AgentOrderItem agentOrderItem = new AgentOrderItem();
+        agentOrderItem.setAgentOrderid(orderId);
+        return agentPurchaseOrderMapper.listAgentOrderItem(agentOrderItem);
     }
 }

+ 17 - 0
tooth-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/AgentPurchaseOrderMapper.java

@@ -1,6 +1,9 @@
 package com.iamberry.wechat.service.mapper;
 
 import com.iamberry.wechat.core.entity.agentInfo.AgentOrder;
+import com.iamberry.wechat.core.entity.agentInfo.AgentOrderItem;
+
+import java.util.List;
 
 /**
  *  采购订单
@@ -14,4 +17,18 @@ public interface AgentPurchaseOrderMapper {
      */
     Integer addAgentOrder(AgentOrder agentOrder);
 
+    /**
+     * 添加订单项
+     * @param agentOrderItemList
+     * @return
+     */
+    Integer addAgentOrderItemList(List<AgentOrderItem> agentOrderItemList);
+
+    /**
+     * 查询订单项
+     * @param agentOrderItem
+     * @return
+     */
+    List<AgentOrderItem> listAgentOrderItem(AgentOrderItem agentOrderItem);
+
 }

+ 39 - 3
tooth-wechat-service/src/main/java/com/iamberry/wechat/service/mapper/agentPurchaseOrderMapper.xml

@@ -8,10 +8,46 @@
  -->
 <mapper namespace="com.iamberry.wechat.service.mapper.AgentPurchaseOrderMapper">
 
-    <insert id="insert" parameterType="AgentOrder" useGeneratedKeys="true">
-		insert into tbIamberryAgentOrder (`agent_orderid` ,`agent_id` ,`agent_yet_amount` ,`agent_amount` ,`agent_create_date` ,`agent_post_num` ,`agent_post_firm` ,`agent_status` ,`agent_send_date` ,`agent_address_info` ,`agent_address_postnum` ,`agent_address_tel` ,`agent_address_name` ,`agent_admin_remark` )
-		values (#{agentOrderid},#{agentId},#{agentYetAmount},#{agentAmount},#{agentCreateDate},#{agentPostNum},#{agentPostFirm},#{agentStatus},#{agentSendDate},#{agentAddressInfo},#{agentAddressPostnum},#{agentAddressTel},#{agentAddressName},#{agentAdminRemark})
+    <sql id="agentOrderItem">
+        item_id itemId,
+        agent_orderid agentOrderid,
+        product_id productId,
+        color_id colorId,
+        product_type productType,
+        product_rent_type productRentType,
+        item_num itemNum,
+        item_total itemTotal,
+        item_create_date itemCreateDate,
+        item_product_name itemProductName,
+        item_color_name itemColorName,
+        item_product_discount itemProductDiscount,
+        item_product_price itemProductPrice,
+        item_product_pic  itemProductPic
+    </sql>
+
+    <insert id="addAgentOrder" parameterType="AgentOrder">
+		insert into tb_iamberry_agent_order (`agent_orderid` ,`agent_id` ,`agent_yet_amount` ,`agent_amount` ,`agent_create_date`,`agent_status` ,`agent_address_info` ,`agent_address_postnum` ,`agent_address_tel` ,`agent_address_name` ,`agent_admin_remark` )
+		values (#{agentOrderid},#{agentId},#{agentYetAmount},#{agentAmount},#{agentCreateDate},#{agentStatus},#{agentAddressInfo},#{agentAddressPostnum},#{agentAddressTel},#{agentAddressName},#{agentAdminRemark})
 	</insert>
 
+    <insert id="addAgentOrderItemList" parameterType="AgentOrderItem" useGeneratedKeys="true">
+        insert into tb_iamberry_agent_order_item (`agent_orderid` ,`product_id` ,`color_id` ,`product_type`
+        ,`product_rent_type` ,`item_num` ,`item_total` ,`item_product_name` ,`item_color_name` ,`item_product_discount`
+        ,`item_product_price` ,`item_product_pic` )
+        values
+        <foreach collection="list" item="item" index="index" separator="," open="" close="">
+            (#{item.agentOrderid},#{item.productId},#{item.colorId},#{item.productType},#{item.productRentType},#{item.itemNum},#{item.itemTotal},#{item.itemProductName},#{item.itemColorName},#{item.itemProductDiscount},#{item.itemProductPrice},#{item.itemProductPic})
+        </foreach>
+    </insert>
+
+
+    <select id="listAgentOrderItem" parameterType="AgentOrderItem" resultType="AgentOrderItem">
+        SELECT
+            <include refid="agentOrderItem"></include>
+        FROM
+            tb_iamberry_agent_order_item
+        WHERE
+            agent_orderid = #{agentOrderid}
+    </select>
 
 </mapper>

+ 111 - 38
tooth-wechat-web/src/main/java/com/iamberry/wechat/handles/agentInfo/AgentOrderHandler.java

@@ -1,16 +1,20 @@
 package com.iamberry.wechat.handles.agentInfo;
 
 import com.iamberry.wechat.core.entity.ResultMsg;
-import com.iamberry.wechat.core.entity.WechatUtils;
 import com.iamberry.wechat.core.entity.agentInfo.AgentConfig;
 import com.iamberry.wechat.core.entity.agentInfo.AgentOrder;
 import com.iamberry.wechat.core.entity.agentInfo.AgentOrderItem;
 import com.iamberry.wechat.core.entity.agentInfo.AgentTooth;
-import com.iamberry.wechat.core.entity.member.Member;
+import com.iamberry.wechat.core.entity.cart.SendPayDto;
+import com.iamberry.wechat.core.entity.pay.PayResult;
 import com.iamberry.wechat.core.entity.product.Product;
 import com.iamberry.wechat.face.agentInfo.AgentInfoService;
 import com.iamberry.wechat.face.agentInfo.AgentPurchaseOrderService;
 import com.iamberry.wechat.face.cart.ProductInfoService;
+import com.iamberry.wechat.face.pay.PayService;
+import com.iamberry.wechat.tools.NameUtils;
+import com.iamberry.wechat.tools.OrderNOUtil;
+import com.iamberry.wechat.tools.ResultInfo;
 import net.sf.json.JSONArray;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -20,6 +24,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 采购&订单
@@ -33,6 +38,8 @@ public class AgentOrderHandler {
     private ProductInfoService productInfoService;
     @Autowired
     private AgentPurchaseOrderService agentPurchaseOrderService;
+    @Autowired
+    private PayService payService;
 
     /**
      * 获取采购信息
@@ -54,7 +61,7 @@ public class AgentOrderHandler {
         if (agentTooth == null) {
             rm.setStatus(false);
             rm.setMessage("未找到该用户!");
-            rm.setResultCode("404");
+            rm.setResultCode(ResultInfo.ERRORCODE);
             return rm;
         }
 
@@ -81,22 +88,31 @@ public class AgentOrderHandler {
 
     /**
      * 支付前,调用方法
+     *
      * @param request
      * @return
      * @throws Exception
      */
     @ResponseBody
     @RequestMapping(value = "/payBefore", method = RequestMethod.POST)
-    public ResultMsg payBefore(HttpServletRequest request,AgentOrder agentOrder) throws Exception {
+    public ResultMsg payBefore(HttpServletRequest request, AgentOrder agentOrder) throws Exception {
         ResultMsg msg = new ResultMsg();
+        msg.setResultCode(ResultInfo.ERRORCODE);
         msg.setStatus(false);
-        msg.setResultCode("400");
 
         //获取代理商信息
-        Member member =  WechatUtils.getUserBySession(request);
-        String agentOpenid = member.getUserOpenid();
+//        Member member = WechatUtils.getUserBySession(request);
+//        /** 数据格式校验 */
+//        if (member == null || member.getUserOpenid() == null) {// 校验当前用户信息是否丢失
+//            msg.setMessage(ResultInfo.loginOutError);
+//            return msg;
+//        }
+//        String openId = member.getUserOpenid();
+        String openId = "o-icasz5a10CfmJ_s-hvW-Ltqwtc";
+        Integer codeId = 101;
+
         AgentTooth agentTooth = new AgentTooth();
-        agentTooth.setAgentOpenid(agentOpenid);
+        agentTooth.setAgentOpenid(openId);
         agentTooth = agentInfoService.getAgentTooth(agentTooth);
         if (agentTooth == null) {
             msg.setMessage("未找到该用户!");
@@ -104,66 +120,123 @@ public class AgentOrderHandler {
         }
 
         //验证前台传过来的数据是否规范
-        if(!isValiAgentOrder(agentOrder)){
+        if (!isValiAgentOrder(agentOrder)) {
             msg.setMessage("订单格式内容出错!");
             return msg;
         }
 
-        //---------------生成订单 --- start -----------------------
+        //---------------生成订单 --- start ---------------------
         JSONArray jsonArray = JSONArray.fromObject(agentOrder.getAgentOrderItemJson());
-        List<AgentOrderItem>  agentOrderItemList = (List) JSONArray.toCollection(jsonArray,AgentOrderItem.class);
-        if(agentOrderItemList == null || agentOrderItemList.size() < 1){
+        List<AgentOrderItem> agentOrderItemList = (List) JSONArray.toCollection(jsonArray, AgentOrderItem.class);
+        if (agentOrderItemList == null || agentOrderItemList.size() < 1) {
             msg.setMessage("未选择产品!");
             return msg;
         }
-
-        agentPurchaseOrderService.addAgentOrder(agentOrder,agentOrderItemList);
+        agentOrder.setAgentOrderid(OrderNOUtil.createOrderCode(codeId));
+        Map<String, Object> map = agentPurchaseOrderService.addAgentOrder(agentOrder, agentOrderItemList);
+        if (map.get("status") == null || map.get("status") == 400) {
+            msg.setMessage(map.get("msg").toString());
+            return msg;
+        }
         //---------------生成订单 --- end -----------------------
 
+        //支付
+        ResultMsg resultMsg = this.pay((AgentOrder) map.get("agentOrder"),openId);
+
+        if (resultMsg.getResultCode() == ResultInfo.SUCCESSCODE){
+            msg.setResultCode(ResultInfo.SUCCESSCODE);
+            msg.setMessage(NameUtils.getConfig("SUCCESSINFO"));
+            msg.setStatus(true);
+        }else{
+            msg.setResultCode(ResultInfo.ERRORCODE);
+            msg.setMessage(NameUtils.getConfig("ERRORINFO"));
+            msg.setStatus(true);
+        }
+        msg.setData(resultMsg.getData());
+        return msg;
+    }
 
+    /**
+     * 代理商订单支付调用
+     * @param agentOrder  订单
+     * @param openId
+     * @return
+     */
+    private ResultMsg  pay(AgentOrder agentOrder,String openId){
+        boolean flag = false;
+        ResultMsg msg = new ResultMsg();
 
+        SendPayDto dto = new SendPayDto();
+        dto.setSuccess(false);
+        //查询订单项
+        List<AgentOrderItem> agentOrderList = agentPurchaseOrderService.listAgentOrderItemByOrderId(agentOrder.getAgentOrderid());
+        if(agentOrderList == null || agentOrderList.size() < 1){
+            msg.setResultCode(ResultInfo.ERRORCODE);
+            msg.setMessage("查询订单报错");
+            msg.setStatus(false);
+            msg.setData(dto);
+            return msg;
+        }
 
-//        OrderPayDto dto = new OrderPayDto();
-        //回显用户支付过的地址信息
-//        Order order = cartService.getOrderRecentAddress(member.getUserOpenid());
-//        if(order!=null){
-//            HashMap<String,String> map = new HashMap<String,String>();
-//            //map.put("orderId", order.getSalesOrderid());
-//            map.put("salesAddressName", order.getSalesAddressName());
-//            map.put("salesAddressInfo", order.getSalesAddressInfo());
-//            map.put("salesAddressTel", order.getSalesAddressTel());
-//            map.put("salesAddressPostnum", order.getSalesAddressPostnum());
-//            dto.setAddressInfo(map);
-//        }
-//
-//        msg.setResultCode(ResultInfo.SUCCESSCODE);
-//        msg.setMessage(NameUtils.getConfig("SUCCESSINFO"));
-//        msg.setData(dto);
-//        msg.setStatus(true);
+        if (agentOrder.getAgentYetAmount() > 0) {
+            // 发起支付
+            PayResult result = payService.requestPay(openId, agentOrder.getAgentOrderid(), agentOrder.getAgentYetAmount(), agentOrderList.get(0).getItemProductName() + "...", NameUtils.getConfig("WECHAT_AGENT_PURCHASE_ORDER_BACK"));
+            if (result.isPaySuccess()) {
+                dto.setInfo(result.getPayData());
+                dto.setSuccess(true);
+                dto.setOrderId(agentOrder.getAgentOrderid());
+                flag = true;
+            } else {
+                dto.setSuccess(false);
+                dto.setInfo(result.getPayData());
+                dto.setOrderId(agentOrder.getAgentOrderid());
+                flag = false;
+            }
+        } else if (agentOrder.getAgentYetAmount() == 0) {
+            dto.setInfo("isOK");
+            dto.setSuccess(true);
+            dto.setOrderId(agentOrder.getAgentOrderid());
+            flag = true;
+        } else {
+            msg.setResultCode(ResultInfo.ERRORCODE);
+            msg.setMessage(ResultInfo.paramFormatError);
+            return msg;
+        }
 
+        if(flag){
+            msg.setResultCode(ResultInfo.SUCCESSCODE);
+            msg.setMessage(NameUtils.getConfig("SUCCESSINFO"));
+            msg.setData(dto);
+            msg.setStatus(true);
+        }else {
+            msg.setResultCode(ResultInfo.ERRORCODE);
+            msg.setMessage(NameUtils.getConfig("ERRORINFO"));
+            msg.setData(dto);
+            msg.setStatus(false);
+        }
         return msg;
     }
 
-
     /**
      * 支付前的验证
+     *
      * @param agentOrder
      * @return
      */
-    public boolean isValiAgentOrder(AgentOrder agentOrder){
-        if(agentOrder.getAgentAddressInfo() == null || agentOrder.getAgentAddressInfo() == ""){
+    public boolean isValiAgentOrder(AgentOrder agentOrder) {
+        if (agentOrder.getAgentAddressInfo() == null || agentOrder.getAgentAddressInfo() == "") {
             return false;
         }
-        if (agentOrder.getAgentAddressName() == null || agentOrder.getAgentAddressName() == ""){
+        if (agentOrder.getAgentAddressName() == null || agentOrder.getAgentAddressName() == "") {
             return false;
         }
-        if (agentOrder.getAgentAddressPostnum() == null || agentOrder.getAgentAddressPostnum() == ""){
+        if (agentOrder.getAgentAddressPostnum() == null || agentOrder.getAgentAddressPostnum() == "") {
             return false;
         }
-        if (agentOrder.getAgentAddressTel() == null){
+        if (agentOrder.getAgentAddressTel() == null) {
             return false;
         }
-        if(agentOrder.getAgentOrderItemJson() == null || agentOrder.getAgentOrderItemJson() == ""){
+        if (agentOrder.getAgentOrderItemJson() == null || agentOrder.getAgentOrderItemJson() == "") {
             return false;
         }
         return true;

+ 2 - 0
tooth-wechat-web/src/main/resources/platform.properties

@@ -17,6 +17,8 @@ MACHINE_CODE=B
 WECHAT_BACK_URL=http://test.iamberry.com/tooth/wechatBack
 # order details url
 WECHAT_ORDER_BACK=http://test.iamberry.com/tooth/callback/orderPayBack
+# order details url
+WECHAT_AGENT_PURCHASE_ORDER_BACK=http://test.iamberry.com/tooth/callback/agentOrderPayBack
 #rentOrder url
 WECHAT_RENT_ORDER_BACK = http://test.iamberry.com/tooth/callback/rentOrderPayBack
 # \u7EED\u8D39