zss
2023-09-20 18648905bd0fd3b0dd1cf39a88ff90ec77dc5e30
修改   9.20
已添加3个文件
已修改9个文件
348 ■■■■■ 文件已修改
framework/src/main/java/com/yuanchu/mom/utils/JsonUtil.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/Task/DataPullTask.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/Task/SyncOrder.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/Sale.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/SaleMaterial.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/SaleDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/SaleMaterialDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/JsonUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.yuanchu.mom.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.text.SimpleDateFormat;
/**
 * @Author å¼ å®¾
 */
public class JsonUtil {
    private static ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    static {
        JSON_MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        JSON_MAPPER.registerModule(new JavaTimeModule());
    }
    /**
     * json转换对应实体
     * @param json
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T jsonToPojo(String json, Class<T> clazz){
        T t=null;
        try {
            t=JSON_MAPPER.readValue(json,clazz);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return t;
    }
    /**
     * å®žä½“转换成json字符
     * @param t
     * @param <T>
     * @return
     */
    public static <T> String jsonToString(T t){
        String result=null;
        try {
            result=JSON_MAPPER.writeValueAsString(t);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return result;
    }
}
inventory-server/src/main/java/com/yuanchu/mom/Task/DataPullTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.yuanchu.mom.Task;
import cn.hutool.core.date.DateUtil;
import com.yuanchu.mom.pojo.Sale;
import com.yuanchu.mom.pojo.SaleMaterial;
import com.yuanchu.mom.service.SaleMaterialService;
import com.yuanchu.mom.service.SaleService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
public class DataPullTask {
    @Resource
    SaleService saleService;
    @Resource
    SaleMaterialService saleMaterialService;
    @Scheduled(cron = "0 0 4 * * ?") // æ¯å¤©å‡Œæ™¨4点触发
    public void pullDataFromOtherSystem() {
        //获取主销售数据
        List<Map<String, Object>> order = SyncOrder.getMainOrder("2023-08-01 10:00:00 ");
        List<Sale> list = order.stream().map(orde -> {
            Sale sale = new Sale();
            sale.setOrderNumber(orde.get("orderNo").toString());//订单编号
            sale.setCode(String.valueOf(orde.get("customerContractNumber")));//客户合同编号
            sale.setName(orde.get("projectName").toString());//工程名称
            sale.setProname(orde.get("customerName").toString());//客户名称
            sale.setOrderName(orde.get("createdName").toString());//下单人
            sale.setSaleman(orde.get("salesmanName").toString());//业务员
            sale.setDelTime(DateUtil.parseDate(orde.get("wantedDeliveryDate").toString()));//交货日期
            sale.setCreateTime(DateUtil.parseDate(orde.get("orderDate").toString()));//下单日期
            sale.setNote(String.valueOf(orde.get("comment")));//备注
            return sale;
        }).collect(Collectors.toList());
        saleService.saveBatch(list);
        for (Sale sale : list) {
            List<Map<String, Object>> innerOrder = SyncOrder.getInnerOrder("2023-08-01 10:00:00", sale.getOrderNumber());
            List<SaleMaterial> saleMaterials = innerOrder.stream().map(inorder -> {
                SaleMaterial saleMaterial = new SaleMaterial();
                saleMaterial.setName(inorder.get("productName").toString()); //产品名称
                saleMaterial.setSpecifications(inorder.get("specificationModel").toString()); //产品规格型号
                saleMaterial.setUnit(inorder.get("unit").toString());   //单位
                saleMaterial.setNumber((int) Double.parseDouble(inorder.get("quantity").toString()));  //数量
                saleMaterial.setPrice(inorder.get("unitPriceInclTax").toString());  //单价
                saleMaterial.setSaleId(sale.getId());  //关联 é”€å”®å•id
                saleMaterial.setAdress(String.valueOf(inorder.get("shippingAddress")));  //收货地址
                saleMaterial.setUsername(String.valueOf(inorder.get("receivingContact")));  //联系人
                saleMaterial.setPhone(String.valueOf(inorder.get("receivingContactPhone")));  //手机号
                return saleMaterial;
            }).collect(Collectors.toList());
            saleMaterialService.saveBatch(saleMaterials);
        }
    }
}
inventory-server/src/main/java/com/yuanchu/mom/Task/SyncOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.yuanchu.mom.Task;
import cn.hutool.http.HttpRequest;
import com.yuanchu.mom.utils.JsonUtil;
import com.yuanchu.mom.vo.Result;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * @Author å¼ å®¾
 * @Date 2023/9/19
 */
public class SyncOrder {
    private static final String TOKEN_URL="http://192.168.18.16:9999/auth/oauth/token";
    private static final String GET_ORDER_MAIN_URL="http://192.168.18.16:9999/order/otcService/getOrderInfoForHyxtMes";
    private static final String GET_ORDER_INNER_URL="http://192.168.18.16:9999/order/otcService/getOrderLineForHyxtMes";
    private static final Map<String, String> GET_TOKEN_HEADER=new HashMap<>(2);
    private static final Map<String, Object>USER_INFO=new HashMap<>(4);
    static {
        GET_TOKEN_HEADER.put("Authorization","Basic cGlnOnBpZw==");
        GET_TOKEN_HEADER.put("Content-Type","application/x-www-form-urlencoded");
        USER_INFO.put("username","external_interface_hyxt_mes");
        USER_INFO.put("password","uCc+u3iP83WhO2dAU+5HUkCgfINnKfrHXMT/lwI/1f0=");
        USER_INFO.put("scope","server");
        USER_INFO.put("grant_type","password");
    }
    private static String getToken(){
        String body = HttpRequest.post(TOKEN_URL)
                .headerMap(GET_TOKEN_HEADER, true)
                .form(USER_INFO)//表单内容
                .timeout(20000)//超时,毫秒
                .execute().body();
        return String.valueOf(JsonUtil.jsonToPojo(body, Map.class).get("access_token"));
    }
    public static List<Map<String, Object>> getMainOrder(String time){
        Map<String,Object> orderCondition = new HashMap<String,Object>();
        orderCondition.put("selectTime", time);
        String result = HttpRequest.get(GET_ORDER_MAIN_URL)
                .header("Authorization", "Bearer " + getToken())
                .form(orderCondition)
                .execute().body();
        List<Map<String, Object>>list = JsonUtil.jsonToPojo(JsonUtil.jsonToString(JsonUtil.jsonToPojo(result,Result.class).getData()),List.class);
        return list.stream().filter(l-> Objects.equals(l.get("status"),"已下达")).collect(Collectors.toList());
    }
    public static List<Map<String, Object>> getInnerOrder(String time,String orderNo){
        Map<String,Object> orderCondition = new HashMap<String,Object>();
        orderCondition.put("selectTime", time);
        orderCondition.put("orderNo",orderNo);
        String result = HttpRequest.get(GET_ORDER_INNER_URL)
                .header("Authorization", "Bearer " + getToken())
                .form(orderCondition)
                .execute().body();
        List<Map<String, Object>>list = JsonUtil.jsonToPojo(JsonUtil.jsonToString(JsonUtil.jsonToPojo(result,Result.class).getData()),List.class);
        return list;
    }
}
inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java
@@ -133,5 +133,10 @@
        return Result.success("审核成功");
    }
    @ApiOperation(value = "同步")
    @PostMapping("/synchronization")
    public Result synchronization(){
        return Result.success(saleService.synchronization());
    }
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/Sale.java
@@ -44,15 +44,6 @@
    @ApiModelProperty(value = "客户名称")
    private String proname;
    @ApiModelProperty(value = "收货地址")
    private String adress;
    @ApiModelProperty(value = "联系人")
    private String username;
    @ApiModelProperty(value = "联系电话")
    private String phone;
    @ApiModelProperty(value = "下单人")
    private String orderName;
inventory-server/src/main/java/com/yuanchu/mom/pojo/SaleMaterial.java
@@ -48,6 +48,15 @@
    @ApiModelProperty(value = "单价")
    private String price;
    @ApiModelProperty(value = "收货地址")
    private String adress;
    @ApiModelProperty(value = "联系人")
    private String username;
    @ApiModelProperty(value = "联系电话")
    private String phone;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/SaleDto.java
@@ -36,21 +36,6 @@
    @JsonSerialize
    private String proname;
    //收货地址
    @NotBlank(message = "收货地址不能为空")
    @JsonSerialize
    private String adress;
    //联系人
    @NotBlank(message = "联系人不能为空")
    @JsonSerialize
    private String username;
    //联系电话
    @NotBlank(message = "联系电话不能为空")
    @JsonSerialize
    private String phone;
    //下单人
    @JsonSerialize
    @NotBlank(message = "下单人不能为空")
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/SaleMaterialDto.java
@@ -32,7 +32,7 @@
    private String unit;
    //数量
    @NotBlank(message = "数量不能为空")
    @NotNull(message = "数量不能为空")
    @JsonSerialize
    private Integer number;
@@ -40,4 +40,19 @@
    @NotBlank(message = "单价不能为空")
    @JsonSerialize
    private String price;
    //收货地址
    @NotBlank(message = "收货地址不能为空")
    @JsonSerialize
    private String adress;
    //联系人
    @NotBlank(message = "联系人不能为空")
    @JsonSerialize
    private String username;
    //联系电话
    @NotBlank(message = "联系电话不能为空")
    @JsonSerialize
    private String phone;
}
inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java
@@ -77,4 +77,10 @@
     * @return
     */
    ConsignmentDto1 selSale(String orderNumber);
    /**
     * åŒæ­¥è®¢å•
     * @return
     */
    String synchronization();
}
inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
@@ -1,8 +1,10 @@
package com.yuanchu.mom.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.Task.SyncOrder;
import com.yuanchu.mom.mapper.SaleMaterialMapper;
import com.yuanchu.mom.pojo.Sale;
import com.yuanchu.mom.mapper.SaleMapper;
@@ -12,6 +14,7 @@
import com.yuanchu.mom.pojo.dto.SaleDto;
import com.yuanchu.mom.pojo.dto.SaleMaterialDto;
import com.yuanchu.mom.pojo.vo.SaleVo;
import com.yuanchu.mom.service.SaleMaterialService;
import com.yuanchu.mom.service.SaleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.vo.Result;
@@ -36,6 +39,9 @@
    @Resource
    SaleMapper saleMapper;
    @Resource
    SaleMaterialService saleMaterialService;
    @Resource
    SaleMaterialMapper saleMaterialMapper;
@@ -113,7 +119,7 @@
        List<SaleMaterialDto> saleMaterialList = saleVo.getSaleMaterialList();
        // ä½¿ç”¨å“ˆå¸Œé›†åˆæ¥åˆ¤æ–­æ˜¯å¦å­˜åœ¨ç›¸åŒå­—段值组合
        Set<String> seen = new HashSet<>();
        for (SaleMaterialDto saleMaterial: saleMaterialList) {
        for (SaleMaterialDto saleMaterial : saleMaterialList) {
            String key = saleMaterial.getName() + "," + saleMaterial.getSpecifications();
            if (seen.contains(key)) {
                return "同一个产品的规格型号不能相同";
@@ -176,11 +182,51 @@
                .orderCode(orderNumber)
                .customerCode(sale.getCode())
                .proname(sale.getProname())
                .adress(sale.getAdress())
                .username(sale.getUsername())
                .phone(sale.getPhone())
                //.adress(sale.getAdress())
                //.username(sale.getUsername())
                //.phone(sale.getPhone())
                .messages(dto2List)
                .build();
        return consignmentDto1;
    }
    //同步销售数据
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String synchronization() {
        //获取主销售数据
        List<Map<String, Object>> order = SyncOrder.getMainOrder("2023-08-01 10:00:00 ");
        List<Sale> list = order.stream().map(orde -> {
            Sale sale = new Sale();
            sale.setOrderNumber(orde.get("orderNo").toString());//订单编号
            sale.setCode(String.valueOf(orde.get("customerContractNumber")));//客户合同编号
            sale.setName(orde.get("projectName").toString());//工程名称
            sale.setProname(orde.get("customerName").toString());//客户名称
            sale.setOrderName(orde.get("createdName").toString());//下单人
            sale.setSaleman(orde.get("salesmanName").toString());//业务员
            sale.setDelTime(DateUtil.parseDate(orde.get("wantedDeliveryDate").toString()));//交货日期
            sale.setCreateTime(DateUtil.parseDate(orde.get("orderDate").toString()));//下单日期
            sale.setNote(String.valueOf(orde.get("comment")));//备注
            return sale;
        }).collect(Collectors.toList());
        this.saveBatch(list);
        for (Sale sale : list) {
            List<Map<String, Object>> innerOrder = SyncOrder.getInnerOrder("2023-08-01 10:00:00", sale.getOrderNumber());
            List<SaleMaterial> saleMaterials = innerOrder.stream().map(inorder -> {
                SaleMaterial saleMaterial = new SaleMaterial();
                saleMaterial.setName(inorder.get("productName").toString()); //产品名称
                saleMaterial.setSpecifications(inorder.get("specificationModel").toString()); //产品规格型号
                saleMaterial.setUnit(inorder.get("unit").toString());   //单位
                saleMaterial.setNumber((int) Double.parseDouble(inorder.get("quantity").toString()));  //数量
                saleMaterial.setPrice(inorder.get("unitPriceInclTax").toString());  //单价
                saleMaterial.setSaleId(sale.getId());  //关联 é”€å”®å•id
                saleMaterial.setAdress(String.valueOf(inorder.get("shippingAddress")));  //收货地址
                saleMaterial.setUsername(String.valueOf(inorder.get("receivingContact")));  //联系人
                saleMaterial.setPhone(String.valueOf(inorder.get("receivingContactPhone")));  //手机号
                return saleMaterial;
            }).collect(Collectors.toList());
            saleMaterialService.saveBatch(saleMaterials);
        }
        return "同步成功!";
    }
}
system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
@@ -4,9 +4,11 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@MapperScan("com.yuanchu.mom.mapper")// æ‰«æMybatis中的mapper包
@EnableScheduling
public class SystemRunApplication {
    public static void main(String[] args) {
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -1,13 +1,56 @@
package com.yuanchu.mom;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.yuanchu.mom.Task.SyncOrder;
import com.yuanchu.mom.pojo.Sale;
import com.yuanchu.mom.pojo.SaleMaterial;
import com.yuanchu.mom.vo.Result;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@SpringBootTest
class SystemRunApplicationTest {
    @Test
    void contextLoads() {
        List<Map<String, Object>> order = SyncOrder.getMainOrder("2023-08-01 10:00:00 ");
        List<Sale> list = order.stream().map(orde -> {
            Sale sale = new Sale();
            sale.setOrderNumber(orde.get("orderNo").toString());//订单编号
            sale.setCode(String.valueOf(orde.get("customerContractNumber")));//客户合同编号
            sale.setName(orde.get("projectName").toString());//工程名称
            sale.setProname(orde.get("customerName").toString());//客户名称
            sale.setOrderName(orde.get("createdName").toString());//下单人
            sale.setSaleman(orde.get("salesmanName").toString());//业务员
            sale.setDelTime(DateUtil.parseDate(orde.get("wantedDeliveryDate").toString()));//交货日期
            sale.setCreateTime(DateUtil.parseDate(orde.get("orderDate").toString()));//下单日期
            sale.setNote(String.valueOf(orde.get("comment")));//备注
            return sale;
        }).collect(Collectors.toList());
        //System.out.println(list);
        for (Sale sale : list) {
            List<Map<String, Object>> innerOrder = SyncOrder.getInnerOrder("2023-08-01 10:00:00", sale.getOrderNumber());
            List<SaleMaterial> saleMaterials = innerOrder.stream().map(inorder -> {
                SaleMaterial saleMaterial = new SaleMaterial();
                saleMaterial.setName(inorder.get("productName").toString()); //产品名称
                saleMaterial.setSpecifications(inorder.get("specificationModel").toString()); //产品规格型号
                saleMaterial.setUnit(inorder.get("unit").toString());   //单位
                saleMaterial.setNumber((int)Double.parseDouble(inorder.get("quantity").toString()));  //数量
                saleMaterial.setPrice(inorder.get("unitPriceInclTax").toString());  //单价
                saleMaterial.setSaleId(sale.getId());  //关联 é”€å”®å•id
                saleMaterial.setAdress(String.valueOf(inorder.get("shippingAddress")));  //收货地址
                saleMaterial.setUsername(String.valueOf(inorder.get("receivingContact")));  //联系人
                saleMaterial.setPhone(String.valueOf(inorder.get("receivingContactPhone")));  //手机号
                return saleMaterial;
            }).collect(Collectors.toList());
            System.out.println(saleMaterials);
        }
    }
}