Bladeren bron

1.订单修改,2.数据库连接配置时间差修改, 3.启动类增加事务

jk-GitHub-coder 4 jaren geleden
bovenliggende
commit
5134fa7ea5

+ 2 - 0
YijiaRestful/src/main/java/com/platform/yijia/YijiaApplication.java

@@ -4,8 +4,10 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @SpringBootApplication
+@EnableTransactionManagement
 @MapperScan("com.platform.yijia.dao")
 public class YijiaApplication {
 

+ 3 - 8
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -47,15 +47,10 @@ public class PayOrderController {
         //判断登录人员是否验证成功
         if(appUserInfoList!=null&&appUserInfoList.size()>0){
             PayOrder payOrder=new PayOrder();
-            //payOrder.setStatus("0");//创建订单 未支付状态 0
-            payOrder.setAmt(payOrderRequest.getAmt());//金额
-            payOrder.setOilGun(payOrderRequest.getOilGun());//油枪
-            payOrder.setOilName(payOrderRequest.getOilName());//油品名称
-            payOrder.setStationId(payOrderRequest.getStationId());//油站id
-            payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName());//昵称
-            payOrder.setConsumerId(appUserInfoList.get(0).getUserId());//用户id
+            payOrder.setConsumer(appUserInfoList.get(0).getBlogNickName()); //昵称
+            payOrder.setConsumerId(appUserInfoList.get(0).getUserId()); //用户id
             //添加订单信息,返回订单号
-            String ordNo =payOrderService.AddPayOrderInfo(payOrder);
+            String ordNo =payOrderService.AddPayOrderInfo(payOrderRequest, payOrder);
             resultData=ResultData.success(ordNo);
         }else{
             //登录人验证失败

+ 18 - 0
YijiaRestful/src/main/java/com/platform/yijia/dao/PayOrderMapper.java

@@ -3,9 +3,27 @@ package com.platform.yijia.dao;
 import com.platform.yijia.pojo.PayOrder;
 import com.platform.yijia.pojo.PayOrderExample;
 import java.util.List;
+import java.util.Map;
+
 import org.apache.ibatis.annotations.Param;
 
 public interface PayOrderMapper {
+
+    /***
+     * 根据油品名称和油站查询油品调价信息
+     * @param map
+     * @return
+     */
+    List<Map> selectOilPriceAdjust(Map<String, Object> map);
+
+    /***
+     * 根据油品名称和油站查询油枪编号和价格
+     * @param map
+     * @return
+     */
+    Map selectOilGunNoAndOilPrice(Map<String, Object> map);
+
+
     /**
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table pay_order

+ 5 - 1
YijiaRestful/src/main/java/com/platform/yijia/service/PayOrderService.java

@@ -1,13 +1,16 @@
 package com.platform.yijia.service;
 
+import com.platform.yijia.param.request.PayOrderRequest;
+import com.platform.yijia.pojo.AppUserInfo;
 import com.platform.yijia.pojo.PayOrder;
 
 import java.util.List;
+import java.util.Map;
 
 public interface PayOrderService {
 
     //订单信息数据落地
-     String AddPayOrderInfo(PayOrder payOrder);
+     String AddPayOrderInfo(PayOrderRequest payOrderRequest, PayOrder payOrder);
 
      //根据订单号查询订单信息
      List<PayOrder> getPayOrderList(String orderNo);
@@ -18,4 +21,5 @@ public interface PayOrderService {
      //根据订单号查询
      PayOrder searchPayOrder(Integer orderId);
 
+
 }

+ 79 - 4
YijiaRestful/src/main/java/com/platform/yijia/service/impl/PayOrderServiceImpl.java

@@ -1,15 +1,21 @@
 package com.platform.yijia.service.impl;
 
 import com.platform.yijia.dao.PayOrderMapper;
+import com.platform.yijia.param.request.PayOrderRequest;
+import com.platform.yijia.pojo.AppUserInfo;
 import com.platform.yijia.pojo.PayOrder;
 
 import com.platform.yijia.pojo.PayOrderExample;
 import com.platform.yijia.service.PayOrderService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.List;
-import java.util.Random;
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 @Service("payOrderService")
 public class PayOrderServiceImpl implements PayOrderService {
@@ -17,12 +23,26 @@ public class PayOrderServiceImpl implements PayOrderService {
     private PayOrderMapper payOrderMapper;
 
     /**
-     * t添加订单信息
+     * 添加订单信息
+     * @param payOrderRequest
      * @param payOrder
      * @return
      */
     @Override
-    public String AddPayOrderInfo(PayOrder payOrder) {
+    @Transactional
+    public String AddPayOrderInfo(PayOrderRequest payOrderRequest, PayOrder payOrder) {
+
+        //payOrder.setStatus("0");          //创建订单 未支付状态 0
+        payOrder.setAmt(payOrderRequest.getAmt());              //金额
+        payOrder.setOilName(payOrderRequest.getOilName());      //油品名称
+        payOrder.setStationId(payOrderRequest.getStationId());  //油站id
+        payOrder.setPayType(payOrderRequest.getPayType());      //支付类型
+        payOrder.setPayWay(payOrderRequest.getPayWay());        //支付方式
+        payOrder.setPayDate(new Date());    //支付时间
+        //payOrder.setOilPersonnel();       //加油员
+        payOrder.setCreatedDate(new Date());    //创建时间
+        //payOrder.setOrderType("");            //订单类型
+
         //订单规则 时间+6位随机数
         Random random = new Random();
         String result="";
@@ -32,6 +52,30 @@ public class PayOrderServiceImpl implements PayOrderService {
         System.out.println("随机生成6位数result :"+result);
         String ordNo=System.nanoTime()+result;
         payOrder.setOrderNo(ordNo);
+
+        //根据油站和油枪获取油枪编号和价格
+        HashMap<String, Object> params = new HashMap<>();
+        params.put("oilGunId", payOrderRequest.getOilGun());
+        params.put("stationId", payOrderRequest.getStationId());
+        Map mapOilGunNoAndOilPrice = payOrderMapper.selectOilGunNoAndOilPrice(params);
+        payOrder.setOilGun(mapOilGunNoAndOilPrice.get("oliGunNo").toString());         //存入油枪号
+
+        //根据油品名称和油站id获取当前油品调价信息
+        params.put("oilName", payOrderRequest.getOilName());
+        List<Map> oilPriceAdjustList = payOrderMapper.selectOilPriceAdjust(params);
+        String amt = payOrderRequest.getAmt();  //订单金额
+        if(oilPriceAdjustList != null && oilPriceAdjustList.size() > 0){        //若存在油价价格调整时
+            for (Map m : oilPriceAdjustList){
+                if(compareEffectTime(m.get("takeEffectDate").toString())){      // 如果生效时间小于当前时间则使用生效时间 取离当前时间最近的调整价格(查询结果按生效时间降序排序故只做此判断即可)
+                    payOrder.setOrderLiters(recKonOrderLiters(amt, m.get("oilAdjustPrice").toString(), 2));       //计算加油升数且存入
+                    break;
+                }
+            }
+        }else {     //若没有油价调整时则使用原始油价计算加油升数
+            String oilPrice = mapOilGunNoAndOilPrice.get("oilPrice").toString();    //原始价格
+            payOrder.setOrderLiters(recKonOrderLiters(amt, oilPrice, 2));     //计算油价升数存放
+        }
+
         //数据落地
         payOrderMapper.insertSelective(payOrder);
         //根据订单号查询出订单
@@ -45,6 +89,37 @@ public class PayOrderServiceImpl implements PayOrderService {
     }
 
     /*
+     * 计算加油升数
+     * @param str1
+     * @param str2
+     * @param scale 保留小数位数
+     * @return String
+     */
+    public String recKonOrderLiters(String str1, String str2, int scale){
+        return  String.valueOf(new BigDecimal(str1).divide(new BigDecimal(str2), scale, BigDecimal.ROUND_HALF_UP).doubleValue());
+    }
+
+    /*
+     * 判断油价生效时间是否小于当前时间
+     * @param takeEffectDate
+     * @return boolean
+     */
+    public boolean compareEffectTime(String takeEffectDate){
+        boolean flag = false;
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
+        try {
+            Date teDate = df.parse(takeEffectDate);
+            String currentTime = df.format(new Date());
+            if(teDate.getTime() <= df.parse(currentTime).getTime()){
+                flag = true;
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+    /*
      * 查询订单信息
      * */
     @Override

+ 5 - 1
YijiaRestful/src/main/resources/application.yml

@@ -12,10 +12,14 @@ server:
 # Spring配置
 spring:
     datasource:
-        url: jdbc:mysql://47.105.116.204:3306/jiaduoduo_db_test?useUnicode=true&characterEncoding=utf8
+        url: jdbc:mysql://47.105.116.204:3306/jiaduoduo_db_test?useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&serverTimezone=GMT%2b8
         username: develop
         password: 1234.Abcd
         driver-class-name: com.mysql.cj.jdbc.Driver
+    #格式化时间
+    jackson:
+        time-zone: GMT+8
+        date-format: yyyy-MM-dd HH:mm:ss
     # redis 配置
     redis:
         # 地址

+ 47 - 0
YijiaRestful/src/main/resources/mapper/PayOrderMapper.xml

@@ -97,6 +97,53 @@
     order_id, order_no, oil_gun, oil_name, consumer_id, consumer, amt, station_id, status, 
     order_liters, pay_type, pay_way, pay_date, oil_personnel, created_date, order_type
   </sql>
+
+  <!-- 根据油品名称和油站查询油枪编号和价格 -->
+  <select id="selectOilGunNoAndOilPrice" parameterType="map" resultType="map">
+    SELECT
+        A.oil_gun_no 	AS oliGunNo,
+        A.oil_name 	    AS oilName,
+        A.station_name  AS stationName,
+        B.oil_price	    AS oilPrice
+    FROM station_oil_gun AS A
+        LEFT JOIN station_oil_price AS B ON A.oil_name = B.oil_name AND A.station_id = B.station_id
+    <where>
+        <if test="oilGunId != null and oilGunId !=''">
+          A.oil_gun_id = #{oilGunId}
+        </if>
+        <if test="stationId !=null and stationId !=''">
+          AND A.station_id = #{stationId}
+        </if>
+    </where>
+  </select>
+  <!-- 根据油品名称和油站id获取当前油品调价信息 -->
+  <select id="selectOilPriceAdjust" parameterType="map" resultType="map">
+    SELECT
+        adjust_price_id     AS adjustPriceId,
+        oil_name            AS oilName,
+        oil_adjust_price    AS oilAdjustPrice,
+        take_effect_status  AS takeEffectStatus,
+        take_effect_date    AS takeEffectDate,
+        adjust_date         AS adjustDate,
+        station_id          AS stationId,
+        operator            AS operator,
+        status              AS status
+    FROM
+        station_oil_price_adjust
+    <where>
+      <if test="oilName !=null and oilName !=''">
+        oil_name = #{oilName}
+      </if>
+      <if test="stationId !=null and stationId !=''">
+        AND station_id = #{stationId}
+      </if>
+      ORDER BY take_effect_date DESC
+    </where>
+
+  </select>
+
+
+
   <select id="selectByExample" parameterType="com.platform.yijia.pojo.PayOrderExample" resultMap="BaseResultMap">
     <!--
       WARNING - @mbg.generated