SnPartApiService.java 9.21 KB
package com.huaheng.pc.config.sn.service;

import javax.annotation.Resource;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.huaheng.common.utils.DateUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResultLisenes;
import com.huaheng.pc.config.sn.domain.*;
import com.huaheng.pc.config.supplier.service.SupplierSyncService;
import com.huaheng.pc.config.syncTime.domain.SyncTime;
import com.huaheng.pc.config.syncTime.service.SyncTimeService;
import com.huaheng.pc.draw.domain.Draw;
import com.huaheng.pc.srm.domain.SrmDetail;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.OkHttpUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.address.domain.Address;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.sn.mapper.SnPartDetailMapper;
import org.springframework.transaction.annotation.Transactional;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;


@Service
public class SnPartApiService   {
    @Resource
    private SnService snService;
    @Resource
    private SnPartDetailService snPartDetailService;
    @Resource
    private AddressService addressService;
    @Resource
    private SyncTimeService syncTimeService;
    @Resource
    private SupplierSyncService supplierSyncService;
    @Resource
    private TaskDetailService taskDetailService;


    /**
     * 从授权服务器获取sn
     * @return
     */
    public AjaxResult getSnByLicenes(){
        String syncName="sn";
        SyncTime syncTime=supplierSyncService.getTimeByName(syncName);
        Date syncTimes=syncTime.getSyncTimes();
        Date date=new Date();
        // 将Date转换为Instant
        Instant instant = syncTimes.toInstant();
        // 将Instant往前推移10分钟
        Instant newInstant = instant.minus(5, ChronoUnit.MINUTES);
        // 将新的Instant转换回Date
        Date newDate = Date.from(newInstant);
        String newDatestr=DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",newDate);
        //*****************
        getSnLicenes(null,newDatestr);
        syncTimeService.updateStatus(syncName,1,date);
        return AjaxResult.success();
    }

    /**
     * 发送iot
     * @return
     */
    public AjaxResult snToIot(){
        List<Sn> snList=snService.getSnToLot();
        //********************
        snPartToIot(snList);
//        for (Sn sn:snList){
//            snPartToIot(sn);
//        }
        return AjaxResult.success();
    }


    /**
     * 从授权服务器获取sn
     * @return
     */
    @Transactional
    public AjaxResult getSnLicenes(String snCode,String startTime){
        Address address=addressService.selectAddressByParam("SHOUQUAN",QuantityConstant.WAREHOUSE_CS);
        String url=address.getUrl();
        SnLicenesRequst snRequst=new SnLicenesRequst();
        if(StringUtils.isNotEmpty(snCode)){
            snRequst.setSn(snCode);
        }
        if(StringUtils.isNotEmpty(startTime)){
            snRequst.setStartTime(startTime);
        }
        String jsonString = JSONObject.toJSONString(snRequst);
        //请求授权服务器获取sn
        String result= OkHttpUtils.bodypost(url,jsonString, QuantityConstant.WAREHOUSE_CS,"从授权服务器获取sn");
        if (StringUtils.isEmpty(result)) {
            return AjaxResult.error("接口地址错误或服务器连接不到或返回为空");
        }
        JSONObject obj = JSONObject.parseObject(result);

        String code=obj.getString("code");
        if(StringUtils.isNotEmpty(code)&&!code.equals("200")){
            return AjaxResult.error(obj.getString("msg"));
        }
        List<SnLicenesResponse> snLicenesResponses = JSONArray.parseArray(obj.getString("result"), SnLicenesResponse.class);

        List<Sn> list=new ArrayList<>();
        //保存sn号
        System.out.println(snLicenesResponses.getClass());
        for (SnLicenesResponse snLicenesResponse:snLicenesResponses) {
            if(snLicenesResponse.getSn()==null){
                continue;
            }
            Sn sn1=snService.getSn(snLicenesResponse.getSn());
            if(sn1!=null){
                continue;
            }
            Sn sn2=new Sn();
            sn2.setCode(snLicenesResponse.getSn());
            sn2.setCorrelatedCode(snLicenesResponse.getCorrelatedCode());
            sn2.setCreatedBy(snLicenesResponse.getUser());
            sn2.setLastUpdatedBy(snLicenesResponse.getUser());
            sn2.setSource("授权系统");
            list.add(sn2);
        }
        snService.saveBatch(list);
        return AjaxResult.success();
    }
    /**
     * sn部件传递到iot
     * @return
     */
    @Transactional
    public AjaxResult snPartToIot(List<Sn> sns){
        SnIotResqust snIotResqust=new SnIotResqust();
        snIotResqust.setTypes("I");
        List<SnIOTResponse> snLicenesResponses=new ArrayList<>();
        List<Sn> snList=new ArrayList<>();
        for (Sn sn:sns){
            if(StringUtils.isEmpty(sn.getMocode())){
                continue;
            }
            List<SnPartDetail> snPartDetails=snPartDetailService.getSnPartByCode(sn.getCode());
            if(snPartDetails.size()<=0){
//                continue;
            }
            List<PartIOTDomain> parts=new ArrayList<>();
            for (SnPartDetail snPartDetail:snPartDetails){
                PartIOTDomain partIOTDomain=new PartIOTDomain();
                partIOTDomain.setPartCode(snPartDetail.getPart());
                parts.add(partIOTDomain);
            }
            SnIOTResponse snLicenesResponse=new SnIOTResponse();
            snLicenesResponse.setSn(sn.getCode());
            snLicenesResponse.setUser(sn.getCreatedBy());
//            snLicenesResponse.setCorrelatedCode(sn.getCorrelatedCode());
            snLicenesResponse.setCorrelatedCode(sn.getMocode());
            snLicenesResponse.setComponents(parts);
            snLicenesResponses.add(snLicenesResponse);
            snList.add(sn);
        }
        if(snLicenesResponses.size()<=0){
            return AjaxResult.success();
        }
        snIotResqust.setResult(snLicenesResponses);
        String jsonString = JSONObject.toJSONString(snIotResqust);
        Address address=addressService.selectAddressByParam("IOT",QuantityConstant.WAREHOUSE_CS);
        String url=address.getUrl();
        //请求授权服务器获取sn
        String result1= OkHttpUtils.bodypost(url,jsonString, QuantityConstant.WAREHOUSE_CS,"传递SN给IOT");
        if (StringUtils.isEmpty(result1)) {
            return AjaxResult.error("接口地址错误或服务器连接不到或返回为空");
        }
        //得到string 类型json
        result1=result1.substring(1,result1.length()-1);
        result1=result1.replaceAll("\\\\", "");
        AjaxResultLisenes ajaxResult= JSON.parseObject(result1, AjaxResultLisenes.class);
        if(ajaxResult.hasErr()){
            return AjaxResult.error(ajaxResult.getMsg());
        }
        for (Sn sn:snList){
            sn.setSyncIot(2);
            snService.updateById(sn);
        }
        return AjaxResult.success();
    }


    /**
     * 查找出库任务含有sn号的,添加到sn表
     * @return
     */
    public AjaxResult shipmentTaskCompleteSn(){
        LambdaQueryWrapper<TaskDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(TaskDetail::getInternalTaskType,QuantityConstant.TASK_INTENERTYPE_SHIPMENT);
        lambdaQueryWrapper.eq(TaskDetail::getHaveSn, 1);
        lambdaQueryWrapper.eq(TaskDetail::getStatus,QuantityConstant.TASK_STATUS_COMPLETED);
        String startTime= DateUtils.getNowPreDays("yyyy-MM-dd", 2);
        lambdaQueryWrapper.ge(TaskDetail::getCreated,startTime);
        List<TaskDetail> taskDetails = taskDetailService.list(lambdaQueryWrapper);
        for (TaskDetail taskDetail:taskDetails){
            Sn sn=snService.getSn(taskDetail.getSn());
            Sn sn1=new Sn();
            if(sn!=null){
                sn1.setId(sn.getId());
                if(StringUtils.isNotEmpty(taskDetail.getMoCode())){
                    sn1.setMocode(taskDetail.getMoCode());
                }
                sn1.setCreated(taskDetail.getCreated());
            }else{
                sn1.setCode(taskDetail.getSn());
                sn1.setSource("出库任务");
                sn1.setMocode(taskDetail.getMoCode());
                sn1.setCreated(taskDetail.getCreated());
                sn1.setSyncIot(1);
            }
            if(snService.saveOrUpdate(sn1)){
                TaskDetail taskDetail1=new TaskDetail();
                taskDetail1.setId(taskDetail.getId());
                taskDetail1.setHaveSn(2);
                taskDetailService.updateById(taskDetail1);
            }
        }
        return AjaxResult.success();

    }
}