Kaynağa Gözat

批量添加订单优化

yq 2 yıl önce
ebeveyn
işleme
b7620c50ce

+ 60 - 0
src/main/java/com/usky/dxtop/controller/web/business/WeatherControllerWeb.java

@@ -0,0 +1,60 @@
+package com.usky.dxtop.controller.web.business;
+
+
+import com.usky.dxtop.common.exception.CustomException;
+import com.usky.dxtop.common.utils.StringUtils;
+import com.usky.dxtop.common.utils.http.HttpUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author yq
+ * @date 2021/6/16 18:02
+ */
+@RestController
+@RequestMapping("aliWeather")
+public class WeatherControllerWeb {
+
+
+    private static final String ALI_WEATHER_API_URL = "https://weather01.market.alicloudapi.com/area-to-weather";
+    private static final String ALI_WEATHER_HEADER_KEY = "Authorization";
+    private static final String ALI_WEATHER_APPCODE = "0f2b7fce6e104ba8835358b7b59b4fb6";
+    private static final String ALI_WEATHER_HEADER_VALUE = "APPCODE " + ALI_WEATHER_APPCODE;
+
+    private String weather = "";
+
+    private Date date = null;
+
+    @GetMapping()
+    public String get(@RequestParam String area) {
+        if (StringUtils.isBlank(weather)){
+            weather = getWeatherApi(area);
+            date = new Date();
+        }else {
+            if ((System.currentTimeMillis() - date.getTime()) >= (1000 * 60 * 60 * 5)){
+                weather = getWeatherApi(area);
+                date = new Date();
+            }
+        }
+        return weather;
+    }
+    public String getWeatherApi(String area){
+        try {
+            Map<String,String> headerMap = new HashMap<>();
+            headerMap.put(ALI_WEATHER_HEADER_KEY,ALI_WEATHER_HEADER_VALUE);
+            String encode = URLEncoder.encode(area, "UTF-8");
+            return HttpUtils.sendGet(ALI_WEATHER_API_URL,String.format("%s%s","area=",encode),headerMap);
+        } catch (Exception e) {
+            throw new CustomException(e.getMessage());
+        }
+    }
+}
+

+ 11 - 7
src/main/java/com/usky/dxtop/service/config/rabbitmq/RabbitmqConfig.java

@@ -74,14 +74,14 @@ public class RabbitmqConfig {
                 Optional.ofNullable(correlationData)
                         .ifPresent(corre -> Optional.ofNullable(corre.getId())
                                 .ifPresent(id -> {
-                                    String msgId = corre.getId();
-                                    MsgLog msgLog = new MsgLog();
-                                    msgLog.setId(Long.parseLong(msgId));
-                                    msgLog.setMsgFlag(MsgLogStatus.DELIVER_SUCCESS.getCode());
-                                    msgLogService.updateById(msgLog);
+//                                    String msgId = corre.getId();
+//                                    MsgLog msgLog = new MsgLog();
+//                                    msgLog.setId(Long.parseLong(msgId));
+//                                    msgLog.setMsgFlag(MsgLogStatus.DELIVER_SUCCESS.getCode());
+//                                    msgLogService.updateById(msgLog);
                                 }));
             } else {
-                log.info("消息发送到Exchange失败, {}, cause: {}", correlationData, cause);
+                log.error("消息发送到Exchange失败, {}, cause: {}", correlationData, cause);
             }
         });
 
@@ -89,12 +89,16 @@ public class RabbitmqConfig {
         rabbitTemplate.setMandatory(true);
         // 消息是否从Exchange路由到Queue, 注意: 这是一个失败回调, 只有消息从Exchange路由到Queue失败才会回调这个方法
         rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
-            log.info("消息从Exchange路由到Queue失败: exchange: {}, route: {}, replyCode: {}, replyText: {}, message: {}", exchange, routingKey, replyCode, replyText, message);
+            log.error("消息从Exchange路由到Queue失败: exchange: {}, route: {}, replyCode: {}, replyText: {}, message: {}", exchange, routingKey, replyCode, replyText, message);
         });
 
         return rabbitTemplate;
     }
 
+    public RabbitTemplate batchNoRabbitTemplate(ConnectionFactory connectionFactory){
+        return new RabbitTemplate(connectionFactory);
+    }
+
     /**
      * 监听工厂
      * @param configurer

+ 26 - 8
src/main/java/com/usky/dxtop/service/impl/OrderServiceImpl.java

@@ -20,6 +20,7 @@ import com.usky.dxtop.common.enums.BusinessType;
 import com.usky.dxtop.common.exception.CustomException;
 import com.usky.dxtop.common.utils.*;
 import com.usky.dxtop.common.utils.http.HttpUtils;
+import com.usky.dxtop.framework.web.domain.server.Sys;
 import com.usky.dxtop.mapper.OrderMapper;
 import com.usky.dxtop.model.*;
 import com.usky.dxtop.service.*;
@@ -35,6 +36,7 @@ import ma.glasnost.orika.impl.DefaultMapperFactory;
 import org.apache.poi.ss.formula.functions.T;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
@@ -202,7 +204,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             msgLog.setExchange(RabbitmqBeenCode.CART_CHARGE_CONSUMER.getName());
             msgLog.setRoutingKey(RabbitmqBeenCode.CART_CHARGE_CONSUMER.getName());
             msgLog.setMsg(JSON.toJSONString(chargeVo));
-            msgLog.setId(System.currentTimeMillis());
+            msgLog.setId(System.nanoTime());
             msgLog.setCreateTime(new Date());
             msgLogService.save(msgLog);
             chargeVo.setSeq(msgLog.getId());
@@ -783,10 +785,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
      */
     public void sendMessage(List<Order> orderList,List<MsgLog> msgLogs){
         AtomicBoolean b = new AtomicBoolean(true);
+        RabbitTemplate rabbitmqTemplate = RabbitmqUtils.getRabbitmqTemplate(RabbitmqBeenCode.CART_CHARGE_CONSUMER);
         msgLogs.forEach(msgLog -> {
             try {
                 CorrelationData correlationData = new CorrelationData(msgLog.getId().toString());
-                RabbitmqUtils.getRabbitmqTemplate(RabbitmqBeenCode.CART_CHARGE_CONSUMER).convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), msgLog.getChargeVO(),correlationData);
+                rabbitmqTemplate.convertAndSend(msgLog.getExchange(), msgLog.getRoutingKey(), msgLog.getChargeVO(),correlationData);
             }catch (Exception e){
                 b.set(false);
                 log.error("---order---卡充值消息发送异常"+ e.getMessage());
@@ -848,9 +851,23 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (CollectionUtils.isEmpty(orderFileVOS)){
                 throw new CustomException("表格数据为空");
             }
-            return BeanMapperUtils.mapList(orderFileVOS,OrderFileVO.class,Order.class);
+            List<Order> orderList = BeanMapperUtils.mapList(orderFileVOS, OrderFileVO.class, Order.class);
+            long count = orderList.stream().filter(order -> null == order.getMoney() && order.getMoney().compareTo(BigDecimal.ZERO) == 0).count();
+            if (count > 0){
+                throw new CustomException("订单金额不能为空");
+            }
+            long count1 = orderList.stream().filter(order -> StringUtils.isBlank(order.getUserName())).count();
+            if (count1 > 0){
+                throw new CustomException("用户名称不能为空");
+            }
+            long count2 = orderList.stream().filter(order -> StringUtils.isBlank(order.getUserPhone())).count();
+            if (count2 > 0){
+                throw new CustomException("用户手机号不能为空");
+            }
+
+            return orderList;
         }catch (Exception e){
-            throw new CustomException("解析订单异常"+e.getMessage());
+            throw new CustomException("解析订单异常,检查订单格式"+e.getMessage());
         }
     }
 
@@ -887,7 +904,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         order.setCard(staff.getCardId());
         order.setPayType(OrderPayType.XJ.getPayCode());
         order.setScene(OrderSceneCode.BACK_STAGE.getCode());
-        order.setOrderFlag(OrderStatus.SUCCESS.getCode());
+        order.setOrderFlag(OrderStatus.PAYMENT_ERROR_DEBIT.getCode());
         String orderNumber = TopApiConfiger.getOrderNumber();
         order.setOrderNumber(orderNumber);
         return true;
@@ -900,7 +917,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
      * @return
      */
     public MsgLog enhanceMsgLog(Order order){
-        Long seq = System.currentTimeMillis();
+        long seq = System.nanoTime();
         ChargeVO chargeVo = new ChargeVO();
         chargeVo.setAmt(order.getMoney());
         if (null != order.getRealMoney() && order.getRealMoney().compareTo(BigDecimal.ZERO)  != 0){
@@ -908,15 +925,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
         chargeVo.setCard(order.getCard());
         chargeVo.setSeq(seq);
-
         MsgLog msgLog = new MsgLog();
         msgLog.setBusinessId(String.format("%s%s",MsgLogBusinessCode.ORDER,order.getId()));
         msgLog.setExchange(RabbitmqBeenCode.CART_CHARGE_CONSUMER.getName());
         msgLog.setRoutingKey(RabbitmqBeenCode.CART_CHARGE_CONSUMER.getName());
-        msgLog.setId(seq);
         msgLog.setCreateTime(new Date());
         msgLog.setMsg(JSON.toJSONString(chargeVo));
         msgLog.setChargeVO(chargeVo);
+        msgLog.setId(seq);
         return msgLog;
     }
 
@@ -950,4 +966,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             throw new CustomException("上传文件失败"+e.getMessage());
         }
     }
+
+
 }

+ 3 - 0
src/main/java/com/usky/dxtop/service/vo/OrderFileVO.java

@@ -3,6 +3,7 @@ package com.usky.dxtop.service.vo;
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import java.math.BigDecimal;
 
 /**
@@ -16,10 +17,12 @@ public class OrderFileVO {
      * 用户名称
      */
     @Excel(name = "用户名称",width = 14)
+    @NotBlank(message = "[用户名称]不能为空")
     private String userName;
     /**
      * 用户手机号
      */
+    @NotBlank(message = "[用户手机号]不能为空")
     @Excel(name = "用户手机号",width = 14)
     private String userPhone;
     /**

+ 1 - 1
src/main/resources/application-dev.properties

@@ -17,7 +17,7 @@ mybatis.refresh.sleep-seconds=20
 # datasource
 spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
 spring.datasource.dynamic.primary=dxtop
-spring.datasource.dynamic.datasource.dxtop.url=jdbc:mysql://101.133.214.75:3306/dxtop?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowMultiQueries=true
+spring.datasource.dynamic.datasource.dxtop.url=jdbc:mysql://101.133.214.75:3306/dxtop?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowMultiQueries=true&rewriteBatchedStatements=true
 spring.datasource.dynamic.datasource.dxtop.username=usky
 spring.datasource.dynamic.datasource.dxtop.password=Yt#75Usky
 spring.datasource.dynamic.druid.initial-size=5                                                                       

+ 1 - 1
src/main/resources/application-prod.properties

@@ -17,7 +17,7 @@ mybatis.refresh.sleep-seconds=20
 # datasource
 spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
 spring.datasource.dynamic.primary=dxtop
-spring.datasource.dynamic.datasource.dxtop.url=jdbc:mysql://10.23.39.230:13306/dxtop?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowMultiQueries=true
+spring.datasource.dynamic.datasource.dxtop.url=jdbc:mysql://10.23.39.230:13306/dxtop?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowMultiQueries=true&rewriteBatchedStatements=true
 spring.datasource.dynamic.datasource.dxtop.username=dxtop
 spring.datasource.dynamic.datasource.dxtop.password=E7c5azRq
 spring.datasource.dynamic.druid.initial-size=5                                                                       

+ 2 - 3
src/main/resources/mapper/StaffMapper.xml

@@ -56,10 +56,9 @@
         </where>
     </select>
     <select id="selectListByPhones" resultType="com.usky.dxtop.model.Staff">
-        select s.*,d.name as deptName,tr.identity,tr.proportion,tr.id as radioId
+        select s.status as status,s.is_success as isSuccess,s.s_id as sId,s.card_id as cardId,s.name as name,s.contacts as contacts,
+        tr.identity,tr.proportion,tr.id as radioId
         from staff as s
-        left join dept as d
-        on s.dept_id = d.id
         left join staff_radio as sr
         on s.s_id = sr.staff_id
         left join top_radio as tr

+ 5 - 3
src/test/java/com/usky/dxtop/SmApiTest.java

@@ -89,12 +89,14 @@ public class SmApiTest {
 //    }
 
 
+    @Autowired
+    private SmJob smJob;
 
     @Test
     public void test6(){
-        SmJob.PersonParam personParam = new SmJob.PersonParam();
-        personParam.setBlurry("田光辉");
-        centerUserJob.personApi(personParam);
+//        SmJob.PersonParam personParam = new SmJob.PersonParam();
+//        personParam.setBlurry("田光辉");
+        smJob.personApi(null);
     }