李天标 5 роки тому
батько
коміт
d4cfee2b87

+ 317 - 0
src/main/java/com/shawn/model/entity/Mch.java

@@ -0,0 +1,317 @@
+package com.shawn.model.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Mch {
+    
+	@ApiModelProperty(value="id")
+	private Long id;
+
+	/**
+	 * 商家id
+	 */
+	@ApiModelProperty(value="")
+	private Long adminId;
+
+	/**
+	 * 开通状态
+	 */
+	@ApiModelProperty(value="")
+	private String status;
+
+
+
+	/**
+	 *
+	 *
+	 *  >>>>>>>>>>>>>>>>>>>     官方字段     >>>>>>>>>>>>>>>>>>>>>>>>>
+	 *
+	 *
+	 *
+	 */
+
+	/**
+	 * 分账方登录名,即邮箱
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String login_name;
+
+	/**
+	 * 分账方名称
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String alt_mch_name;
+
+	/**
+	 * 分账方商户简称
+	 * 选填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String alt_mch_short_name;
+
+	/**
+	 * 分账方商户类型
+	 * 10:个人,11:个体工商户,12:企业
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private Integer alt_merchant_type;
+
+	/**
+	 * 业务联系人姓名
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String busi_contact_name;
+
+	/**
+	 * 业务联系人手机
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String busi_contact_mobile_no;
+
+	/**
+	 * 法人手机号
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String phone_no;
+
+	/**
+	 * 经营范围
+	 * 选填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String manage_scope;
+
+	/**
+	 * 经营地址
+	 * 选填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String manage_addr;
+
+	/**
+	 * 法人姓名
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String legal_person;
+
+	/**
+	 * 身份证号
+	 * 法人身份证号
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String id_card_no;
+
+	/**
+	 * 身份证有效期
+	 * 非必填,若传则按照格式(例如:2030-11-10)
+	 * 选填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String id_card_expiry;
+
+	/**
+	 * 营业执照编号
+	 * 个体工商户和企业必填
+	 * 选填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String license_no;
+
+	/**
+	 * 营业执照有效期
+	 * 若传则按照格式(如:2033-10-11)
+	 * 选填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String license_expiry;
+
+	/**
+	 * 结算方式
+	 * 1 由汇聚自动结算
+	 * 2 由商户平台手工结算(结算接口)
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private Integer sett_mode;
+
+	/**
+	 * 结算周期类型
+	 * 1 工作日,2 自然日,3 月结日
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private Integer sett_date_type;
+
+	/**
+	 * 结算周期
+	 * 结算日(1-28 的自然日)
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private Integer risk_day;
+
+	/**
+	 * 账户类型
+	 * 1 借记卡,4 对公账户
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private Integer bank_account_type;
+
+	/**
+	 * 银行账户名称,分账方结算银行账户名称
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String bank_account_name;
+
+	/**
+	 * 银行账号
+	 * 分账方结算银行账号
+	 * 必填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String bank_account_no;
+
+	/**
+	 * 联行号
+	 * 联行号,分账方结算账户类型为对公必填
+	 * 选填;参与签名
+	 */
+	@ApiModelProperty(value="")
+	private String bank_channel_no;
+
+	/**
+	 *
+	 *
+	 *  >>>>>>>>>>>>>>>>>>>     分销商账户     >>>>>>>>>>>>>>>>>>>>>>>>>
+	 *
+	 *
+	 *
+	 */
+
+	/**
+	 * 主账户余额 : 收款余额 + 待清算余额 + 余额账户余额 , 金额以分为单位
+	 */
+	@ApiModelProperty(value="")
+	private BigDecimal alt_main_balance;
+
+	/**
+	 * 担保账户 : 担保账户里面得担保余额,金额以分为单位
+	 */
+	@ApiModelProperty(value="")
+	private BigDecimal alt_guar_balance;
+
+	/**
+	 * 可取余额账户 : 余额账户的余额 — 风控冻结金额,金额以分为单位
+	 */
+	@ApiModelProperty(value="")
+	private BigDecimal alt_avil_balance;
+
+
+
+
+	/**
+	 *
+	 *
+	 *  >>>>>>>>>>>>>>>>>>>     接口分销商返回码缓存     >>>>>>>>>>>>>>>>>>>>>>>>>
+	 *
+	 *
+	 *
+	 */
+
+	/**
+	 * 受理响应码
+	 */
+	@ApiModelProperty(value="")
+	private String resp_code;
+
+	/**
+	 * 商户状态
+	 */
+	@ApiModelProperty(value="")
+	private String order_status;
+
+	/**
+	 * 业务响应码
+	 */
+	@ApiModelProperty(value="")
+	private String biz_code;
+
+	/**
+	 * 签约状态
+	 */
+	@ApiModelProperty(value="")
+	private String sign_status;
+	/**
+	 * 签约流水号
+	 */
+	@ApiModelProperty(value="")
+	private String sign_trx_no;
+	/**
+	 * 图片审核状态
+	 */
+	@ApiModelProperty(value="")
+	private String approve_status;
+	/**
+	 * 图片审核备注
+	 */
+	@ApiModelProperty(value="")
+	private String approve_note;
+
+	/**
+	 *
+	 *
+	 *  >>>>>>>>>>>>>>>>>>>     创建成功,保存的分账方信息     >>>>>>>>>>>>>>>>>>>>>>>>>
+	 *
+	 *
+	 *
+	 */
+
+	/**
+	 * 分账方账号
+	 */
+	@ApiModelProperty(value="")
+	private String alt_mch_no;
+
+	/**自定义统一方法设置主键**/
+	public void setPrimaryKey(Long primaryKey) {
+		 setId(primaryKey);
+	}
+
+	/**自定义统一方法获取主键**/
+	@JsonIgnore
+	public Long getPrimaryKey() {
+		 return getId();
+	}
+
+	/**判断该实体是否存在主键**/
+	public boolean hasPrimaryKey() {
+		return true;
+	}
+
+}

+ 57 - 0
src/main/java/com/shawn/model/entity/TPrice.java

@@ -0,0 +1,57 @@
+package com.shawn.model.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class TPrice {
+    
+	@ApiModelProperty(value="id")
+	private Long id;
+
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value="添加时间")
+	private Date createDate;
+
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value="修改时间")
+	private Date modifyDate;
+
+	@ApiModelProperty(value="")
+	private String name;
+
+	@ApiModelProperty(value="广告类型")
+	private Double price;
+
+	/**自定义统一方法设置主键**/
+	public void setPrimaryKey(Long primaryKey) {
+		 setId(primaryKey);
+	}
+
+	/**自定义统一方法获取主键**/
+	@JsonIgnore
+	public Long getPrimaryKey() {
+		 return getId();
+	}
+
+	/**判断该实体是否存在主键**/
+	public boolean hasPrimaryKey() {
+		return true;
+	}
+
+}

+ 6 - 0
src/main/java/com/shawn/model/param/StatisticsParam.java

@@ -39,4 +39,10 @@ public class StatisticsParam {
 
     @ApiModelProperty(value="清洗规则")
     private String rule;
+
+    @ApiModelProperty(value="0:按天数,1:按次数")
+    private String type;
+
+    @ApiModelProperty(value="价格")
+    private Double price;
 }

+ 5 - 0
src/main/java/com/shawn/repository/TPromoCodeMapper.java

@@ -1,5 +1,7 @@
 package com.shawn.repository;
 
+import com.shawn.model.entity.Mch;
+import com.shawn.model.entity.TPrice;
 import com.shawn.model.entity.TPromoCode;
 import com.shawn.model.entity.TPromoCodeExample;
 import com.shawn.model.param.TPromoCodeParam;
@@ -8,4 +10,7 @@ import com.shawn.repository.base.BaseDaoInterface;
 public interface TPromoCodeMapper extends BaseDaoInterface<TPromoCode, TPromoCodeExample, TPromoCodeParam,Integer>{
 
     Double findPrice();
+    TPrice selectPriceByName(String name);
+
+    Mch getMch(Long adminId);
 }

+ 94 - 0
src/main/java/com/shawn/service/impl/TOrderServiceImpl.java

@@ -5,6 +5,7 @@
 
 package com.shawn.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.shawn.constant.ChartType;
 import com.shawn.model.Bean.*;
 import com.shawn.model.entity.*;
@@ -17,13 +18,22 @@ import com.shawn.service.base.BaseService;
 import com.shawn.service.interfac.TAdminServiceInterface;
 import com.shawn.service.interfac.TAreaServiceInterface;
 import com.shawn.service.interfac.TOrderServiceInterface;
+import com.shawn.util.HttpClientUtils;
+import com.shawn.util.JoinpayConstant;
 import com.shawn.web.exception.MyException;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.http.message.BasicNameValuePair;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.*;
 
 @Slf4j
@@ -267,8 +277,92 @@ public class TOrderServiceImpl extends BaseService<TOrder, TOrderExample, TOrder
         chartColumn.setCategories(categories);
         return chartColumn;
     }
+
+    @Override
+    public String uniPay(String orderNo, BigDecimal amount, String productName, String productDesc, String commonParameter, String returnUrl, String notifyUrl, String frpCode, String isShowPic, String openId, String authCode, String appid, String transactionModel, String tradeMerchantNo, String buyerId, String isAlt, String altType, JSONArray altInfo, String altUrl, BigDecimal marketingAmount) {
+        String url = "https://www.joinpay.com/trade/uniPayApi.action";
+
+
+        List<BasicNameValuePair> data = new ArrayList<BasicNameValuePair>();
+
+
+
+        data.add(new BasicNameValuePair("p0_Version", JoinpayConstant.pay_version));
+        data.add(new BasicNameValuePair("p1_MerchantNo", JoinpayConstant.mch_no));
+        data.add(new BasicNameValuePair("p2_OrderNo", orderNo));
+        data.add(new BasicNameValuePair("p3_Amount", amount.setScale(2, RoundingMode.HALF_DOWN).toString()));
+        data.add(new BasicNameValuePair("p4_Cur", JoinpayConstant.Cur_RMB));
+        try {
+            data.add(new BasicNameValuePair("p5_ProductName", URLEncoder.encode(productName, "utf-8")));
+            data.add(new BasicNameValuePair("p6_ProductDesc", URLEncoder.encode(productDesc, "utf-8")));
+            data.add(new BasicNameValuePair("p7_Mp", URLEncoder.encode(commonParameter, "utf-8")));
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        data.add(new BasicNameValuePair("p8_ReturnUrl", returnUrl));
+        data.add(new BasicNameValuePair("p9_NotifyUrl", notifyUrl));
+        data.add(new BasicNameValuePair("q1_FrpCode", frpCode));
+        data.add(new BasicNameValuePair("q2_MerchantBankCode", ""));
+        data.add(new BasicNameValuePair("q4_IsShowPic", isShowPic));
+        data.add(new BasicNameValuePair("q5_OpenId", openId));
+        data.add(new BasicNameValuePair("q6_AuthCode", authCode));
+        data.add(new BasicNameValuePair("q7_AppId", appid));
+        data.add(new BasicNameValuePair("q8_TerminalNo", ""));
+        data.add(new BasicNameValuePair("q9_TransactionModel", transactionModel));
+        data.add(new BasicNameValuePair("qa_TradeMerchantNo", ""));
+        data.add(new BasicNameValuePair("qb_buyerId", buyerId));
+        data.add(new BasicNameValuePair("qc_IsAlt", isAlt));
+        data.add(new BasicNameValuePair("qd_AltType", altType));
+        data.add(new BasicNameValuePair("qe_AltInfo", altInfo==null?null:altInfo.toString()));
+        data.add(new BasicNameValuePair("qf_AltUrl", altUrl));
+
+        data.add(new BasicNameValuePair("qg_MarketingAmount", marketingAmount==null?null:marketingAmount.setScale(2, RoundingMode.HALF_DOWN).toString()));
+
+        // TODO: 2019-04-01  空值不参与签名!!!!!!!!!!!!!!!!!!
+
+
+        String hmac = null;
+        try {
+            hmac = createHmacSign(data, JoinpayConstant.key);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        data.add(new BasicNameValuePair("hmac", hmac));
+//        logger.info("请求参数:" + data);
+
+        String result =  HttpClientUtils.postKeyValue(url, data);
+//        logger.info("响应参数:" + result);
+
+        return result;
+    }
+
     @Override
     public Double getAreaPrice(Map<String, Object> params) {
         return tOrderMapper.getAreaPrice(params);
     }
+    /**
+     * 签名算法sign , hmac 签名
+     *
+     * @param data
+     * @return
+     */
+    public static String createHmacSign( List<BasicNameValuePair> data , String key) throws UnsupportedEncodingException {
+
+        StringBuffer sb = new StringBuffer();
+        Iterator<BasicNameValuePair> es = data.iterator();
+        while (es.hasNext()) {
+            BasicNameValuePair entry = (BasicNameValuePair) es.next();
+            String k = (String) entry.getName();
+            String v = (String) entry.getValue();
+            if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
+                sb.append(URLDecoder.decode(String.valueOf(v), "utf-8"));
+            }
+        }
+
+        sb.append(key);
+//        logger.info("签名字符串:" + sb.toString());
+        String sign = DigestUtils.md5Hex(sb.toString());
+        return sign;
+    }
 }

+ 15 - 0
src/main/java/com/shawn/service/impl/TPromoCodeServiceImpl.java

@@ -1,6 +1,8 @@
 package com.shawn.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
+import com.shawn.model.entity.Mch;
+import com.shawn.model.entity.TPrice;
 import com.shawn.model.entity.TPromoCode;
 import com.shawn.model.entity.TPromoCodeExample;
 import com.shawn.model.param.TPromoCodeParam;
@@ -100,6 +102,19 @@ public class TPromoCodeServiceImpl extends BaseService<TPromoCode, TPromoCodeExa
 
         return result;
     }
+    //获取价格
+    @Override
+    public TPrice getPrice(String name) {
+        TPrice price = tPromoCodeMapper.selectPriceByName(name);
+        return price;
+    }
+
+    @Override
+    public Mch getMch(Long adminId) {
+        Mch mch = tPromoCodeMapper.getMch(adminId);
+        return mch;
+    }
+
     /**
      * 签名算法sign , hmac 签名
      *

+ 5 - 0
src/main/java/com/shawn/service/interfac/TOrderServiceInterface.java

@@ -5,6 +5,7 @@
 
 package com.shawn.service.interfac;
 
+import com.alibaba.fastjson.JSONArray;
 import com.shawn.model.Bean.ChartBean;
 import com.shawn.model.Bean.ChartColumn;
 import com.shawn.model.Bean.ChartColumn2;
@@ -14,6 +15,7 @@ import com.shawn.model.param.StatisticsParam;
 import com.shawn.model.param.TOrderParam;
 import com.shawn.service.base.BaseServiceInterface;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -39,4 +41,7 @@ public interface TOrderServiceInterface extends BaseServiceInterface<TOrder,TOrd
     Double getAreaPrice(Map<String, Object> params);
 
     ChartColumn2 getProvinceAll(StatisticsParam param);
+
+    String uniPay(String orderNo, BigDecimal amount, String productName, String productDesc, String commonParameter, String returnUrl, String notifyUrl, String frpCode, String isShowPic, String openId, String authCode, String appid, String transactionModel, String tradeMerchantNo, String buyerId, String isAlt, String altType, JSONArray altInfo, String altUrl, BigDecimal marketingAmount);
+
 }

+ 5 - 0
src/main/java/com/shawn/service/interfac/TPromoCodeServiceInterface.java

@@ -1,6 +1,8 @@
 package com.shawn.service.interfac;
 
 import com.alibaba.fastjson.JSONArray;
+import com.shawn.model.entity.Mch;
+import com.shawn.model.entity.TPrice;
 import com.shawn.model.entity.TPromoCode;
 import com.shawn.model.entity.TPromoCodeExample;
 import com.shawn.model.param.TPromoCodeParam;
@@ -13,5 +15,8 @@ public interface TPromoCodeServiceInterface extends BaseServiceInterface<TPromoC
     Double findPrice();
 
     String uniPay(String orderNo, BigDecimal amount, String productName, String productDesc, String commonParameter, String returnUrl, String notifyUrl, String frpCode, String isShowPic, String openId, String authCode, String appid, String transactionModel, String tradeMerchantNo, String buyerId, String isAlt, String altType, JSONArray altInfo, String altUrl, BigDecimal marketingAmount);
+    //获取价格
+    TPrice getPrice(String name);
 
+    Mch getMch(Long adminId);
 }

+ 403 - 3
src/main/java/com/shawn/web/controller/TOrderController.java

@@ -5,25 +5,32 @@
 
 package com.shawn.web.controller;
 
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.shawn.model.Bean.ChartBean;
 import com.shawn.model.Bean.ChartColumn;
 import com.shawn.model.Bean.ChartColumn2;
+import com.shawn.model.entity.*;
 import com.shawn.model.param.StatisticsParam;
+import com.shawn.service.interfac.*;
 import com.shawn.util.FgObjectUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import com.shawn.model.dto.ResultMessage;
 import com.shawn.web.controller.base.BaseController;
-import com.shawn.model.entity.TOrder;
-import com.shawn.model.entity.TOrderExample;
 import com.shawn.model.param.TOrderParam;
-import com.shawn.service.interfac.TOrderServiceInterface;
 
 @Slf4j
 @RestController
@@ -32,6 +39,14 @@ public class TOrderController extends BaseController<TOrder,TOrderExample,TOrder
 	@Autowired
 	private TOrderServiceInterface tOrderService;
 	@Autowired
+	private TEquipmentServiceInterface tEquipmentServiceInterface;
+	@Autowired
+	private TProportionServiceInterface tProportionServiceInterface;
+	@Autowired
+	private TAdminServiceInterface tAdminServiceInterface;
+	@Autowired
+	private TPromoCodeServiceInterface tPromoCodeServiceInterface;
+	@Autowired
 	public TOrderController(TOrderServiceInterface service) {
 		super(service);
 	}
@@ -122,4 +137,389 @@ public class TOrderController extends BaseController<TOrder,TOrderExample,TOrder
 						.setData(chartColumn)
 						.setMessage("SUCCESS"));
 	}
+
+	@PostMapping("/pay")
+	public ResponseEntity<?> pay(@RequestBody StatisticsParam param) {
+		Long equipmentId = Long.valueOf(param.getEquipmentId());
+		String adminId = param.getAdminId();
+		String payType = param.getType();
+		Double price1 = param.getPrice();
+		String frpCode = "WEIXIN_NATIVE";
+		TEquipment equipment = tEquipmentServiceInterface.selectEntityById(equipmentId);
+
+
+
+		BigDecimal price = BigDecimal.valueOf(price1);
+		if (BigDecimal.ZERO.compareTo(price) >= 0) {
+			return null;
+		}
+
+		String sn = initSn(equipmentId);
+
+		TProportionExample example = new TProportionExample();
+		TProportionExample.Criteria criteria = example.createCriteria();
+		criteria.andAdminIdEqualTo(Long.valueOf(adminId));
+		List<TProportion> tProportions = tProportionServiceInterface.selectByOption(example);
+		TProportion proportion =tProportions.get(0);
+
+		if (proportion == null) {
+			return ResponseEntity
+					.status(HttpStatus.OK)
+					.body(new ResultMessage()
+							.setCode(true)
+							.setData("设备商家未完成分销设置")
+							.setMessage("设备商家未完成分销设置"));
+		}
+
+		TAdmin admin = tAdminServiceInterface.selectEntityById(Long.valueOf(adminId));
+		if (admin == null) {
+			return ResponseEntity
+					.status(HttpStatus.OK)
+					.body(new ResultMessage()
+							.setCode(true)
+							.setData("找不到设备商家")
+							.setMessage("找不到设备商家"));
+		}
+
+		Integer type = proportion.getType();
+		JSONArray altInfo = new JSONArray();
+		JSONArray altNewInfo = new JSONArray();
+
+		BigDecimal adminProportion = null, agencyProportion = null, merchantProportion = null, personageProportion = null;
+		Long agencyId = admin.getAgencyId();
+		Long merchantId = admin.getMerchantId();
+		Long personageId = admin.getPersonageId();
+//		TOrder.Type orderType = null;
+		Integer orderType = null;
+
+		if (type == null) {
+			return ResponseEntity
+					.status(HttpStatus.OK)
+					.body(new ResultMessage()
+							.setCode(true)
+							.setData("设备商家未完成分销设置")
+							.setMessage("设备商家未完成分销设置"));
+		}
+
+		BigDecimal agencyAmount = null;
+		BigDecimal merchantAmount = null;
+		BigDecimal personageAmount = null;
+
+		Mch agencyMch = null;
+		Mch merchantMch = null;
+		Mch personageMch = null;
+
+		JSONObject agencyJson = null;
+		JSONObject merchantJson = null;
+		JSONObject personageJson = null;
+
+		// 砍掉千6手续费
+//        BigDecimal cutPrice = price.multiply(new BigDecimal(99.4)).divide(new BigDecimal(100));
+		//取消平台扣手续费
+		BigDecimal cutPrice = price.multiply(new BigDecimal(100)).divide(new BigDecimal(100));
+
+		switch (type) {
+
+			case 1:
+
+				if (admin.getType() != 1) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家类型错误")
+									.setMessage("设备商家类型错误"));
+				}
+
+				agencyMch = tPromoCodeServiceInterface.getMch(admin.getAgencyId());
+				if (agencyMch == null || StringUtils.isBlank(agencyMch.getOrder_status())) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家未注册提现账户")
+									.setMessage("设备商家未注册提现账户"));
+				}
+
+				agencyProportion = BigDecimal.valueOf(proportion.getAgencyProportion());
+				adminProportion = BigDecimal.valueOf(proportion.getAdminProportion());
+//				orderType = TOrder.Type.agency;
+				orderType = 1;
+
+				// 代理分销获得利润
+				agencyAmount = cutPrice.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
+
+				agencyJson = new JSONObject();
+				agencyJson.put("altMchNo", agencyMch.getAlt_mch_no());
+				agencyJson.put("altAmount", agencyAmount.toString());
+				agencyJson.put("isGuar", "12");
+				altInfo.add(agencyJson);
+
+				break;
+
+			case 2:
+
+				if (admin.getType() != 2) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家类型错误")
+									.setMessage("设备商家类型错误"));
+				}
+
+				agencyMch =tPromoCodeServiceInterface.getMch(admin.getAgencyId());
+				merchantMch = tPromoCodeServiceInterface.getMch(admin.getMerchantId());
+
+				if (agencyMch == null || StringUtils.isBlank(agencyMch.getOrder_status())) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家未注册提现账户")
+									.setMessage("设备商家未注册提现账户"));
+				}
+
+				if (merchantMch == null || StringUtils.isBlank(merchantMch.getOrder_status())) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家未注册提现账户")
+									.setMessage("设备商家未注册提现账户"));
+				}
+
+				agencyProportion = BigDecimal.valueOf(proportion.getAgencyProportion());
+				adminProportion = BigDecimal.valueOf(proportion.getAdminProportion());
+				merchantProportion = BigDecimal.valueOf(proportion.getMerchantProportion());
+				orderType = 2;
+
+				// 代理分销获得利润
+				agencyAmount = cutPrice.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
+
+				// 经销商分销获得利润
+				merchantAmount = cutPrice.multiply(merchantProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
+
+				agencyJson = new JSONObject();
+				agencyJson.put("altMchNo", agencyMch.getAlt_mch_no());
+				agencyJson.put("altAmount", agencyAmount.toString());
+				agencyJson.put("isGuar", "12");
+				altInfo.add(agencyJson);
+
+				merchantJson = new JSONObject();
+				merchantJson.put("altMchNo", merchantMch.getAlt_mch_no());
+				merchantJson.put("altAmount", merchantAmount.toString());
+				merchantJson.put("isGuar", "12");
+				altInfo.add(merchantJson);
+
+				break;
+			case 3:
+
+				if (admin.getType() != 3) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家类型错误")
+									.setMessage("设备商家类型错误"));
+				}
+
+
+				agencyMch =tPromoCodeServiceInterface.getMch(admin.getAgencyId());
+				merchantMch = tPromoCodeServiceInterface.getMch(admin.getMerchantId());
+				personageMch =tPromoCodeServiceInterface.getMch(admin.getPersonageId());
+
+
+				if (agencyMch == null || StringUtils.isBlank(agencyMch.getOrder_status())) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家未注册提现账户")
+									.setMessage("设备商家未注册提现账户"));
+				}
+
+				if (merchantMch == null || StringUtils.isBlank(merchantMch.getOrder_status())) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家未注册提现账户")
+									.setMessage("设备商家未注册提现账户"));
+				}
+
+				if (personageMch == null || StringUtils.isBlank(personageMch.getOrder_status())) {
+					return ResponseEntity
+							.status(HttpStatus.OK)
+							.body(new ResultMessage()
+									.setCode(true)
+									.setData("设备商家未注册提现账户")
+									.setMessage("设备商家未注册提现账户"));
+				}
+
+				agencyProportion = BigDecimal.valueOf(proportion.getAgencyProportion());
+				adminProportion = BigDecimal.valueOf(proportion.getAdminProportion());
+				merchantProportion = BigDecimal.valueOf(proportion.getMerchantProportion());
+				personageProportion = BigDecimal.valueOf(proportion.getPersonageProportion());
+
+				orderType = 3;
+
+				// 代理分销获得利润
+				agencyAmount = cutPrice.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
+
+				// 经销商分销获得利润
+				merchantAmount = cutPrice.multiply(merchantProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
+
+				// 经销商分销获得利润
+				personageAmount = cutPrice.multiply(personageProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
+
+				agencyJson = new JSONObject();
+				agencyJson.put("altMchNo", agencyMch.getAlt_mch_no());
+				agencyJson.put("altAmount", agencyAmount.toString());
+				agencyJson.put("isGuar", "12");
+				altInfo.add(agencyJson);
+
+				merchantJson = new JSONObject();
+				merchantJson.put("altMchNo", merchantMch.getAlt_mch_no());
+				merchantJson.put("altAmount", merchantAmount.toString());
+				merchantJson.put("isGuar", "12");
+				altInfo.add(merchantJson);
+
+				personageJson = new JSONObject();
+				personageJson.put("altMchNo", personageMch.getAlt_mch_no());
+				personageJson.put("altAmount", personageAmount.toString());
+				personageJson.put("isGuar", "12");
+				altInfo.add(personageJson);
+				break;
+
+
+		}
+
+
+		String orderNo = sn;
+		BigDecimal amount = price;
+		String productDesc = "";
+		String commonParameter = "";
+		String returnUrl = null;
+		String notifyUrl = "http://app.sunzee.com.cn/api/order/notify.htm";
+		String isShowPic = "1";
+		String openId = null;
+		String authCode = null;
+		String appid = null;
+		String transactionModel = null;
+		String tradeMerchantNo = null;
+		String buyerId = null;
+		String isAlt = "1";
+		String altType = "11";
+		String altUrl = null;
+		BigDecimal marketingAmount = null;
+		String productName = "";
+		if(payType.equals("0")){
+			productName = "按天数购买";
+		}else{
+			productName = "按次数购买";
+
+		}
+
+//		TOrder order = new TOrder(sn, 0, productName, price, equipment.getClientId(), equipmentId,
+//				orderType, admin.getId(), agencyId, merchantId, personageId,
+//				frpCode, altInfo.toString(), adminProportion, agencyProportion, merchantProportion, personageProportion,);
+
+//		orderService.create(order);
+		TOrder order1 = new TOrder();
+		order1.setSn(sn);
+		order1.setType(orderType);
+		order1.setAgencyId(agencyId);
+		order1.setMerchantId(merchantId);
+		order1.setPersonageId(personageId);
+		order1.setAdminId(admin.getId());
+		order1.setProductName(productName);
+		float p = Float.parseFloat(price1.toString());
+		order1.setPrice(p);
+		order1.setEquipmentId(equipmentId);
+		order1.setClientId(equipment.getClientId());
+		order1.setStatus(0);
+		order1.setTrxNo(productName);
+		order1.setCreateDate(new Date());
+		order1.setModifyDate(new Date());
+		order1.setFrpCode(frpCode);
+		tOrderService.insert(order1);
+
+		Iterator<Object> iterator = altInfo.iterator();
+		while (iterator.hasNext()) {
+			JSONObject jsonObject = (JSONObject) iterator.next();
+			String altAmount = jsonObject.getString("altAmount");
+			if (altAmount.equals("0.00")) {
+				iterator.remove();
+			}
+		}
+//		String client6= clientId.substring(clientId.length()-6,clientId.length());
+//		productName=productName+"-"+equipment.getName()+"-"+client6;
+		String result = null;
+		try {
+			result = tOrderService.uniPay(
+
+					orderNo, amount, productName, productDesc,
+					commonParameter, returnUrl, notifyUrl, frpCode,
+					isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
+					buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
+			);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			return ResponseEntity
+					.status(HttpStatus.OK)
+					.body(new ResultMessage()
+							.setCode(true)
+							.setData("申请支付失败")
+							.setMessage("申请支付失败"));
+		}
+
+		JSONObject resultJson = JSONObject.parseObject(result);
+		// 汇聚支付支付申请返回支付二维码图片
+		String rd_Pic = resultJson.getString("rd_Pic");
+//        Map<String,String> map2 = new HashMap<>();
+//        map2.put("sn",sn);
+//        map2.put("rd_Pic",rd_Pic);
+		if (resultJson == null || StringUtils.isBlank(rd_Pic)) {
+			return ResponseEntity
+					.status(HttpStatus.OK)
+					.body(new ResultMessage()
+							.setCode(true)
+							.setData("找不到支付图片")
+							.setMessage("找不到支付图片"));
+		}
+//        send(clientId,sn,productName);
+//        return JsonMessage.success(rd_Pic);
+//		JSONObject kindData = new JSONObject();
+//		kindData.put("sn" , sn);
+//		kindData.put("rd_Pic",rd_Pic);
+		return ResponseEntity
+				.status(HttpStatus.OK)
+				.body(new ResultMessage()
+						.setCode(true)
+						.setData(rd_Pic)
+						.setMessage("SUCCESS"));
+	}
+	private String initSn(Long equipmentId) {
+		StringBuilder number = new StringBuilder();
+		if (equipmentId != null) {
+			Random random = new Random();
+			/**
+			 * 6位随机
+			 */
+			for (int i = 0; i < 6; i++) {
+				number.append(String.valueOf(random.nextInt(10)));
+			}
+			/**
+			 * 设备id
+			 */
+			number.append(equipmentId.toString());
+			/**
+			 * 日期
+			 */
+			number.append(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
+		}
+		return number.toString();
+	}
 }

+ 11 - 0
src/main/java/com/shawn/web/controller/TPromoCodeController.java

@@ -92,6 +92,17 @@ public class TPromoCodeController extends BaseController<TPromoCode, TPromoCodeE
                 .body(new ResultMessage().setCode(true).setData(price).setMessage("SUCCESS"));
     }
     /**
+     * 获取价格
+     * @param
+     * @return
+     */
+    @PostMapping("/getPrice")
+    public ResponseEntity<?> getPrice(@RequestBody String name) {
+        TPrice price = tPromoCodeService.getPrice(name);
+        return ResponseEntity.status(HttpStatus.OK)
+                .body(new ResultMessage().setCode(true).setData(price.getPrice()).setMessage("SUCCESS"));
+    }
+    /**
      * 购买优惠码
      * @param
      * @return

+ 7 - 0
src/main/resources/com/shawn/repository/mybatis/TPromoCodeMapper.xml

@@ -128,6 +128,13 @@
   <select id="findPrice" resultType="java.lang.Double">
     select price from t_price where name="优惠码"
   </select>
+  <select id="selectPriceByName" parameterType="string" resultType="com.shawn.model.entity.TPrice">
+    select price from t_price where name =  #{name,jdbcType=VARCHAR}
+  </select>
+  <select id="getMch" parameterType="java.lang.Long" resultType="com.shawn.model.entity.Mch">
+    select * from t_joinpay_mch where admin_id =  #{adminId,jdbcType=INTEGER}
+  </select>
+
 <!--  <insert id="insertSelective" parameterType="com.shawn.model.entity.TPromoCode">-->
 <!--    insert into t_promo_code-->
 <!--    <trim prefix="(" suffix=")" suffixOverrides=",">-->