jk-GitHub-coder 3 gadi atpakaļ
vecāks
revīzija
f25beddceb

+ 67 - 7
YijiaRestful/src/main/java/com/platform/yijia/controller/CouponController.java

@@ -9,6 +9,7 @@ import com.platform.yijia.pojo.UserCoupon;
 import com.platform.yijia.service.CouponService;
 import com.platform.yijia.utils.CodeMsg;
 import com.platform.yijia.utils.ResultData;
+import com.sun.corba.se.spi.ior.ObjectKey;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -20,9 +21,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /*
  * <Title> CouponController </Title>
@@ -115,22 +114,83 @@ public class CouponController {
     @Transactional
     @ApiOperation(value = "用户领取优惠券", httpMethod = "GET", notes = "用户领取优惠券")
     public String addUserCoupon(@ApiParam(value = "用户unionId", required = true) @RequestParam String unionId,
-                                @ApiParam(value = "优惠券IDS", required = true) @RequestParam ArrayList<String> ids,
+                                @ApiParam(value = "优惠券IDS", required = true) @RequestParam List<Integer> ids,
                                 @ApiParam(value = "领取方式ID", required = true) @RequestParam Integer couponIssueId,
                                 @ApiParam(value = "油站ID", required = true) @RequestParam Integer stationId){
         Gson gson = new Gson();
         ResultData resultData = null;
         try{
+            Coupon couponParam = new Coupon();                   //查询优惠券参数
+            UserCoupon userCouponParam = new UserCoupon();       //用户优惠券新增参数
+            List<Map<String, Object>> successCouponList= new ArrayList<>();        //领取成功的优惠券
+            List<Map<String, Object>> failCouponList= new ArrayList<>();          //领取失败的优惠券
+            Map<String, Object> failMap = new HashMap<>();                        //领取失败的优惠券失败原因
+            Map<String, Object> successMap = new HashMap<>();                     //领取成功的优惠券信息
             //获取领取方式信息
             CouponIssue couponIssue = new CouponIssue();
             couponIssue.setStationId(stationId);
             couponIssue.setCouponIssueId(couponIssueId);
             List<CouponIssue> couponIssueList = couponService.selectCouponIssueList(couponIssue);
             if(couponIssueList !=null && couponIssueList.size() ==1){
-                //int size = ids.size();
-                for(int i=0; i<ids.size(); i++){
-
+                int cs =0;                                           //用户优惠券领取成功张数 couponSuccess
+                //领取成功的张数与该领取方式在当前页最多领取的张数
+                if(cs <= couponIssueList.get(0).getGiveLimit()){
+                    for(int i=0; i<ids.size(); i++){
+                        Integer couponId = ids.get(i);
+                        couponParam.setId(couponId);
+                        Coupon coupon = couponService.selectCouponInfo(couponParam);
+                        //该优惠券是否存在
+                        if(coupon !=null){
+                            //该优惠券是否已被领完
+                            if(coupon.getCouponNum() !=null && coupon.getCouponNum() >0){
+                                userCouponParam.setCouponIsUsed("0");           //是否使用:0、未使用;1、已使用;
+                                userCouponParam.setCouponNo("");                //优惠券编码
+                                userCouponParam.setUnionId(unionId);            //用户unionId
+                                userCouponParam.setCouponId(coupon.getId());    //优惠券ID
+                                userCouponParam.setStationId(stationId);        //油站ID
+                                userCouponParam.setCouponIsEffective("1");      //优惠券是否有效
+                                userCouponParam.setGetCouponTime(new Date());   //优惠券领取时间
+                                userCouponParam.setGetCouponOrigin("1");        //优惠券来源
+                                String effectiveTimeType = coupon.getEffectiveTimeType();
+                                //'有效时间类型: 1,固定时间;2,领取后x天内有效'
+                                switch (effectiveTimeType){
+                                    case "1":
+                                        userCouponParam.setCouponEffectiveTime(coupon.getEffectiveTimeEnd());  //优惠券有效期截止时间
+                                        break;
+                                    case "2":
+                                        Calendar calendar = Calendar.getInstance();
+                                        calendar.setTime(userCouponParam.getGetCouponTime());
+                                        calendar.add(Calendar.DATE, coupon.getEffectiveDayNum());     //领取后多少天有效
+                                        userCouponParam.setCouponEffectiveTime(calendar.getTime());   //优惠券有效期截止时间
+                                        break;
+                                }
+                                //获取该用户所持有此优惠券的张数
+                                int userCouponCount = couponService.selectUserCouponCount(userCouponParam);
+                                if(userCouponCount > coupon.getCouponHoldNum()){
+                                    failMap.put("领取失败,该用户所持有此优惠券已达到最大数量", coupon.getId());
+                                    failCouponList.add(failMap);
+                                }else {
+                                    int auc = couponService.addUserCoupon(userCouponParam);
+                                    if(auc ==1){
+                                        successMap.put("领取成功", coupon.getId());
+                                        successCouponList.add(successMap);
+                                        //领取成功后次数加1
+                                        cs++;
+                                    }
+                                }
+                            }else {
+                                failMap.put("领取失败,该优惠券已被领完", coupon.getId());
+                                failCouponList.add(failMap);
+                            }
+                        }
+                    }
                 }
+                //领取成功
+                Map<String, Object> resultMap = new HashMap<>();
+                resultMap.put("successCouponList", successCouponList);
+                resultMap.put("failCouponList", failCouponList);
+                logger.info("用户领取到的优惠券:" + resultMap.toString());
+                resultData = ResultData.success(CodeMsg.SUCCESS);
             }else {
                 resultData = ResultData.error(CodeMsg.YEWU_FAIL,"该领取方式不存在");
             }

+ 76 - 0
YijiaRestful/src/main/java/com/platform/yijia/controller/DemoFenZhang.java

@@ -0,0 +1,76 @@
+package com.platform.yijia.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.platform.yijia.config.YiJiaRequest;
+import com.platform.yijia.param.request.PayInfoRequest;
+import com.platform.yijia.utils.HttpUtils;
+import com.platform.yijia.utils.RSASignature;
+import com.platform.yijia.utils.SXFPaySign;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+
+
+@RestController
+@YiJiaRequest()
+@CrossOrigin
+public class DemoFenZhang {
+
+    @RequestMapping(value = "/demoFenZhang", consumes = "application/json", method = RequestMethod.POST)
+    public String demoFenZhang(@RequestBody PayInfoRequest payInfoRequest) throws Exception {
+        String ss ="";
+        JSONObject reqData = new JSONObject();
+        reqData.put("mno", "");
+        reqData.put("signType", "");
+        String req= SXFPaySign.getSXFPay(reqData);
+        ///logger.debug("参数信息:"+req);
+        System.out.println("req:" + req);
+        //此处不要改变reqData里面值的顺序用LinkedHashMap
+        HashMap reqMap = JSON.parseObject(req, LinkedHashMap.class, Feature.OrderedField);
+        //组装加密串
+        String signContent = RSASignature.getOrderContent(reqMap);
+        System.out.println("拼接后的参数:" + signContent);
+        //logger.debug("拼接后的参数:"+signContent);
+        //sign
+        String sign = RSASignature.encryptBASE64(RSASignature.sign(signContent, SXFPaySign.privateKey));
+        System.out.println("============签名:" + sign);
+        reqMap.put("sign", sign);
+        String reqStr = JSON.toJSONString(reqMap);
+        System.out.println("请求参数:" + reqMap);
+        System.out.println("请求参数:" + reqStr);
+        //调用第三方接口地址
+        String url = "https://openapi.suixingpay.com/merchant/sign/getUrl";//生产地址
+        String resultJson = HttpUtils.connectPostUrl(url, reqStr);
+        System.out.println("返回信息:" + resultJson);
+        //不要对reqData排序 所以用LinkedHashMap
+        HashMap<String, Object> result = JSON.parseObject(resultJson, LinkedHashMap.class, Feature.OrderedField);
+        if ("0000".equals(result.get("code"))) {
+            //验签
+            String signResult = result.get("sign").toString();
+            result.remove("sign");
+            String resultStr = RSASignature.getOrderContent(result);
+            System.out.println("resultStr: " + resultStr);
+            //sign
+            String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, SXFPaySign.privateKey));
+            System.out.println("resultSign: " + resultSign);
+            //组装加密串
+            if (RSASignature.doCheck(resultStr, signResult, SXFPaySign.sxfPublic)) {
+                System.out.println("===================验签成功==============");
+                //
+                if(result.containsKey("reqData")){
+                    //判断 bizCode bizCode =="0000" 则业务成功
+                }
+
+            }
+        }
+
+
+
+
+        return ss;
+    }
+
+}

+ 1 - 1
YijiaRestful/src/main/java/com/platform/yijia/controller/ElectronicMembershipCardController.java

@@ -1557,7 +1557,7 @@ public class ElectronicMembershipCardController {
             result.put("return_msg", "success");
             //业务逻辑
             String ordNo = yunPayCallBack.getTerminal_trace();
-            String amt = yunPayCallBack.getTotal_fee();
+            String amt = String.valueOf(new BigDecimal(yunPayCallBack.getTotal_fee()).divide(new BigDecimal("100")));
             CustomerCardUseRecord customerCardUseRecord = new CustomerCardUseRecord();
             customerCardUseRecord.setOrderNo(ordNo);
             CustomerCardUseRecord customerCardUseRecordInfo = electronicMembershipCardService.getCardRecordByOrderNo(customerCardUseRecord);

+ 4 - 0
YijiaRestful/src/main/java/com/platform/yijia/controller/PayController.java

@@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.sql.Timestamp;
 import java.text.ParseException;
@@ -65,6 +66,8 @@ public class PayController {
 
 
 
+
+
     /***
      * 微信子商户支付接口
      * @param weChatPaySetRequest
@@ -1032,6 +1035,7 @@ public class PayController {
                     payOrder.setDzkAmt(Double.valueOf("0"));
                     payOrder.setPayDate(new Timestamp(new Date().getTime()));    //支付时间
                     payOrder.setReceivedAmt(Double.valueOf(yunPayCallBack.getTotal_fee())); //settleAmt商家入账金额
+                    payOrder.setReceivedAmt((new BigDecimal(yunPayCallBack.getTotal_fee()).divide(new BigDecimal("100")).doubleValue())); //settleAmt商家入账金额
                     //修改订单状态
                     int count = payOrderService.getUpdatePayOrder(payOrder);
                     if(count == 1){

+ 44 - 0
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -9,6 +9,7 @@ import com.platform.yijia.service.*;
 import com.platform.yijia.utils.CodeMsg;
 import com.platform.yijia.utils.ResultData;
 import org.apache.commons.lang3.StringUtils;
+import org.omg.CORBA.CODESET_INCOMPATIBLE;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Controller;
@@ -45,6 +46,8 @@ public class PayOrderController {
     private LabelService labelService;
     @Resource
     private StationOilGunService stationOilGunService;
+    @Resource
+    private CouponService couponService;
 
     //小程序支付生成订单
     @RequestMapping(value = "/AddPayOrderInfoNew", consumes = "application/json", method = RequestMethod.POST)
@@ -1427,6 +1430,47 @@ public class PayOrderController {
         return boo;
     }
 
+    /***
+     * 计算使用优惠券金额
+     * @param ordNo
+     * @param couponId
+     * @return
+     */
+    @RequestMapping(value = "/calculateCouponDiscount", method = RequestMethod.GET)
+    @ResponseBody
+    public String calculateCouponDiscount(@RequestParam String ordNo, @RequestParam Integer couponId){
+        Gson gson =new Gson();
+        ResultData resultData =null;
+        PayOrder payOrder = payOrderService.selectOrderInfoByOrdNo(ordNo);
+        if(payOrder !=null){
+            Coupon coupon = new Coupon();
+            coupon.setId(couponId);
+            Coupon couponInfo = couponService.selectCouponInfo(coupon);
+            if(couponInfo !=null){
+                String status = couponInfo.getStatus();
+                //该优惠券是否有效
+                if(status !=null && status.equals("1")){
+
+                    //
+                    String isMarketFlag = coupon.getIsMarketFlag();
+                    String isCardFlag = coupon.getIsCardFlag();
+                    String isGradeFlag = coupon.getIsGradeFlag();
+                    PayOrder p = new PayOrder();
+                    resultData = ResultData.success(payOrder);
+
+                }else {
+                   // resultData = ResultData.error(2,"");
+                }
+            }else {
+                resultData = ResultData.error(CodeMsg.NO_COUPON);
+            }
+        }else {
+            resultData = ResultData.error(CodeMsg.NO_ORDER);
+        }
+        return gson.toJson(resultData);
+    }
+
+
     /**
      * 根据订单号获取订单信息
      * produces="application/json;charset=UTF-8",consumes = "application/json",

+ 4 - 1
YijiaRestful/src/main/java/com/platform/yijia/dao/CouponMapper.java

@@ -19,8 +19,11 @@ public interface CouponMapper {
     List<UserCoupon> selectUserCoupons(UserCoupon userCoupon);
 
     //用户领取优惠券
-    void addUserCoupon(UserCoupon userCoupon);
+    int addUserCoupon(UserCoupon userCoupon);
 
     //查询领取方式
     List<CouponIssue> selectCouponIssueList(CouponIssue couponIssue);
+
+    //用户已领取的该优惠券数量
+    int selectUserCouponCount(UserCoupon userCoupon);
 }

+ 1 - 1
YijiaRestful/src/main/java/com/platform/yijia/pojo/CouponIssue.java

@@ -25,7 +25,7 @@ public class CouponIssue {
     private String cycleDays;                 //每周每月的周几和几号
     private String appointedDays;             //指定日期
     private String availableControl;          //领用期内可用时间设置0一直可用 1:每周 2 每月 3 指定日期
-    private String giveLimit;                 //限额
+    private Integer giveLimit;                //限额
     private Integer giveCount;                //发送的次数
 
     private List<Coupon> couponInfoList;      //优惠券

+ 1 - 0
YijiaRestful/src/main/java/com/platform/yijia/pojo/UserCoupon.java

@@ -21,6 +21,7 @@ public class UserCoupon {
     private Date getCouponTime;             //优惠券获取时间
     private Integer grantCouponPerson;      //优惠券发放人
     private String couponIsEffective;       //用户获得的优惠券是否还有效
+    private Date couponEffectiveTime;       //优惠券有效期截止时间
 
     private Integer stationId;              //油站ID
 

+ 3 - 1
YijiaRestful/src/main/java/com/platform/yijia/service/CouponService.java

@@ -19,9 +19,11 @@ public interface CouponService {
     List<UserCoupon> selectUserCoupons(UserCoupon userCoupon);
 
     //用户领取优惠券
-    void addUserCoupon(UserCoupon userCoupon);
+    int addUserCoupon(UserCoupon userCoupon);
 
     //查询领取方式
     List<CouponIssue> selectCouponIssueList(CouponIssue couponIssue);
 
+    //用户已领取的该优惠券数量
+    int selectUserCouponCount(UserCoupon userCoupon);
 }

+ 8 - 2
YijiaRestful/src/main/java/com/platform/yijia/service/impl/CouponServiceImpl.java

@@ -42,7 +42,13 @@ public class CouponServiceImpl implements CouponService {
 
     //用户领取优惠券
     @Override
-    public void addUserCoupon(UserCoupon userCoupon) {
-        couponMapper.addUserCoupon(userCoupon);
+    public int addUserCoupon(UserCoupon userCoupon) {
+        return couponMapper.addUserCoupon(userCoupon);
+    }
+
+    //用户已领取的优惠券数量
+    @Override
+    public int selectUserCouponCount(UserCoupon userCoupon) {
+        return couponMapper.selectUserCouponCount(userCoupon);
     }
 }

+ 29 - 3
YijiaRestful/src/main/resources/mapper/CouponMapper.xml

@@ -63,8 +63,8 @@
        <result column="available_control"            jdbcType="VARCHAR"   property="availableControl" />
        <result column="appointed_days"               jdbcType="TIMESTAMP" property="appointedDays" />
        <result column="cycle_days"                   jdbcType="VARCHAR"   property="cycleDays" />
-       <result column="give_limit"                   jdbcType="VARCHAR"   property="giveLimit" />
-       <result column="give_count"                   jdbcType="VARCHAR"   property="giveCount" />
+       <result column="give_limit"                   jdbcType="INTEGER"   property="giveLimit" />
+       <result column="give_count"                   jdbcType="INTEGER"   property="giveCount" />
 
 <!--       <collection property="couponInfoList" resultMap="BaseResultMap"/>-->
    </resultMap>
@@ -80,6 +80,7 @@
     <result column="grant_coupon_shop"        jdbcType="INTEGER"   property="grantCouponShop" />
     <result column="get_coupon_time"          jdbcType="TIMESTAMP" property="getCouponTime" />
     <result column="grant_coupon_person"      jdbcType="INTEGER"   property="grantCouponPerson" />
+    <result column="coupon_effective_time"    jdbcType="TIMESTAMP" property="couponEffectiveTime" />
 
     <result column="station_id"               jdbcType="INTEGER"   property="stationId" />
     <result column="coupon_name"              jdbcType="VARCHAR"   property="couponName" />
@@ -205,6 +206,25 @@
         </where>
   </select>
 
+    <!--用户已领取的该优惠券数量-->
+    <select id="selectUserCouponCount" parameterType="com.platform.yijia.pojo.UserCoupon" resultMap="int">
+        SELECT
+            COUNT (*)
+        FROM
+            coupon_user
+        <where>
+            coupon_is_used = "0"
+            AND coupon_is_effective ="1"
+            <if test="unionId !=null and unionId !=''">
+                AND coupon_id = #{couponId}
+            </if>
+            <if test="unionId !=null and unionId !=''">
+                AND union_id = #{unionId}
+            </if>
+        </where>
+    </select>
+
+
   <!--获取用户所拥有的加油券-->
   <select id="selectUserCoupons" parameterType="com.platform.yijia.pojo.UserCoupon" resultMap="UserCouponsBaseResultMap">
     SELECT
@@ -241,7 +261,7 @@
   </select>
 
     <!--用户获取优惠券-->
-    <insert id="addUserCoupon" parameterType="com.platform.yijia.pojo.UserCoupon">
+    <insert id="addUserCoupon" parameterType="com.platform.yijia.pojo.UserCoupon" >
         INSERT INTO coupon_user
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="unionId !=null">
@@ -274,6 +294,9 @@
             <if test="stationId !=null">
                 station_id,
             </if>
+            <if test="couponEffectiveTime !=null">
+                coupon_effective_time,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="unionId !=null">
@@ -306,6 +329,9 @@
             <if test="stationId !=null">
                 #{stationId},
             </if>
+            <if test="couponEffectiveTime !=null">
+                #{couponEffectiveTime},
+            </if>
         </trim>
     </insert>