he.dujuan 3 years ago
parent
commit
80417963c0
27 changed files with 566 additions and 100 deletions
  1. 4 0
      eladmin-common/pom.xml
  2. 64 0
      eladmin-common/src/main/java/me/zhengjie/base/BaseResponse.java
  3. 33 0
      eladmin-common/src/main/java/me/zhengjie/base/QueryPageParams.java
  4. 15 0
      eladmin-common/src/main/java/me/zhengjie/config/MyAMQPConfig.java
  5. 2 2
      eladmin-common/src/main/java/me/zhengjie/utils/ConnectionUtil.java
  6. 27 0
      eladmin-common/src/main/java/me/zhengjie/utils/EncryptUtils.java
  7. 33 0
      eladmin-common/src/main/java/me/zhengjie/utils/SecurityUtils.java
  8. 2 0
      eladmin-system/src/main/java/me/zhengjie/AppRun.java
  9. 1 0
      eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/repository/DmDayPcRepository.java
  10. 37 12
      eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/rest/ReceiveMsg.java
  11. 5 2
      eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/rest/SendMsg.java
  12. 0 3
      eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/service/DmDayPcService.java
  13. 1 3
      eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/service/impl/DmDayPcServiceImpl.java
  14. 15 30
      eladmin-system/src/main/java/me/zhengjie/modules/dm/food/domain/DmFood.java
  15. 2 13
      eladmin-system/src/main/java/me/zhengjie/modules/dm/food/service/dto/DmFoodDto.java
  16. 1 1
      eladmin-system/src/main/java/me/zhengjie/modules/dm/food/service/impl/DmFoodServiceImpl.java
  17. 29 3
      eladmin-system/src/main/java/me/zhengjie/modules/dm/order/repository/DmOrderRecordRepository.java
  18. 15 14
      eladmin-system/src/main/java/me/zhengjie/modules/dm/order/rest/OrderReceiveMsg.java
  19. 13 14
      eladmin-system/src/main/java/me/zhengjie/modules/dm/order/rest/OrderSendMsg.java
  20. 12 0
      eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/DmOrderRecordService.java
  21. 115 0
      eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/dto/DmExpenseCalendar.java
  22. 13 1
      eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/impl/DmOrderItemServiceImpl.java
  23. 20 0
      eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/impl/DmOrderRecordServiceImpl.java
  24. 95 0
      eladmin-system/src/main/java/me/zhengjie/modules/thirdparty/v1/OpenApiController.java
  25. 1 0
      eladmin-system/src/main/java/me/zhengjie/modules/thirdparty/v1/package-info.java
  26. 2 0
      eladmin-system/src/main/resources/config/application-dev.yml
  27. 9 2
      eladmin-system/src/main/resources/config/application.yml

+ 4 - 0
eladmin-common/pom.xml

@@ -28,5 +28,9 @@
             <artifactId>amqp-client</artifactId>
             <version>3.4.1</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.amqp</groupId>
+            <artifactId>spring-amqp</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 64 - 0
eladmin-common/src/main/java/me/zhengjie/base/BaseResponse.java

@@ -0,0 +1,64 @@
+package me.zhengjie.base;
+
+import java.io.Serializable;
+
+public class BaseResponse<T>  implements Serializable {
+
+    private int status;
+    private String message;
+    private T data;
+    private Long timestamp;
+
+    public BaseResponse(T data) {
+        this.setStatus(200);
+        this.setData(data);
+        this.setMessage("sucess");
+        this.setTimestamp(System.currentTimeMillis());
+    }
+
+    public BaseResponse(T data, int code) {
+        this.setStatus(code);
+        this.setData(data);
+        this.setMessage("sucess");
+        this.setTimestamp(System.currentTimeMillis());
+    }
+
+    public BaseResponse(T data, int code, String message) {
+        this.setStatus(code);
+        this.setData(data);
+        this.setMessage(message);
+        this.setTimestamp(System.currentTimeMillis());
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public Long getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(Long timestamp) {
+        this.timestamp = timestamp;
+    }
+}

+ 33 - 0
eladmin-common/src/main/java/me/zhengjie/base/QueryPageParams.java

@@ -0,0 +1,33 @@
+package me.zhengjie.base;
+
+public class QueryPageParams<T> {
+    private String timestamp;
+    private String nonce;
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getNonce() {
+        return nonce;
+    }
+
+    public void setNonce(String nonce) {
+        this.nonce = nonce;
+    }
+
+    private T query;
+
+    public T getQuery() {
+        return query;
+    }
+
+    public void setQuery(T query) {
+        this.query = query;
+    }
+
+}

+ 15 - 0
eladmin-common/src/main/java/me/zhengjie/config/MyAMQPConfig.java

@@ -0,0 +1,15 @@
+package me.zhengjie.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class MyAMQPConfig {
+    @Bean
+    public MessageConverter messageConverter(){
+        return new Jackson2JsonMessageConverter();
+    }
+}

+ 2 - 2
eladmin-common/src/main/java/me/zhengjie/utils/ConnectionUtil.java

@@ -24,9 +24,9 @@ public class ConnectionUtil {
         //vhost(Virtual Host)
 //        factory.setVirtualHost("test");
         //用户名
-        factory.setUsername("test");
+        factory.setUsername("admin");
         //密码
-        factory.setPassword("test");
+        factory.setPassword("admin");
         //通过工厂获得与mq的连接对象
         Connection connection = null;
         try {

+ 27 - 0
eladmin-common/src/main/java/me/zhengjie/utils/EncryptUtils.java

@@ -21,6 +21,7 @@ import javax.crypto.SecretKeyFactory;
 import javax.crypto.spec.DESKeySpec;
 import javax.crypto.spec.IvParameterSpec;
 import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
 
 /**
  * 加密
@@ -97,4 +98,30 @@ public class EncryptUtils {
         }
         return b2;
     }
+
+    /**
+     * @return
+     * @Comment SHA1 加密
+     */
+    public static String sha1(String str) {
+        MessageDigest sha = null;
+        try {
+            sha = MessageDigest.getInstance("SHA");
+            byte[] byteArray = str.getBytes("UTF-8");
+            byte[] md5Bytes = sha.digest(byteArray);
+            StringBuffer hexValue = new StringBuffer();
+            for (int i = 0; i < md5Bytes.length; i++) {
+                int val = ((int) md5Bytes[i]) & 0xff;
+                if (val < 16) {
+                    hexValue.append("0");
+                }
+                hexValue.append(Integer.toHexString(val));
+            }
+            return hexValue.toString();
+        } catch (Exception e) {
+            System.out.println(e.toString());
+            e.printStackTrace();
+            return "";
+        }
+    }
 }

+ 33 - 0
eladmin-common/src/main/java/me/zhengjie/utils/SecurityUtils.java

@@ -19,6 +19,7 @@ import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import lombok.extern.slf4j.Slf4j;
+import me.zhengjie.base.QueryPageParams;
 import me.zhengjie.exception.BadRequestException;
 import me.zhengjie.utils.enums.DataScopeEnum;
 import org.springframework.http.HttpStatus;
@@ -26,6 +27,11 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -92,4 +98,31 @@ public class SecurityUtils {
         }
         return DataScopeEnum.ALL.getValue();
     }
+
+    /**
+     * 验证API访问权限
+     */
+    public static void CheckApiAuth(QueryPageParams params) {
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        if (request != null) {
+            String accesstoken = request.getHeader("X_YT_ACCESS_TOKEN");
+            String token = "DMERPYT!@#$QWER2021+{:>";
+
+            if (params == null || StringUtils.isBlank(params.getTimestamp()) || StringUtils.isBlank(params.getNonce()) || StringUtils.isBlank(accesstoken)) {
+                throw new BadRequestException(HttpStatus.UNAUTHORIZED, "认证失败");
+            }
+
+            String[] arr = {token, params.getTimestamp(), params.getNonce()};
+            Arrays.sort(arr);
+
+            String str = "";
+            for (int i = 0; i < arr.length; i++) {
+                str += arr[i];
+            }
+            String newtoken = EncryptUtils.sha1(str);
+            if (!accesstoken.equals(newtoken)) {
+                throw new BadRequestException(HttpStatus.UNAUTHORIZED, "认证失败");
+            }
+        }
+    }
 }

+ 2 - 0
eladmin-system/src/main/java/me/zhengjie/AppRun.java

@@ -28,6 +28,7 @@ import org.springframework.context.annotation.Primary;
 import org.springframework.core.task.TaskExecutor;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.web.bind.annotation.RestController;
@@ -39,6 +40,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @date 2018/11/15 9:20:19
  */
 @EnableAsync
+@EnableScheduling
 @RestController
 @Api(hidden = true)
 @SpringBootApplication(exclude = {org.activiti.spring.boot.SecurityAutoConfiguration.class})

+ 1 - 0
eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/repository/DmDayPcRepository.java

@@ -22,6 +22,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 
 import java.util.List;
+import java.util.Map;
 
 /**
 * @website https://el-admin.vip

+ 37 - 12
eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/rest/ReceiveMsg.java

@@ -1,23 +1,27 @@
 package me.zhengjie.modules.dm.daypc.rest;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.rabbitmq.client.*;
+import com.rabbitmq.client.Connection;
 import lombok.SneakyThrows;
 import me.zhengjie.modules.dm.daypc.domain.DmDayPc;
 import me.zhengjie.modules.dm.daypc.service.DmDayPcService;
+import me.zhengjie.modules.dm.food.domain.DmFood;
+import me.zhengjie.modules.dm.food.service.DmFoodService;
 import me.zhengjie.utils.ConnectionUtil;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.io.*;
+import java.sql.*;
+import java.text.*;
+import java.util.*;
 
 @Component
 //@RabbitListener(queues = "schedule_produce")
@@ -25,6 +29,10 @@ public class ReceiveMsg {
 //    private final static String SCHEDULE_PRODUCE = "schedule_produce";
     @Autowired
     private DmDayPcService dmDayPcService;
+    @Autowired
+    private DmFoodService dmFoodService;
+    @Autowired
+    RabbitTemplate rabbitTemplate;
     private static String isEable = "0";
 
     //每天10点执行
@@ -52,16 +60,29 @@ public class ReceiveMsg {
         Connection connection = ConnectionUtil.getConnection();
         try {
             Channel channel = connection.createChannel();
-            Timestamp d = new Timestamp(System.currentTimeMillis());
             //通过consumer来处理数据
             Consumer consumer = new DefaultConsumer(channel){
                 @SneakyThrows
                 @Override
                 public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                     //body就是从队列中获取的数据
-                    DmDayPc dmDayPc = (DmDayPc) getObjectFromBytes(body);
-                    dmDayPc.setPcdate(d);
-                    dmDayPcService.create(dmDayPc);
+                    String str = new String(body);
+                    List<DmDayPc>  list = JSONArray.parseArray(str,DmDayPc.class);
+//                    Map<String,Object> map = null;
+                    for (DmDayPc dmDayPc : list) {
+//                        map = new HashMap<>();
+//                        map.put("food",dmDayPc.getFood());
+                        dmDayPc.setPcdate(new Timestamp(System.currentTimeMillis()));
+                        dmDayPcService.create(dmDayPc);
+                        System.out.println("新增food==="+dmDayPc.getFood());
+                        dmFoodService.create(dmDayPc.getFood());
+                    }
+//                    Map<String,Object> map = JSONObject.parseObject(str);
+//                    for (Map.Entry<String, Object> entry : map.entrySet()) {
+//                        dmFoodService.create((DmFood) entry);
+//                        System.out.println("key====>" + entry.getKey() + ",value===>" + entry.getValue());
+//                    }
+
                 }
             };
             //参数1:接收哪个队列的数据
@@ -73,6 +94,10 @@ public class ReceiveMsg {
         }
     }
 
+//    public List<DmDayPc> getDmDayPc(){
+//        return JSONObject.parseArray(getDmDayPc(),DmDayPc.class);
+//    }
+
     public  Object getObjectFromBytes(byte[] objBytes) throws Exception {
         if (objBytes == null || objBytes.length == 0) {
             return null;

+ 5 - 2
eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/rest/SendMsg.java

@@ -18,7 +18,9 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeoutException;
 
 @Component
@@ -52,7 +54,7 @@ public class SendMsg {
         //获取连接
         Connection connection = ConnectionUtil.getConnection();
         try {
-            List<DmDayPcDto> dmDayPc = dmDayPcService.queryAll(null);
+            List<DmDayPc> dmDayPc = dmDayPcService.foodRepository();
             String userString = JSON.toJSONString(dmDayPc);
             Channel channel = connection.createChannel();
             String exchangeName = "schedule_produce";//交换机
@@ -61,7 +63,8 @@ public class SendMsg {
             channel.queueDeclare(queue1Name, true, false, false, null);
             channel.queueBind(queue1Name, exchangeName, "schedule_produce");// 队列绑定hello路由
             channel.basicPublish(exchangeName, "schedule_produce", null, userString.getBytes());
-//            Boy boy=new Boy(15,"tom");
+            System.out.println("sned排菜:"+dmDayPc);
+            //            Boy boy=new Boy(15,"tom");
             //对象转化为字节码 把对象转化为字节码后,把字节码传输过去再转化为对象
 //            byte[] bytes=getBytesFromObject(dmDayPc);
 //            amqpTemplate.convertAndSend("exchange","topic.messages",bytes);

+ 0 - 3
eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/service/DmDayPcService.java

@@ -87,7 +87,4 @@ public interface DmDayPcService {
      * @return
      */
     List<DmDayPc> foodRepository();
-
-//    void rabbitDayPcScz() throws IOException, Exception;
-//    void rabbitDayPcXfz() throws IOException, Exception;
 }

+ 1 - 3
eladmin-system/src/main/java/me/zhengjie/modules/dm/daypc/service/impl/DmDayPcServiceImpl.java

@@ -48,7 +48,6 @@ import javax.servlet.http.HttpServletResponse;
 @Service
 @RequiredArgsConstructor
 public class DmDayPcServiceImpl implements DmDayPcService {
-    private final static String SCHEDULE_PRODUCE = "schedule_produce";
     private final DmDayPcRepository dmDayPcRepository;
     private final DmDayPcMapper dmDayPcMapper;
 
@@ -175,7 +174,6 @@ public class DmDayPcServiceImpl implements DmDayPcService {
 
     @Override
     public List<DmDayPc> foodRepository() {
-        List<DmDayPc> dmFood = dmDayPcRepository.foodRepository();
-        return dmFood;
+        return dmDayPcRepository.foodRepository();
     }
 }

+ 15 - 30
eladmin-system/src/main/java/me/zhengjie/modules/dm/food/domain/DmFood.java

@@ -19,6 +19,7 @@ import lombok.Data;
 import cn.hutool.core.bean.BeanUtil;
 import io.swagger.annotations.ApiModelProperty;
 import cn.hutool.core.bean.copier.CopyOptions;
+import me.zhengjie.base.BaseEntity;
 import me.zhengjie.utils.SecurityUtils;
 import org.springframework.security.core.userdetails.UserDetails;
 
@@ -38,7 +39,7 @@ import java.util.Date;
 @Entity
 @Data
 @Table(name="dm_food")
-public class DmFood implements Serializable {
+public class DmFood extends BaseEntity implements Serializable {
 
     @Id
     @Column(name = "id")
@@ -64,22 +65,6 @@ public class DmFood implements Serializable {
     @ApiModelProperty(value = "图片")
     private String picture;
 
-    @Column(name = "create_by")
-    @ApiModelProperty(value = "创建者")
-    private String createBy;
-
-    @Column(name = "update_by")
-    @ApiModelProperty(value = "更新者")
-    private String updateBy;
-
-    @Column(name = "create_time")
-    @ApiModelProperty(value = "创建日期")
-    private Timestamp createTime;
-
-    @Column(name = "update_time")
-    @ApiModelProperty(value = "更新时间")
-    private Timestamp updateTime;
-
     @Column(name = "remark")
     @ApiModelProperty(value = "描述")
     private String remark;
@@ -92,17 +77,17 @@ public class DmFood implements Serializable {
         BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
     }
 
-    @PrePersist
-    public void prePersist() {
-        UserDetails user = SecurityUtils.getCurrentUser();
-        this.createBy = user.getUsername();
-        this.createTime = new Timestamp(new Date().getTime());
-    }
-
-    @PreUpdate
-    public void preUPdate() {
-        UserDetails user = SecurityUtils.getCurrentUser();
-        this.updateBy = user.getUsername();
-        this.updateTime = new Timestamp(new Date().getTime());
-    }
+//    @PrePersist
+//    public void prePersist() {
+//        UserDetails user = SecurityUtils.getCurrentUser();
+//        this.createBy = user.getUsername();
+//        this.createTime = new Timestamp(new Date().getTime());
+//    }
+
+//    @PreUpdate
+//    public void preUPdate() {
+//        UserDetails user = SecurityUtils.getCurrentUser();
+//        this.updateBy = user.getUsername();
+//        this.updateTime = new Timestamp(new Date().getTime());
+//    }
 }

+ 2 - 13
eladmin-system/src/main/java/me/zhengjie/modules/dm/food/service/dto/DmFoodDto.java

@@ -21,6 +21,7 @@ import java.math.BigDecimal;
 import java.io.Serializable;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.alibaba.fastjson.serializer.ToStringSerializer;
+import me.zhengjie.base.BaseDTO;
 
 /**
 * @website https://el-admin.vip
@@ -29,7 +30,7 @@ import com.alibaba.fastjson.serializer.ToStringSerializer;
 * @date 2021-09-15
 **/
 @Data
-public class DmFoodDto implements Serializable {
+public class DmFoodDto extends BaseDTO implements Serializable {
 
     /** 防止精度丢失 */
     @JSONField(serializeUsing = ToStringSerializer.class)
@@ -50,18 +51,6 @@ public class DmFoodDto implements Serializable {
     /** 图片 */
     private String picture;
 
-    /** 创建者 */
-    private String createBy;
-
-    /** 更新者 */
-    private String updateBy;
-
-    /** 创建日期 */
-    private Timestamp createTime;
-
-    /** 更新时间 */
-    private Timestamp updateTime;
-
     /** 描述 */
     private String remark;
 }

+ 1 - 1
eladmin-system/src/main/java/me/zhengjie/modules/dm/food/service/impl/DmFoodServiceImpl.java

@@ -105,7 +105,7 @@ public class DmFoodServiceImpl implements DmFoodService {
             map.put("单价", dmFood.getPrice());
             map.put("图片", dmFood.getPicture());
             map.put("创建者", dmFood.getCreateBy());
-            map.put("更新者", dmFood.getUpdateBy());
+            map.put("更新者", dmFood.getUpdatedBy());
             map.put("创建日期", dmFood.getCreateTime());
             map.put("更新时间", dmFood.getUpdateTime());
             map.put("描述", dmFood.getRemark());

+ 29 - 3
eladmin-system/src/main/java/me/zhengjie/modules/dm/order/repository/DmOrderRecordRepository.java

@@ -16,14 +16,17 @@
 package me.zhengjie.modules.dm.order.repository;
 
 import me.zhengjie.modules.dm.order.domain.DmOrderRecord;
-import me.zhengjie.modules.dm.service.domain.DmServicePj;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
+import me.zhengjie.modules.dm.order.service.dto.DmExpenseCalendar;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.Map;
+
 /**
 * @website https://el-admin.vip
 * @author sunmz
@@ -52,4 +55,27 @@ public interface DmOrderRecordRepository extends JpaRepository<DmOrderRecord, Lo
             " SELECT DISTINCT mob FROM dm_order_record WHERE create_date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 DAY),'%Y-%m-%d 00:00:00') AND DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 DAY),'%Y-%m-%d 23:59:59') " +
             " ) a ",nativeQuery = true)
     Integer countConsumerNumber();
+
+    @Query(value = "SELECT a.`id`, a.`bh`, a.`money`, a.`mob`, a.`user_code`, a.`user_name`, a.`dept_id`, " +
+            "a.`user_type`, a.`phone`, a.`create_date`, a.`total_money`, a.`zk_money`, a.`seq`, a.`card`, " +
+            "a.`card_no`, a.`part`, a.`term`, a.`shop`, a.`term_name`, a.`shop_name`, a.`amt`, a.`balance`, " +
+            "a.`account`, a.`type`,b.id as orderItemId,b.bh as orderItemBh,b.pid ," +
+            "b.code ,b.name ,b.price,b.num ," +
+            "b.money as orderItemMoney,b.seq as orderItemSeq,b.amt as orderItemAmt,b.pj_type as pjType  " +
+            "FROM dm_order_record a LEFT JOIN dm_order_item b ON a.bh=b.bh " +
+            "WHERE date_format(create_date,'%Y-%m-%d') = date_format(now(),'%Y-%m-%d') ",nativeQuery = true)
+    List<Map<String,Object>> selectOrderRecord();
+
+    @Modifying
+    @Query(value = "INSERT INTO `dm_order_record`(`bh`, `money`, `mob`, `user_code`, `user_name`, `dept_id`, `user_type`, `phone`, `create_date`, " +
+            "`total_money`, `zk_money`, `seq`, `card`, `card_no`, `part`, `term`, `shop`, `term_name`, `shop_name`, `amt`, `balance`, `account`, `type`) " +
+            "VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23) ",nativeQuery = true)
+    void insertOrderRecord(String bh, String money, String mob, String userCode, String userName, Long deptId, String userType, String phone, Timestamp createDate, String totalMoney, String zkMoney, Long seq, String card, String cardNo, Integer part, Integer term, Integer shop, String termName, String shopName, Double amt, Double balance, Integer account, Integer type);
+
+    @Modifying
+    @Query(value = "INSERT INTO `dm_order_item`(`bh`, `pid`, `code`, `name`, `price`, `num`, `money`, `seq`, `amt`, `pj_type`) " +
+            "VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10) ",nativeQuery = true)
+    void insertDmOrderItem(String bh,Long pid,String code,String name,String price,Integer num,String money,Long seq,Double amt,String pjType);
+
+
 }

+ 15 - 14
eladmin-system/src/main/java/me/zhengjie/modules/dm/order/rest/OrderReceiveMsg.java

@@ -1,5 +1,6 @@
 package me.zhengjie.modules.dm.order.rest;
 
+import com.alibaba.fastjson.JSONArray;
 import com.rabbitmq.client.*;
 import lombok.SneakyThrows;
 import me.zhengjie.modules.dm.daypc.domain.DmDayPc;
@@ -8,6 +9,8 @@ import me.zhengjie.modules.dm.order.domain.DmOrderItem;
 import me.zhengjie.modules.dm.order.domain.DmOrderRecord;
 import me.zhengjie.modules.dm.order.service.DmOrderItemService;
 import me.zhengjie.modules.dm.order.service.DmOrderRecordService;
+import me.zhengjie.modules.dm.order.service.dto.DmExpenseCalendar;
+import me.zhengjie.modules.dm.order.service.dto.DmOrderItemDto;
 import me.zhengjie.utils.ConnectionUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -17,13 +20,13 @@ import org.springframework.stereotype.Component;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
+import java.sql.Timestamp;
+import java.util.List;
 
 @Component
 public class OrderReceiveMsg {
     @Autowired
     private DmOrderRecordService dmOrderRecordService;
-    @Autowired
-    private DmOrderItemService dmOrderItemService;
     private static String isEable = "0";
 
     //每天10点执行
@@ -57,15 +60,18 @@ public class OrderReceiveMsg {
                 @Override
                 public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                     //body就是从队列中获取的数据
-                    DmOrderItem dmOrderItem = (DmOrderItem) getObjectFromBytes(body);
-                    DmOrderRecord dmOrderRecord = (DmOrderRecord) getObjectFromBytes(body);
-                    dmOrderItemService.create(dmOrderItem);
-                    dmOrderRecordService.create(dmOrderRecord);
+                    String str = new String(body);
+                    List<DmExpenseCalendar> dmOrderItem = JSONArray.parseArray(str,DmExpenseCalendar.class);
+//                    DmOrderRecord dmOrderRecord = (DmOrderRecord) getObjectFromBytes(body);
+//                    dmOrderItemService.create(dmOrderItem);
+//                    dmOrderRecordService.create(dmOrderRecord);
+                    for (DmExpenseCalendar dmExpenseCalendar : dmOrderItem) {
+//                        dmExpenseCalendar.setCreateDate(new Timestamp(System.currentTimeMillis()));
+                        dmOrderRecordService.createOrderItem(dmExpenseCalendar);
+                        dmOrderRecordService.createOrderRecord(dmExpenseCalendar);
+                    }
                 }
             };
-            //参数1:接收哪个队列的数据
-            //参数2:消息确认 是否应答,收到消息是否回复
-            //参数3:
             channel.basicConsume("dish_trade_produce",true,consumer);
         } catch (IOException e) {
             e.printStackTrace();
@@ -80,9 +86,4 @@ public class OrderReceiveMsg {
         ObjectInputStream oi = new ObjectInputStream(bi);
         return oi.readObject();
     }
-
-//    @RabbitHandler
-//    public void process(DmDayPc dmDayPc) {
-//        dmDayPcService.create(dmDayPc);
-//    }
 }

+ 13 - 14
eladmin-system/src/main/java/me/zhengjie/modules/dm/order/rest/OrderSendMsg.java

@@ -1,19 +1,13 @@
 package me.zhengjie.modules.dm.order.rest;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
-import me.zhengjie.modules.dm.daypc.service.DmDayPcService;
-import me.zhengjie.modules.dm.daypc.service.dto.DmDayPcDto;
-import me.zhengjie.modules.dm.order.domain.DmOrderItem;
-import me.zhengjie.modules.dm.order.domain.DmOrderRecord;
-import me.zhengjie.modules.dm.order.service.DmOrderItemService;
 import me.zhengjie.modules.dm.order.service.DmOrderRecordService;
-import me.zhengjie.modules.dm.order.service.dto.DmOrderItemDto;
-import me.zhengjie.modules.dm.order.service.dto.DmOrderRecordDto;
+import me.zhengjie.modules.dm.order.service.dto.DmExpenseCalendar;
 import me.zhengjie.utils.ConnectionUtil;
-import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -24,14 +18,13 @@ import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeoutException;
 
 @Component
 public class OrderSendMsg {
     @Autowired
     private DmOrderRecordService dmOrderRecordService;
-    @Autowired
-    private DmOrderItemService dmOrderItemService;
     private static String isEable = "0";
 
     //每天10点执行
@@ -56,9 +49,13 @@ public class OrderSendMsg {
         //获取连接
         Connection connection = ConnectionUtil.getConnection();
         try {
-            String userString1 = JSON.toJSONString(dmOrderItemService.queryAll(null));
-            String userString2 = JSON.toJSONString(dmOrderRecordService.queryAll(null));
-
+//            String userString1 = JSON.toJSONString(dmOrderItemService.queryAll(null));
+//            String userString2 = JSON.toJSONString(dmOrderRecordService.selectOrderRecord());
+            List<Map<String,Object>> map = dmOrderRecordService.selectOrderRecord();
+            JSONArray jsonArray = new JSONArray();
+            jsonArray.addAll(map);
+            List<DmExpenseCalendar> list = jsonArray.toJavaList(DmExpenseCalendar.class);
+            String userString2 = JSON.toJSONString(list);
             Channel channel = connection.createChannel();
             String exchangeName = "dish_trade_produce";//交换机
             channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT, true,false, null);
@@ -69,8 +66,10 @@ public class OrderSendMsg {
 //            byte[] bytes = new byte[2];
 //            bytes = userString1.getBytes();
 //            bytes[1] = (Byte)
-            channel.basicPublish(exchangeName, "dish_trade_produce", null, userString1.getBytes());
+//            channel.basicPublish(exchangeName, "dish_trade_produce", null, userString1.getBytes());
             channel.basicPublish(exchangeName, "dish_trade_produce", null, userString2.getBytes());
+//            System.out.println("userString1"+userString1);
+            System.out.println("消费记录:"+userString2);
 
             channel.close();
             connection.close();

+ 12 - 0
eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/DmOrderRecordService.java

@@ -15,7 +15,9 @@
 */
 package me.zhengjie.modules.dm.order.service;
 
+import me.zhengjie.modules.dm.order.domain.DmOrderItem;
 import me.zhengjie.modules.dm.order.domain.DmOrderRecord;
+import me.zhengjie.modules.dm.order.service.dto.DmExpenseCalendar;
 import me.zhengjie.modules.dm.order.service.dto.DmOrderRecordDto;
 import me.zhengjie.modules.dm.order.service.dto.DmOrderRecordQueryCriteria;
 import org.springframework.data.domain.Pageable;
@@ -93,4 +95,14 @@ public interface DmOrderRecordService {
      * 首页统计信息
      */
     Map<String,Object> panelGroup();
+
+    List<Map<String,Object>> selectOrderRecord();
+
+    /**
+     * 创建
+     * @param resources /
+     * @return DmOrderRecordDto
+     */
+    void createOrderRecord(DmExpenseCalendar resources);
+    void createOrderItem(DmExpenseCalendar resources);
 }

+ 115 - 0
eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/dto/DmExpenseCalendar.java

@@ -0,0 +1,115 @@
+package me.zhengjie.modules.dm.order.service.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.ToStringSerializer;
+import lombok.Data;
+import me.zhengjie.modules.dm.food.domain.DmFood;
+import me.zhengjie.modules.dm.order.domain.DmOrderItem;
+import me.zhengjie.modules.system.domain.Dept;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+@Data
+public class DmExpenseCalendar implements Serializable {
+    /** 防止精度丢失 */
+    @JSONField(serializeUsing = ToStringSerializer.class)
+    private Long id;
+
+    private DmOrderItem orderItem;
+
+    //实付金额
+    private String money;
+    private String orderItemMoney;
+
+    //用户唯一识别号
+    private String mob;
+
+    //用户工号
+    private String userCode;
+
+    //用户姓名
+    private String userName;
+
+    //用户部门
+    private Long deptId;
+
+    //人员种类
+    private String userType;
+
+    //用户手机号
+    private String phone;
+
+    //下单时间
+    private Timestamp createDate;
+
+    //合计金额
+    private String totalMoney;
+
+    //折扣
+    private String zkMoney;
+
+    //流水号
+    private Long seq;
+    private Long orderItemSeq;
+
+    //卡id
+    private String card;
+
+    //卡no
+    private String cardNo;
+
+    //餐别 1-早餐,2-午餐,3-晚餐,4-夜宵
+    private Integer part;
+
+    //终端id
+    private Integer term;
+
+    //餐厅id
+    private Integer shop;
+
+    //终端名称
+    private String termName;
+
+    //餐厅名称
+    private String shopName;
+
+    //金额
+    private Double amt;
+    private Double orderItemAmt;
+
+    //卡余额
+    private Double balance;
+
+    //账户类型 0-主账户、1-补贴账户
+    private Integer account;
+
+    //支付类型 11-主账户、21-补贴账户、 2-现金、 3-银联、30-扫码支付、31-微信、32-支付宝
+    private Integer type;
+
+    /** 防止精度丢失 */
+//    @JSONField(serializeUsing = ToStringSerializer.class)
+    private Long orderItemId;
+
+    private String pjType;
+
+    /** 编号 */
+    private String bh;
+    private String orderItemBh;
+
+    /** 商品编号 */
+    private DmFood food;
+
+    private Long pid;
+
+    private String code;
+
+    /** 商品名称 */
+    private String name;
+
+    /** 单价 */
+    private String price;
+
+    /** 数量 */
+    private Integer num;
+}

+ 13 - 1
eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/impl/DmOrderItemServiceImpl.java

@@ -55,7 +55,19 @@ public class DmOrderItemServiceImpl implements DmOrderItemService {
     @Override
     public Map<String,Object> queryAll(DmOrderItemQueryCriteria criteria, Pageable pageable){
         Page<DmOrderItem> page = dmOrderItemRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
-        return PageUtil.toPage(page.map(dmOrderItemMapper::toDto));
+        List<DmOrderItem> list = page.getContent();
+        List<DmOrderItem> list1 = new ArrayList<DmOrderItem>();
+        Integer sum = 0;
+        for(DmOrderItem dmOrderItem: list) {
+            list1.add(dmOrderItem);
+            sum += Integer.valueOf(dmOrderItem.getMoney());
+        }
+        DmOrderItem dmOrderItem = new DmOrderItem();
+        dmOrderItem.setName("合计");
+        dmOrderItem.setMoney(sum.toString());
+        list1.add(dmOrderItem);
+        return PageUtil.toPage(list1,page.getTotalElements());
+//        return PageUtil.toPage(page.map(dmOrderItemMapper::toDto));
     }
 
     @Override

+ 20 - 0
eladmin-system/src/main/java/me/zhengjie/modules/dm/order/service/impl/DmOrderRecordServiceImpl.java

@@ -16,7 +16,9 @@
 package me.zhengjie.modules.dm.order.service.impl;
 
 import me.zhengjie.modules.dm.daypc.repository.DmDayPcRepository;
+import me.zhengjie.modules.dm.order.domain.DmOrderItem;
 import me.zhengjie.modules.dm.order.domain.DmOrderRecord;
+import me.zhengjie.modules.dm.order.service.dto.DmExpenseCalendar;
 import me.zhengjie.utils.ValidationUtil;
 import me.zhengjie.utils.FileUtil;
 import lombok.RequiredArgsConstructor;
@@ -133,4 +135,22 @@ public class DmOrderRecordServiceImpl implements DmOrderRecordService {
         map.put("dishesNumber",dishesNumber);
         return map;
     }
+
+    @Override
+    public List<Map<String,Object>> selectOrderRecord() {
+        return dmOrderRecordRepository.selectOrderRecord();
+    }
+
+    @Override
+    @Transactional
+    public void createOrderRecord(DmExpenseCalendar resources) {
+        dmOrderRecordRepository.insertOrderRecord(resources.getBh(),resources.getMoney(),resources.getMob(),resources.getUserCode(),resources.getUserName(),resources.getDeptId(),resources.getUserType(),resources.getPhone(),resources.getCreateDate(),resources.getTotalMoney(),resources.getZkMoney(),resources.getSeq(),resources.getCard(),resources.getCardNo(),resources.getPart(),resources.getTerm(),resources.getShop(),resources.getTermName(),resources.getShopName(),resources.getAmt(),resources.getBalance(),resources.getAccount(),resources.getType());
+    }
+
+    @Override
+    @Transactional
+    public void createOrderItem(DmExpenseCalendar resources) {
+        dmOrderRecordRepository.insertDmOrderItem(resources.getBh(),resources.getPid(),resources.getCode(),resources.getName(),resources.getPrice(),resources.getNum(),resources.getOrderItemMoney(),resources.getOrderItemSeq(),resources.getOrderItemAmt(),resources.getPjType());
+    }
+
 }

+ 95 - 0
eladmin-system/src/main/java/me/zhengjie/modules/thirdparty/v1/OpenApiController.java

@@ -0,0 +1,95 @@
+package me.zhengjie.modules.thirdparty.v1;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import me.zhengjie.annotation.Log;
+import me.zhengjie.annotation.rest.AnonymousPostMapping;
+import me.zhengjie.base.BaseResponse;
+import me.zhengjie.base.QueryPageParams;
+import me.zhengjie.domain.LocalStorage;
+import me.zhengjie.exception.BadRequestException;
+import me.zhengjie.modules.dm.daypc.domain.DmDayPc;
+import me.zhengjie.modules.dm.daypc.service.DmDayPcService;
+import me.zhengjie.modules.dm.daypc.service.dto.DmDayPcQueryCriteria;
+import me.zhengjie.modules.dm.foodPj.domain.DmFoodPj;
+import me.zhengjie.modules.dm.foodPj.service.DmFoodPjService;
+import me.zhengjie.modules.dm.service.domain.DmServicePj;
+import me.zhengjie.modules.dm.service.service.DmServicePjService;
+import me.zhengjie.modules.dmApp.domain.AppFoodPj;
+import me.zhengjie.modules.dmApp.service.AppFoodPjService;
+import me.zhengjie.service.LocalStorageService;
+import me.zhengjie.utils.FileUtil;
+import me.zhengjie.utils.SecurityUtils;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "用户接口")
+@RequestMapping("/api/thirdparty/v1/open")
+public class OpenApiController {
+    private final DmDayPcService dmDayPcService;
+    private final DmServicePjService dmServicePjService;
+    private final AppFoodPjService appFoodPjService;
+    private final DmFoodPjService dmFoodPjService;
+    private final LocalStorageService localStorageService;
+
+    @Log("获取今日菜品-App")
+    @ApiOperation("获取今日菜品-App")
+    @AnonymousPostMapping(value = "/foodRepository")
+    public BaseResponse<Object> foodRepository(@RequestBody QueryPageParams<DmDayPcQueryCriteria> criteria, Pageable pageable){
+        SecurityUtils.CheckApiAuth(criteria);
+        List<DmDayPc> map = dmDayPcService.foodRepository();
+        return new BaseResponse<>(map);
+    }
+
+    @AnonymousPostMapping(value = "/createApp")
+    @Log("新增服务评价")
+    @ApiOperation("新增服务评价")
+    public BaseResponse<Object> createApp(@RequestBody QueryPageParams<DmServicePj> resources){
+        SecurityUtils.CheckApiAuth(resources);
+        dmServicePjService.createApp(resources.getQuery());
+        return new BaseResponse<>(dmServicePjService.createApp(resources.getQuery()));
+    }
+
+    @AnonymousPostMapping(value = "/appFoodPj")
+    @Log("App菜品评价")
+    @ApiOperation("App菜品评价")
+    public BaseResponse<Object> appFoodPj(@RequestBody QueryPageParams<String> userCode) {
+        SecurityUtils.CheckApiAuth(userCode);
+        List<AppFoodPj> list = appFoodPjService.selectAppFoodPj(userCode.getQuery());
+        return new BaseResponse<>(list);
+    }
+
+    @AnonymousPostMapping(value = "/createFoodPj")
+    @Log("新增菜品评价")
+    @ApiOperation("新增菜品评价")
+    public BaseResponse<Object> createFoodPj(@RequestBody QueryPageParams<DmFoodPj> resources){
+        SecurityUtils.CheckApiAuth(resources);
+        dmFoodPjService.createApp(resources.getQuery());
+        return new BaseResponse<>(dmFoodPjService.createApp(resources.getQuery()));
+    }
+
+    @AnonymousPostMapping(value = "/pictures")
+    @Log("上传图片")
+    @ApiOperation("上传图片")
+    public BaseResponse<Object> upload(@RequestBody QueryPageParams<MultipartFile> file){
+        SecurityUtils.CheckApiAuth(file);
+        // 判断文件是否为图片
+        String suffix = FileUtil.getExtensionName(file.getQuery().getOriginalFilename());
+        if(!FileUtil.IMAGE.equals(FileUtil.getFileType(suffix))){
+            throw new BadRequestException("只能上传图片");
+        }
+        LocalStorage localStorage = localStorageService.create(null, file.getQuery());
+        return new BaseResponse<>(localStorage);
+    }
+
+}

+ 1 - 0
eladmin-system/src/main/java/me/zhengjie/modules/thirdparty/v1/package-info.java

@@ -0,0 +1 @@
+package me.zhengjie.modules.thirdparty.v1;

+ 2 - 0
eladmin-system/src/main/resources/config/application-dev.yml

@@ -121,3 +121,5 @@ file:
   # 文件大小 /M
   maxSize: 100
   avatarMaxSize: 5
+
+

+ 9 - 2
eladmin-system/src/main/resources/config/application.yml

@@ -25,14 +25,16 @@ spring:
   redis:
     #数据库索引
     database: ${REDIS_DB:2}
+#    host: ${REDIS_HOST:172.16.159.48}
+#    port: ${REDIS_PORT:6381}
     host: ${REDIS_HOST:172.16.159.48}
     port: ${REDIS_PORT:6381}
 #    host: ${REDIS_HOST:127.0.0.1}
 #    port: ${REDIS_PORT:6379}
     password: ${REDIS_PWD:}
     #连接超时时间
-#    timeout: 5000ms
-    timeout: 10000ms
+    timeout: 5000ms
+#    timeout: 10000ms
 
 #  activiti:
 #    #设置成true以后,会在项目启动的时候自动创建Activiti表结构,首次数据表建好后建议改成false
@@ -44,6 +46,11 @@ spring:
 #    #修改默认的流程文件存储位置
 #    process-definition-location-prefix: classpath:/process/
 
+thread:
+  corePoolSize: 50
+  maxPoolSize: 200
+  queueCapacity: 1000
+  keepAliveSeconds: 300
 
 task:
   pool: