Ver Fonte

Merge branch 'master' of dq/kmall-pt into master

黄亚琴 há 6 anos atrás
pai
commit
6621792ba6

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/PinganPayOrderDao.java

@@ -14,4 +14,6 @@ public interface PinganPayOrderDao extends BaseDao<PinganPayOrderDto> {
 
     int updateByOutNo(PinganPayOrderDto pinganPayOrder);
 
+    PinganPayOrderDto queryByOutNo(String outNo);
+
 }

+ 135 - 87
kmall-admin/src/main/resources/mybatis/mapper/pingan/PinganPayOrderDao.xml

@@ -3,43 +3,44 @@
 
 <mapper namespace="com.kmall.admin.dao.PinganPayOrderDao">
 
-    <resultMap type="com.kmall.common.utils.pingan.dto.PinganPayOrderDto" id="pinganPayOrderMap">
-        <result property="id" column="id"/>
-        <result property="outNo" column="out_no"/>
-        <result property="pmtName" column="pmt_name"/>
-        <result property="pmtTag" column="pmt_tag"/>
-        <result property="ordMctId" column="ord_mct_id"/>
-        <result property="ordShopId" column="ord_shop_id"/>
-        <result property="ordCurrency" column="ord_currency"/>
-        <result property="currencySign" column="currency_sign"/>
-        <result property="ordNo" column="ord_no"/>
-        <result property="ordType" column="ord_type"/>
-        <result property="originalAmount" column="original_amount"/>
-        <result property="discountAmount" column="discount_amount"/>
-        <result property="ignoreAmount" column="ignore_amount"/>
-        <result property="tradeAccount" column="trade_account"/>
-        <result property="tradeNo" column="trade_no"/>
-        <result property="tradeAmount" column="trade_amount"/>
-        <result property="tradeQrcode" column="trade_qrcode"/>
-        <result property="amount" column="amount"/>
-        <result property="tradeTime" column="trade_time"/>
-        <result property="tradePayTime" column="trade_pay_time"/>
-        <result property="payTime" column="pay_time"/>
-        <result property="status" column="status"/>
-        <result property="tradeResult" column="trade_result"/>
-        <result property="jsapiPayUrl" column="jsapi_pay_url"/>
-        <result property="randStr" column="rand_str"/>
-        <result property="appid" column="appId"/>
-        <result property="noncestr" column="nonceStr"/>
-        <result property="signtype" column="signType"/>
-        <result property="prepayId" column="prepay_id"/>
-        <result property="paysign" column="paySign"/>
-        <result property="createrSn" column="creater_sn"/>
-        <result property="createTime" column="create_time"/>
-        <result property="moderSn" column="moder_sn"/>
-        <result property="modTime" column="mod_time"/>
-        <result property="tstm" column="tstm"/>
-    </resultMap>
+	<resultMap type="com.kmall.common.utils.pingan.dto.PinganPayOrderDto" id="pinganPayOrderMap">
+		<result property="id" column="id"/>
+		<result property="outNo" column="out_no"/>
+		<result property="pmtName" column="pmt_name"/>
+		<result property="pmtTag" column="pmt_tag"/>
+		<result property="ordMctId" column="ord_mct_id"/>
+		<result property="ordShopId" column="ord_shop_id"/>
+		<result property="ordCurrency" column="ord_currency"/>
+		<result property="currencySign" column="currency_sign"/>
+		<result property="ordNo" column="ord_no"/>
+		<result property="ordType" column="ord_type"/>
+		<result property="originalAmount" column="original_amount"/>
+		<result property="discountAmount" column="discount_amount"/>
+		<result property="ignoreAmount" column="ignore_amount"/>
+		<result property="tradeAccount" column="trade_account"/>
+		<result property="tradeNo" column="trade_no"/>
+		<result property="tradeAmount" column="trade_amount"/>
+		<result property="tradeQrcode" column="trade_qrcode"/>
+		<result property="amount" column="amount"/>
+		<result property="tradeTime" column="trade_time"/>
+		<result property="tradePayTime" column="trade_pay_time"/>
+		<result property="payTime" column="pay_time"/>
+		<result property="status" column="status"/>
+		<result property="tradeResult" column="trade_result"/>
+		<result property="jsapiPayUrl" column="jsapi_pay_url"/>
+		<result property="randStr" column="rand_str"/>
+		<result property="appid" column="appId"/>
+		<result property="timeStamp" column="timeStamp"/>
+		<result property="noncestr" column="nonceStr"/>
+		<result property="signtype" column="signType"/>
+		<result property="prepayId" column="prepay_id"/>
+		<result property="paysign" column="paySign"/>
+		<result property="createrSn" column="creater_sn"/>
+		<result property="createTime" column="create_time"/>
+		<result property="moderSn" column="moder_sn"/>
+		<result property="modTime" column="mod_time"/>
+		<result property="tstm" column="tstm"/>
+	</resultMap>
 
 	<select id="queryObject" resultType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
 		select
@@ -69,6 +70,7 @@
 			`jsapi_pay_url`,
 			`rand_str`,
 			`appId`,
+			`timeStamp`,
 			`nonceStr`,
 			`signType`,
 			`prepay_id`,
@@ -82,69 +84,112 @@
 		where id = #{id}
 	</select>
 
-	<select id="queryList" resultType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
+	<select id="queryByOutNo" resultType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
 		select
-    		`id`,
-    		`out_no`,
-    		`pmt_name`,
-    		`pmt_tag`,
-    		`ord_mct_id`,
-    		`ord_shop_id`,
+			`id`,
+			`out_no`,
+			`pmt_name`,
+			`pmt_tag`,
+			`ord_mct_id`,
+			`ord_shop_id`,
 			`ord_currency`,
 			`currency_sign`,
-    		`ord_no`,
-    		`ord_type`,
-    		`original_amount`,
-    		`discount_amount`,
-    		`ignore_amount`,
-    		`trade_account`,
-    		`trade_no`,
-    		`trade_amount`,
-    		`trade_qrcode`,
-    		`amount`,
+			`ord_no`,
+			`ord_type`,
+			`original_amount`,
+			`discount_amount`,
+			`ignore_amount`,
+			`trade_account`,
+			`trade_no`,
+			`trade_amount`,
+			`trade_qrcode`,
+			`amount`,
 			`trade_time`,
-    		`trade_pay_time`,
-    		`pay_time`,
-    		`status`,
-    		`trade_result`,
-    		`jsapi_pay_url`,
-    		`rand_str`,
-    		`appId`,
-    		`nonceStr`,
-    		`signType`,
-    		`prepay_id`,
-    		`paySign`,
-    		`creater_sn`,
-    		`create_time`,
-    		`moder_sn`,
-    		`mod_time`,
-    		`tstm`
+			`trade_pay_time`,
+			`pay_time`,
+			`status`,
+			`trade_result`,
+			`jsapi_pay_url`,
+			`rand_str`,
+			`appId`,
+			`timeStamp`,
+			`nonceStr`,
+			`signType`,
+			`prepay_id`,
+			`paySign`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from pingan_pay_order
+		where out_no = #{outNo}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
+		select
+		`id`,
+		`out_no`,
+		`pmt_name`,
+		`pmt_tag`,
+		`ord_mct_id`,
+		`ord_shop_id`,
+		`ord_currency`,
+		`currency_sign`,
+		`ord_no`,
+		`ord_type`,
+		`original_amount`,
+		`discount_amount`,
+		`ignore_amount`,
+		`trade_account`,
+		`trade_no`,
+		`trade_amount`,
+		`trade_qrcode`,
+		`amount`,
+		`trade_time`,
+		`trade_pay_time`,
+		`pay_time`,
+		`status`,
+		`trade_result`,
+		`jsapi_pay_url`,
+		`rand_str`,
+		`appId`,
+		`timeStamp`,
+		`nonceStr`,
+		`signType`,
+		`prepay_id`,
+		`paySign`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		`tstm`
 		from pingan_pay_order
 		WHERE 1=1
 		<if test="name != null and name.trim() != ''">
 			AND name LIKE concat('%',#{name},'%')
 		</if>
-        <choose>
-            <when test="sidx != null and sidx.trim() != ''">
-                order by ${sidx} ${order}
-            </when>
+		<choose>
+			<when test="sidx != null and sidx.trim() != ''">
+				order by ${sidx} ${order}
+			</when>
 			<otherwise>
-                order by id desc
+				order by id desc
 			</otherwise>
-        </choose>
+		</choose>
 		<if test="offset != null and limit != null">
 			limit #{offset}, #{limit}
 		</if>
 	</select>
-	
- 	<select id="queryTotal" resultType="int">
+
+	<select id="queryTotal" resultType="int">
 		select count(*) from pingan_pay_order
 		WHERE 1=1
-        <if test="name != null and name.trim() != ''">
-            AND name LIKE concat('%',#{name},'%')
-        </if>
+		<if test="name != null and name.trim() != ''">
+			AND name LIKE concat('%',#{name},'%')
+		</if>
 	</select>
-	 
+
 	<insert id="save" parameterType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
 		insert into pingan_pay_order(
 			`id`,
@@ -173,6 +218,7 @@
 			`jsapi_pay_url`,
 			`rand_str`,
 			`appId`,
+			`timeStamp`,
 			`nonceStr`,
 			`signType`,
 			`prepay_id`,
@@ -209,6 +255,7 @@
 			#{jsapiPayUrl},
 			#{randStr},
 			#{appid},
+			#{timeStamp},
 			#{noncestr},
 			#{signtype},
 			#{prepayId},
@@ -221,7 +268,7 @@
 	</insert>
 
 	<update id="update" parameterType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
-		update pingan_pay_order 
+		update pingan_pay_order
 		<set>
 			<if test="outNo != null">`out_no` = #{outNo}, </if>
 			<if test="pmtName != null">`pmt_name` = #{pmtName}, </if>
@@ -248,6 +295,7 @@
 			<if test="jsapiPayUrl != null">`jsapi_pay_url` = #{jsapiPayUrl}, </if>
 			<if test="randStr != null">`rand_str` = #{randStr}, </if>
 			<if test="appid != null">`appId` = #{appid}, </if>
+			<if test="timeStamp != null">`timeStamp` = #{timeStamp}, </if>
 			<if test="noncestr != null">`nonceStr` = #{noncestr}, </if>
 			<if test="signtype != null">`signType` = #{signtype}, </if>
 			<if test="prepayId != null">`prepay_id` = #{prepayId}, </if>
@@ -288,6 +336,7 @@
 			<if test="jsapiPayUrl != null">`jsapi_pay_url` = #{jsapiPayUrl}, </if>
 			<if test="randStr != null">`rand_str` = #{randStr}, </if>
 			<if test="appid != null">`appId` = #{appid}, </if>
+			<if test="timeStamp != null">`timeStamp` = #{timeStamp}, </if>
 			<if test="noncestr != null">`nonceStr` = #{noncestr}, </if>
 			<if test="signtype != null">`signType` = #{signtype}, </if>
 			<if test="prepayId != null">`prepay_id` = #{prepayId}, </if>
@@ -300,16 +349,15 @@
 		</set>
 		where `out_no` = #{outNo}
 	</update>
-	
+
 	<delete id="delete">
 		delete from pingan_pay_order where id = #{value}
 	</delete>
-	
+
 	<delete id="deleteBatch">
-		delete from pingan_pay_order where id in 
+		delete from pingan_pay_order where id in
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 			#{id}
 		</foreach>
 	</delete>
-
 </mapper>

+ 23 - 3
kmall-api/src/main/java/com/kmall/api/api/pingan/ApiPayPinganController.java

@@ -98,7 +98,8 @@ public class ApiPayPinganController extends ApiBaseAction {
                     merchOrderSn = "EMATO"+ CommonUtil.generateOrderNumber();
                     orderInfo.setMerchOrderSn(merchOrderSn);
                 } else {
-                    PinganResponseDto payCancel = PinganUtil.pinganPayCancel(null, orderInfo.getMerchOrderSn());
+                    // 取消订单
+                   /*PinganResponseDto payCancel = PinganUtil.pinganPayCancel(null, orderInfo.getMerchOrderSn());
                     if (payCancel == null) {
                         logger.info("平安取消订单接口调用失败!");
                         return toResponsFail("下单失败");
@@ -108,7 +109,10 @@ public class ApiPayPinganController extends ApiBaseAction {
                     pinganResponseService.save(payCancel);
                     if (!SUCCESS_CODE.equals(payCancel.getErrcode()) && !"8002".equals(payCancel.getErrcode())) {
                         return toResponsFail(payCancel.getMsg());
-                    }
+                    }*/
+
+                    merchOrderSn = "EMATO"+ CommonUtil.generateOrderNumber();
+                    orderInfo.setMerchOrderSn(merchOrderSn);
                 }
             }
 
@@ -240,9 +244,25 @@ public class ApiPayPinganController extends ApiBaseAction {
                         return toResponsSuccess(payParam);
                     }
                 }
+            } else if ("8045".equals(response.getErrcode())) {
+                PinganPayOrderDto payOrderDto = pinganPayOrderService.queryByOutNo(merchOrderSn);
+                if (payOrderDto != null) {
+                    Map<String, Object> payParam = new HashMap<>();
+                    payParam.put("timeStamp", payOrderDto.getTimeStamp());
+                    payParam.put("nonceStr", payOrderDto.getNoncestr());
+                    payParam.put("signType", payOrderDto.getSigntype());
+                    payParam.put("package", payOrderDto.getPrepayId());
+                    payParam.put("paySign", payOrderDto.getPaysign());
+                    return toResponsSuccess(payParam);
+                }
+
+                pinganResponseService.save(response);
+                logger.debug("下单失败!" + response.getMsg());
+                return toResponsFail("下单失败!");
             } else {
                 pinganResponseService.save(response);
-                return toResponsFail(response.getMsg());
+                logger.debug("下单失败!" + response.getMsg());
+                return toResponsFail("下单失败!");
             }
         }
 

+ 2 - 0
kmall-api/src/main/java/com/kmall/api/dao/ApiPinganPayOrderMapper.java

@@ -15,4 +15,6 @@ import org.springframework.stereotype.Component;
 public interface ApiPinganPayOrderMapper extends BaseDao<PinganPayOrderDto> {
 
     int updateByOutNo(PinganPayOrderDto pinganPayOrder);
+
+    PinganPayOrderDto queryByOutNo(String outNo);
 }

+ 4 - 0
kmall-api/src/main/java/com/kmall/api/service/pingan/ApiPinganPayOrderService.java

@@ -24,6 +24,10 @@ public class ApiPinganPayOrderService{
         return apiPinganPayOrderMapper.queryObject(id);
     }
 
+    public PinganPayOrderDto queryByOutNo(String outNo) {
+        return apiPinganPayOrderMapper.queryByOutNo(outNo);
+    }
+
     public List<PinganPayOrderDto> queryList(Map<String, Object> map) {
         return apiPinganPayOrderMapper.queryList(map);
     }

+ 49 - 0
kmall-api/src/main/resources/mybatis/mapper/pingan/ApiPinganPayOrderMapper.xml

@@ -30,6 +30,7 @@
         <result property="jsapiPayUrl" column="jsapi_pay_url"/>
         <result property="randStr" column="rand_str"/>
         <result property="appid" column="appId"/>
+        <result property="timeStamp" column="timeStamp"/>
         <result property="noncestr" column="nonceStr"/>
         <result property="signtype" column="signType"/>
         <result property="prepayId" column="prepay_id"/>
@@ -69,6 +70,7 @@
 			`jsapi_pay_url`,
 			`rand_str`,
 			`appId`,
+			`timeStamp`,
 			`nonceStr`,
 			`signType`,
 			`prepay_id`,
@@ -82,6 +84,48 @@
 		where id = #{id}
 	</select>
 
+	<select id="queryByOutNo" resultType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
+		select
+			`id`,
+			`out_no`,
+			`pmt_name`,
+			`pmt_tag`,
+			`ord_mct_id`,
+			`ord_shop_id`,
+			`ord_currency`,
+			`currency_sign`,
+			`ord_no`,
+			`ord_type`,
+			`original_amount`,
+			`discount_amount`,
+			`ignore_amount`,
+			`trade_account`,
+			`trade_no`,
+			`trade_amount`,
+			`trade_qrcode`,
+			`amount`,
+			`trade_time`,
+			`trade_pay_time`,
+			`pay_time`,
+			`status`,
+			`trade_result`,
+			`jsapi_pay_url`,
+			`rand_str`,
+			`appId`,
+			`timeStamp`,
+			`nonceStr`,
+			`signType`,
+			`prepay_id`,
+			`paySign`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from pingan_pay_order
+		where out_no = #{outNo}
+	</select>
+
 	<select id="queryList" resultType="com.kmall.common.utils.pingan.dto.PinganPayOrderDto">
 		select
     		`id`,
@@ -110,6 +154,7 @@
     		`jsapi_pay_url`,
     		`rand_str`,
     		`appId`,
+    		`timeStamp`,
     		`nonceStr`,
     		`signType`,
     		`prepay_id`,
@@ -173,6 +218,7 @@
 			`jsapi_pay_url`,
 			`rand_str`,
 			`appId`,
+			`timeStamp`,
 			`nonceStr`,
 			`signType`,
 			`prepay_id`,
@@ -209,6 +255,7 @@
 			#{jsapiPayUrl},
 			#{randStr},
 			#{appid},
+			#{timeStamp},
 			#{noncestr},
 			#{signtype},
 			#{prepayId},
@@ -248,6 +295,7 @@
 			<if test="jsapiPayUrl != null">`jsapi_pay_url` = #{jsapiPayUrl}, </if>
 			<if test="randStr != null">`rand_str` = #{randStr}, </if>
 			<if test="appid != null">`appId` = #{appid}, </if>
+			<if test="timeStamp != null">`timeStamp` = #{timeStamp}, </if>
 			<if test="noncestr != null">`nonceStr` = #{noncestr}, </if>
 			<if test="signtype != null">`signType` = #{signtype}, </if>
 			<if test="prepayId != null">`prepay_id` = #{prepayId}, </if>
@@ -288,6 +336,7 @@
 			<if test="jsapiPayUrl != null">`jsapi_pay_url` = #{jsapiPayUrl}, </if>
 			<if test="randStr != null">`rand_str` = #{randStr}, </if>
 			<if test="appid != null">`appId` = #{appid}, </if>
+			<if test="timeStamp != null">`timeStamp` = #{timeStamp}, </if>
 			<if test="noncestr != null">`nonceStr` = #{noncestr}, </if>
 			<if test="signtype != null">`signType` = #{signtype}, </if>
 			<if test="prepayId != null">`prepay_id` = #{prepayId}, </if>

+ 43 - 29
kmall-common/src/main/java/com/kmall/common/utils/pingan/PinganUtil.java

@@ -27,48 +27,62 @@ public class PinganUtil {
      */
     public static PinganPayOrderDto buildPayOrderDto(JSONObject dataObject) {
         PinganPayOrderDto payorder = new PinganPayOrderDto();
-        payorder.setOutNo(MapUtils.getString("out_no", dataObject).equals("null") ? null : MapUtils.getString("out_no", dataObject));
-        payorder.setPmtName(MapUtils.getString("pmt_name", dataObject).equals("null") ? null : MapUtils.getString("pmt_name", dataObject));
-        payorder.setPmtTag(MapUtils.getString("pmt_tag", dataObject).equals("null") ? null : MapUtils.getString("pmt_tag", dataObject));
+        payorder.setOutNo(StringUtils.isNullOrEmpty(MapUtils.getString("out_no", dataObject)) || MapUtils.getString("out_no", dataObject).equals("null") ? null : MapUtils.getString("out_no", dataObject));
+        payorder.setPmtName(StringUtils.isNullOrEmpty(MapUtils.getString("pmt_name", dataObject)) || MapUtils.getString("pmt_name", dataObject).equals("null") ? null : MapUtils.getString("pmt_name", dataObject));
+        payorder.setPmtTag(StringUtils.isNullOrEmpty(MapUtils.getString("pmt_tag", dataObject)) || MapUtils.getString("pmt_tag", dataObject).equals("null") ? null : MapUtils.getString("pmt_tag", dataObject));
         payorder.setOrdMctId(MapUtils.getInteger("ord_mct_id", dataObject));
         payorder.setOrdShopId(MapUtils.getInteger("ord_shop_id", dataObject));
-        payorder.setOrdCurrency(MapUtils.getString("ord_currency", dataObject).equals("null") ? null : MapUtils.getString("ord_currency", dataObject));
-        payorder.setCurrencySign(MapUtils.getString("currency_sign", dataObject).equals("null") ? null : MapUtils.getString("currency_sign", dataObject));
-        payorder.setOrdNo(MapUtils.getString("ord_no", dataObject).equals("null") ? null : MapUtils.getString("ord_no", dataObject));
+        payorder.setOrdCurrency(StringUtils.isNullOrEmpty(MapUtils.getString("ord_currency", dataObject)) || MapUtils.getString("ord_currency", dataObject).equals("null") ? null : MapUtils.getString("ord_currency", dataObject));
+        payorder.setCurrencySign(StringUtils.isNullOrEmpty(MapUtils.getString("currency_sign", dataObject)) || MapUtils.getString("currency_sign", dataObject).equals("null") ? null : MapUtils.getString("currency_sign", dataObject));
+        payorder.setOrdNo(StringUtils.isNullOrEmpty(MapUtils.getString("ord_no", dataObject)) || MapUtils.getString("ord_no", dataObject).equals("null") ? null : MapUtils.getString("ord_no", dataObject));
         payorder.setOrdType(MapUtils.getInteger("ord_type", dataObject));
         payorder.setOriginalAmount(MapUtils.getInteger("original_amount", dataObject));
         payorder.setDiscountAmount(MapUtils.getInteger("discount_amount", dataObject));
         payorder.setIgnoreAmount(MapUtils.getInteger("ignore_amount", dataObject));
-        payorder.setTradeAccount(MapUtils.getString("trade_account", dataObject).equals("null") ? null : MapUtils.getString("trade_account", dataObject));
-        payorder.setTradeNo(MapUtils.getString("trade_no", dataObject).equals("null") ? null : MapUtils.getString("trade_no", dataObject));
+        payorder.setTradeAccount(StringUtils.isNullOrEmpty(MapUtils.getString("trade_account", dataObject)) || MapUtils.getString("trade_account", dataObject).equals("null") ? null : MapUtils.getString("trade_account", dataObject));
+        payorder.setTradeNo(StringUtils.isNullOrEmpty(MapUtils.getString("trade_no", dataObject)) || MapUtils.getString("trade_no", dataObject).equals("null") ? null : MapUtils.getString("trade_no", dataObject));
         payorder.setTradeAmount(MapUtils.getInteger("trade_amount", dataObject));
-        payorder.setTradeQrcode(MapUtils.getString("trade_qrcode", dataObject).equals("null") ? null : MapUtils.getString("trade_qrcode", dataObject));
-        payorder.setAmount(MapUtils.getString("amount", dataObject).equals("null") ? null : MapUtils.getString("amount", dataObject));
-        payorder.setTradeTime(MapUtils.getString("trade_time", dataObject) == null || MapUtils.getString("trade_time", dataObject).equals("null") ? null : DateUtils.strToDate(MapUtils.getString("trade_time", dataObject)));
-        payorder.setTradePayTime(MapUtils.getString("trade_pay_time", dataObject) == null || MapUtils.getString("trade_pay_time", dataObject).equals("null") ? null : DateUtils.strToDate(MapUtils.getString("trade_pay_time", dataObject)));
-        payorder.setPayTime(MapUtils.getString("pay_time", dataObject).equals("null") ? null : MapUtils.getString("pay_time", dataObject));
+        payorder.setTradeQrcode(StringUtils.isNullOrEmpty(MapUtils.getString("trade_qrcode", dataObject)) || MapUtils.getString("trade_qrcode", dataObject).equals("null") ? null : MapUtils.getString("trade_qrcode", dataObject));
+        payorder.setAmount(StringUtils.isNullOrEmpty(MapUtils.getString("amount", dataObject)) || MapUtils.getString("amount", dataObject).equals("null") ? null : MapUtils.getString("amount", dataObject));
+        payorder.setTradeTime(StringUtils.isNullOrEmpty(MapUtils.getString("trade_time", dataObject)) || MapUtils.getString("trade_time", dataObject) == null || MapUtils.getString("trade_time", dataObject).equals("null") ? null : DateUtils.strToDate(MapUtils.getString("trade_time", dataObject)));
+        payorder.setTradePayTime(StringUtils.isNullOrEmpty(MapUtils.getString("trade_pay_time", dataObject)) || MapUtils.getString("trade_pay_time", dataObject) == null || MapUtils.getString("trade_pay_time", dataObject).equals("null") ? null : DateUtils.strToDate(MapUtils.getString("trade_pay_time", dataObject)));
+        payorder.setPayTime(StringUtils.isNullOrEmpty(MapUtils.getString("pay_time", dataObject)) || MapUtils.getString("pay_time", dataObject).equals("null") ? null : MapUtils.getString("pay_time", dataObject));
         payorder.setStatus(MapUtils.getInteger("status", dataObject));
-        payorder.setTradeResult(MapUtils.getString("trade_result", dataObject).equals("null") ? null : MapUtils.getString("trade_result", dataObject));
-        payorder.setJsapiPayUrl(MapUtils.getString("jsapi_pay_url", dataObject).equals("null") ? null : MapUtils.getString("jsapi_pay_url", dataObject));
-        payorder.setJsapiPayUrl(MapUtils.getString("rand_str", dataObject).equals("null") ? null : MapUtils.getString("rand_str", dataObject));
-        payorder.setAppid(MapUtils.getString("appId", dataObject).equals("null") ? null : MapUtils.getString("appId", dataObject));
-        payorder.setNoncestr(MapUtils.getString("nonceStr", dataObject).equals("null") ? null : MapUtils.getString("nonceStr", dataObject));
-        payorder.setSigntype(MapUtils.getString("signType", dataObject).equals("null") ? null : MapUtils.getString("signType", dataObject));
-        payorder.setPrepayId(MapUtils.getString("package", dataObject).equals("null") ? null : MapUtils.getString("package", dataObject));
-        payorder.setPaysign(MapUtils.getString("paySign", dataObject).equals("null") ? null : MapUtils.getString("paySign", dataObject));
+        payorder.setTradeResult(StringUtils.isNullOrEmpty(MapUtils.getString("trade_result", dataObject)) || MapUtils.getString("trade_result", dataObject).equals("null") ? null : MapUtils.getString("trade_result", dataObject));
+        payorder.setJsapiPayUrl(StringUtils.isNullOrEmpty(MapUtils.getString("jsapi_pay_url", dataObject)) || MapUtils.getString("jsapi_pay_url", dataObject).equals("null") ? null : MapUtils.getString("jsapi_pay_url", dataObject));
+        payorder.setJsapiPayUrl(StringUtils.isNullOrEmpty(MapUtils.getString("rand_str", dataObject)) || MapUtils.getString("rand_str", dataObject).equals("null") ? null : MapUtils.getString("rand_str", dataObject));
+        payorder.setAppid(StringUtils.isNullOrEmpty(MapUtils.getString("appId", dataObject)) || MapUtils.getString("appId", dataObject).equals("null") ? null : MapUtils.getString("appId", dataObject));
+        payorder.setNoncestr(StringUtils.isNullOrEmpty(MapUtils.getString("nonceStr", dataObject)) || MapUtils.getString("nonceStr", dataObject).equals("null") ? null : MapUtils.getString("nonceStr", dataObject));
+        payorder.setSigntype(StringUtils.isNullOrEmpty(MapUtils.getString("signType", dataObject)) || MapUtils.getString("signType", dataObject).equals("null") ? null : MapUtils.getString("signType", dataObject));
+        payorder.setPrepayId(StringUtils.isNullOrEmpty(MapUtils.getString("package", dataObject)) || MapUtils.getString("package", dataObject).equals("null") ? null : MapUtils.getString("package", dataObject));
+        payorder.setPaysign(StringUtils.isNullOrEmpty(MapUtils.getString("paySign", dataObject)) || MapUtils.getString("paySign", dataObject).equals("null") ? null : MapUtils.getString("paySign", dataObject));
+        payorder.setTimeStamp(StringUtils.isNullOrEmpty(MapUtils.getString("timeStamp", dataObject)) || MapUtils.getString("timeStamp", dataObject).equals("null") ? null : MapUtils.getString("timeStamp", dataObject));
         return payorder;
     }
 
     public static WechatRefundQueryResult buildWechatRefundQueryResult(JSONObject tradeResult, int count) {
         WechatRefundQueryResult refundQueryResult = new WechatRefundQueryResult();
-        refundQueryResult.setOut_refund_no(MapUtils.getString("out_refund_no_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("out_refund_no_" + (count), tradeResult));
-        refundQueryResult.setRefund_account(MapUtils.getString("refund_account_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_account_" + (count), tradeResult));
-        refundQueryResult.setRefund_channel(MapUtils.getString("refund_channel_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_channel_" + (count), tradeResult));
-        refundQueryResult.setRefund_fee(MapUtils.getString("refund_fee_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_fee_" + (count), tradeResult));
-        refundQueryResult.setRefund_id(MapUtils.getString("refund_id_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_id_" + (count), tradeResult));
-        refundQueryResult.setRefund_recv_accout(MapUtils.getString("refund_recv_accout_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_recv_accout_" + (count), tradeResult));
-        refundQueryResult.setRefund_status(MapUtils.getString("refund_status_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_status_" + (count), tradeResult));
-        refundQueryResult.setRefund_success_time(MapUtils.getString("refund_success_time_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_success_time_" + (count), tradeResult));
+        refundQueryResult.setOut_refund_no(StringUtils.isNullOrEmpty(MapUtils.getString("out_refund_no_" + (count), tradeResult)) || MapUtils.getString("out_refund_no_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("out_refund_no_" + (count), tradeResult));
+        refundQueryResult.setRefund_account(StringUtils.isNullOrEmpty(MapUtils.getString("refund_account_" + (count), tradeResult)) || MapUtils.getString("refund_account_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_account_" + (count), tradeResult));
+        refundQueryResult.setRefund_channel(StringUtils.isNullOrEmpty(MapUtils.getString("refund_channel_" + (count), tradeResult)) || MapUtils.getString("refund_channel_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_channel_" + (count), tradeResult));
+        refundQueryResult.setRefund_fee(StringUtils.isNullOrEmpty(MapUtils.getString("refund_fee_" + (count), tradeResult)) || MapUtils.getString("refund_fee_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_fee_" + (count), tradeResult));
+        refundQueryResult.setRefund_id(StringUtils.isNullOrEmpty(MapUtils.getString("refund_id_" + (count), tradeResult)) || MapUtils.getString("refund_id_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_id_" + (count), tradeResult));
+        refundQueryResult.setRefund_recv_accout(StringUtils.isNullOrEmpty(MapUtils.getString("refund_recv_accout_" + (count), tradeResult)) || MapUtils.getString("refund_recv_accout_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_recv_accout_" + (count), tradeResult));
+        refundQueryResult.setRefund_status(StringUtils.isNullOrEmpty(MapUtils.getString("refund_status_" + (count), tradeResult)) || MapUtils.getString("refund_status_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_status_" + (count), tradeResult));
+        refundQueryResult.setRefund_success_time(StringUtils.isNullOrEmpty(MapUtils.getString("refund_success_time_" + (count), tradeResult)) || MapUtils.getString("refund_success_time_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_success_time_" + (count), tradeResult));
+        return refundQueryResult;
+    }
+
+    public static WechatRefundQueryResult buildWechatRefundQueryResult(JSONObject tradeResult) {
+        WechatRefundQueryResult refundQueryResult = new WechatRefundQueryResult();
+        refundQueryResult.setOut_refund_no(StringUtils.isNullOrEmpty(MapUtils.getString("out_refund_no", tradeResult)) || MapUtils.getString("out_refund_no", tradeResult).equals("null") ? null : MapUtils.getString("out_refund_no", tradeResult));
+        refundQueryResult.setRefund_account(StringUtils.isNullOrEmpty(MapUtils.getString("refund_account", tradeResult)) || MapUtils.getString("refund_account", tradeResult).equals("null") ? null : MapUtils.getString("refund_account", tradeResult));
+        refundQueryResult.setRefund_channel(StringUtils.isNullOrEmpty(MapUtils.getString("refund_channel", tradeResult)) || MapUtils.getString("refund_channel", tradeResult).equals("null") ? null : MapUtils.getString("refund_channel", tradeResult));
+        refundQueryResult.setRefund_fee(StringUtils.isNullOrEmpty(MapUtils.getString("refund_fee", tradeResult)) || MapUtils.getString("refund_fee", tradeResult).equals("null") ? null : MapUtils.getString("refund_fee", tradeResult));
+        refundQueryResult.setRefund_id(StringUtils.isNullOrEmpty(MapUtils.getString("refund_id", tradeResult)) || MapUtils.getString("refund_id", tradeResult).equals("null") ? null : MapUtils.getString("refund_id", tradeResult));
+        refundQueryResult.setRefund_recv_accout(StringUtils.isNullOrEmpty(MapUtils.getString("refund_recv_accout", tradeResult)) || MapUtils.getString("refund_recv_accout", tradeResult).equals("null") ? null : MapUtils.getString("refund_recv_accout", tradeResult));
+        refundQueryResult.setRefund_status(StringUtils.isNullOrEmpty(MapUtils.getString("refund_status", tradeResult)) || MapUtils.getString("refund_status", tradeResult).equals("null") ? null : MapUtils.getString("refund_status", tradeResult));
+        refundQueryResult.setRefund_success_time(StringUtils.isNullOrEmpty(MapUtils.getString("refund_success_time", tradeResult)) || MapUtils.getString("refund_success_time", tradeResult).equals("null") ? null : MapUtils.getString("refund_success_time", tradeResult));
         return refundQueryResult;
     }
 

+ 13 - 0
kmall-common/src/main/java/com/kmall/common/utils/pingan/dto/PinganPayOrderDto.java

@@ -119,6 +119,10 @@ public class PinganPayOrderDto implements Serializable {
      */
     private String appid;
     /**
+     * 小程序返回时间戳
+     */
+    private String timeStamp;
+    /**
      * 随机字符串
      */
     private String noncestr;
@@ -475,6 +479,7 @@ public class PinganPayOrderDto implements Serializable {
     public String getAppid() {
         return appid;
     }
+
     /**
      * 设置:随机字符串
      */
@@ -482,6 +487,14 @@ public class PinganPayOrderDto implements Serializable {
         this.noncestr = noncestr;
     }
 
+    public String getTimeStamp() {
+        return timeStamp;
+    }
+
+    public void setTimeStamp(String timeStamp) {
+        this.timeStamp = timeStamp;
+    }
+
     /**
      * 获取:随机字符串
      */

+ 11 - 2
kmall-framework/kmall-framework.iml

@@ -55,6 +55,15 @@
     <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.4.2" level="project" />
     <orderEntry type="library" name="Maven: com.google.guava:guava:17.0" level="project" />
     <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.3.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jxls:jxls:2.4.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-jexl:2.1.1" level="project" />
+    <orderEntry type="library" name="Maven: org.jxls:jxls-poi:1.0.16" level="project" />
+    <orderEntry type="library" name="Maven: org.jxls:jxls-jexcel:1.0.7" level="project" />
+    <orderEntry type="library" name="Maven: net.sourceforge.jexcelapi:jxl:2.6.10" level="project" />
+    <orderEntry type="library" name="Maven: org.jxls:jxls-reader:2.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-digester3:with-deps:3.2" level="project" />
+    <orderEntry type="library" name="Maven: cglib:cglib:2.2.2" level="project" />
+    <orderEntry type="library" name="Maven: asm:asm:3.3.1" level="project" />
     <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
     <orderEntry type="module" module-name="kmall-api" />
     <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.4.0" level="project" />
@@ -108,7 +117,7 @@
     <orderEntry type="module-library">
       <library name="Maven: com.alibaba:jconsole:1.8.0">
         <CLASSES>
-          <root url="jar://D:/Program Files/Java/jdk1.8.0_131/lib/jconsole.jar!/" />
+          <root url="jar://C:/Program Files/Java/jdk1.8.0_191/lib/jconsole.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -117,7 +126,7 @@
     <orderEntry type="module-library">
       <library name="Maven: com.alibaba:tools:1.8.0">
         <CLASSES>
-          <root url="jar://D:/Program Files/Java/jdk1.8.0_131/lib/tools.jar!/" />
+          <root url="jar://C:/Program Files/Java/jdk1.8.0_191/lib/tools.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />

+ 39 - 5
kmall-schedule/src/main/java/com/kmall/schedule/service/QzOrderService.java

@@ -355,10 +355,45 @@ public class QzOrderService {
                 JSONObject result = JSONObject.fromObject(tradeResult);
                 Map refundParam = new HashMap();
                 Map orderParam = new HashMap();
-                int msgCount = Integer.parseInt(result.getString("refund_count"));
-                for (int i = 0; i < msgCount; i++) {
-                    WechatRefundQueryResult refundQueryResult = PinganUtil.buildWechatRefundQueryResult(result, i);
-                    if(outRefundNo.equalsIgnoreCase(refundQueryResult.getOut_refund_no())) {
+
+                String refundCount= MapUtils.getString("refund_count", result);
+                if (!StringUtils.isNullOrEmpty(refundCount) && !"null".equals(refundCount)) {
+                    int msgCount = Integer.parseInt(refundCount);
+                    for (int i = 0; i < msgCount; i++) {
+                        WechatRefundQueryResult refundQueryResult = PinganUtil.buildWechatRefundQueryResult(result, i);
+                        if (outRefundNo.equalsIgnoreCase(refundQueryResult.getOut_refund_no())) {
+                            Date successTime = DateUtils.strToDate(refundQueryResult.getRefund_success_time());
+                            refundParam.put("refundTime", successTime);
+                            refundParam.put("outRefundNo", refundQueryResult.getOut_refund_no());
+                            refundParam.put("refundId", refundQueryResult.getRefund_id());
+                            refundParam.put("refundMoney",
+                                    BigDecimal.valueOf(Long.valueOf(refundQueryResult.getRefund_fee()))
+                                            .divide(Constant.ONE_HUNDRED));
+                            if (refundQueryResult.getRefund_status().equalsIgnoreCase(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+                                refundParam.put("refundStatus", Dict.RefundStatus.item_2.getItem());
+                                refundParam.put("wechat_refund_status_des", "退款成功");
+                                orderParam.put("payStatus", Dict.payStatus.item_4.getItem());
+                            } else if (refundQueryResult.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
+                                refundParam.put("refundStatus", Dict.RefundStatus.item_4.getItem());
+                                refundParam.put("wechat_refund_status_des", "退款关闭");
+                                orderParam.put("payStatus", Dict.payStatus.item_5.getItem());
+                            } else if (refundQueryResult.getRefund_status().equalsIgnoreCase("CHANGE")) {
+                                refundParam.put("refundStatus", Dict.RefundStatus.item_4.getItem());
+                                refundParam.put("wechat_refund_status_des", "退款异常");
+                                orderParam.put("payStatus", Dict.payStatus.item_6.getItem());
+                            } else if (refundQueryResult.getRefund_status().equalsIgnoreCase("PROCESSING")) {
+                                refundParam.put("refundStatus", Dict.RefundStatus.item_5.getItem());
+                                refundParam.put("wechat_refund_status_des", "退款处理中");
+                                orderParam.put("payStatus", Dict.payStatus.item_3.getItem());
+                            }
+                            refundParam.put("refundRecvAccout", refundQueryResult.getRefund_recv_accout());
+                            refundParam.put("orderRefundId", refundQueryResult.getOut_refund_no());
+                            qzOrderMapper.updateOrderRefund(refundParam);//更新订单退款信息
+                        }
+                    }
+                } else {
+                    WechatRefundQueryResult refundQueryResult = PinganUtil.buildWechatRefundQueryResult(result);
+                    if (outRefundNo.equalsIgnoreCase(refundQueryResult.getOut_refund_no())) {
                         Date successTime = DateUtils.strToDate(refundQueryResult.getRefund_success_time());
                         refundParam.put("refundTime", successTime);
                         refundParam.put("outRefundNo", refundQueryResult.getOut_refund_no());
@@ -390,7 +425,6 @@ public class QzOrderService {
                 }
                 orderParam.put("orderStatus", Dict.orderStatus.item_401.getItem());
                 orderParam.put("orderId", orderId);
-                orderParam.put("payTransactionId", MapUtils.getString("transaction_id", result).equals("null") ? null : MapUtils.getString("transaction_id", result));
                 qzOrderMapper.updateOrderInfo(orderParam);
             } else {
                 logger.info(">>>>>>>>>>>>>>>>>>>>pinganRefundquery 平安退款查询接口返回失败信息:code 【" + response.getErrcode() + "】,des【" + response.getMsg() + "】");

+ 11 - 0
kmall-schedule/src/main/resources/mybatis/mapper/QzOrderMapper.xml

@@ -67,6 +67,17 @@
         AND a.is_onffline_order = 0 and a.pay_flag = 'weixin'
     </select>
 
+    <select id="queryPinganPayingOrderList" resultType="map">
+		select a.pay_transaction_id,a.order_sn,a.order_status,a.pay_status,a.id 'order_id',a.merch_order_sn,date_format(a.add_time,'%Y-%m-%d %H:%i:%s') as add_time,
+        b.product_id,b.number,c.stock_num,c.id as storeRelaId,a.pay_flag
+        from mall_order a
+        LEFT JOIN mall_order_goods b ON a.id = b.order_id
+        LEFT JOIN mall_product_store_rela c ON b.product_id = c.product_id
+        AND c.store_id = a.store_id  where (a.order_status in ('0','100','201') and a.pay_status in (0,1,2)) and pay_id is not null
+        and (a.pay_transaction_id = '' or a.pay_transaction_id is null or a.pay_time is null or a.pay_time = '')
+        AND a.is_onffline_order = 0 and a.pay_flag = 'pingan'
+    </select>
+
     <update id="updateOrderInfo" parameterType="map">
         UPDATE mall_order a
         <set>