一线通项目--功能函数

1获取字典值方法

(1)声明sysDictFeign类调用getDictsByGroupCode方法得到map对象作为函数输入。groupCode为字典项编码

public Map<String, String> getDictMap(Map<String, List<SysGlobalDictItemDTO>> map, String groupCode) {
        Map<String, String> resultMap = new HashMap<>();
        map.get(groupCode).forEach(item -> {
            resultMap.put(item.getItemValue(), item.getItemName());
        });
        return resultMap;

2日期格式

private String getDate(Instant time) {
        if(time == null) {
            return null;
        }
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return format.format(Date.from(time));
    }

3获取地址组件值
1、将数据库中存放的值分割
2、声明sysRegionFeign接口调用regionMap()方法取值。依次对应省/市/区

public String getRegionName(String regionCode) {
        if(StringUtils.isEmpty(regionCode)) {
            return "";
        }
        String[] codeArr = regionCode.split(",");
        StringBuilder regionName = new StringBuilder();
        Map<String, String> map = sysRegionFeign.regionMap();
        if(CollectionUtils.isEmpty(map)) {
            return "";
        }
        for(String code : codeArr) {
            if(StringUtils.isEmpty(code)) {
                continue;
            }
            regionName.append(map.get(code)).append("/");
        }
        String name = regionName.toString();
        return name.substring(0, name.length()-1);

4获取日志
1、在字段值添加注释

@LogTag(alias = "车辆类型(成车、底盘)",builtinType = BuiltinTypeHandler.DICT, dictGroupCode = "carCategory")
public List<Map<String, Object>> getLog(Long id){
        OperationForm operationForm = new OperationForm();
        operationForm.setObjectId(String.valueOf(id));
        Map<String, Object> map = logClient.queryLog(operationForm);
        List<Map<String,Object>> list = (List<Map<String, Object>>) map.get("respData");
        return list;
    }
 		if (update){
            logClient.logObject(
                    String.valueOf(oldgasStationInfoBo.getId()),
                    SecurityContextUtil.getCurrentUserName(),
                    "update",
                    "Update a gasStationInfoBo",
                    null,
                    null,
                    oldgasStationInfoBo,
                    gasStationInfoBo);
        }

5生成账号

    //生成加油站账号
    private SysUserDTO saveGasAccount(GasStationInfoBo gasStationInfoBo) {
        SysEmployeeDTO sysGasUserDTO = new SysEmployeeDTO();
        sysGasUserDTO.setUserInfoId(String.valueOf(gasStationInfoBo.getId()));
        sysGasUserDTO.setDealerCode(gasStationInfoBo.getGasStationCode());
        sysGasUserDTO.setUserInfoName(gasStationInfoBo.getGasStationName());
        sysGasUserDTO.setEmployeeNo(gasStationInfoBo.getGasStationCode());
        sysGasUserDTO.setIsOnjob(1);
        sysGasUserDTO.setGender(1);
        sysGasUserDTO.setTenantId(SecurityContextUtil.getCurrentTenantId());
        return  externalInterfaceFeign.addSysEmployee(sysGasUserDTO);
    }

6字符串转对象列表

    List<AuthorizedLiftYearDTO> dtos = JSONObject.parseArray(authorizedLiftYearDTO, AuthorizedLiftYearDTO.class);

7导入数据

   String intekeyUrl = NacosGlobalConfiguration.getByKey("intekey-url");
   String appCode = NacosGlobalConfiguration.getByKey("intekey-appCode");
   String secretKey = NacosGlobalConfiguration.getByKey("intekey-secretKey");
   InputStream inputStream = IntekeyUtils.DecryptFile(intekeyUrl, appCode, secretKey, file);
   List<RefitParamTypeDTO> importList = easyExcel.importExcel(inputStream, 0, 1, false, RefitParamTypeDTO.class);

8查询附件

 public Map<String, List<FileUploadInfoDto>> queryAttachment(Long id) {
        List<FileUploadInfoDto> fileUploadInfoDtoList = fileCommonFeign.getFileListByBillId(String.valueOf(id), null);
        if (fileUploadInfoDtoList != null && fileUploadInfoDtoList.size() > 0) {
            return fileUploadInfoDtoList.stream().collect(Collectors.groupingBy(FileUploadInfoDto::getBillType));
        } else {
            return null;
        }
    }

9日志

  //通用查询日志方法
    public Map<String, Object> queryShippingLog(Long shippingId, String objectName, String operationName, String operationAlias) {
        OperationForm operationForm = new OperationForm();
        if (StringUtils.isNotBlank(objectName)) {
            operationForm.setObjectName(objectName);
        }
        if (StringUtils.isNotBlank(operationName)) {
            operationForm.setOperationAlias(operationName);
        }
        if (StringUtils.isNotBlank(operationAlias)) {
            operationForm.setOperationAlias(operationAlias);
        }
        operationForm.setObjectId(String.valueOf(shippingId));
        Map<String, Object> map = logClient.queryLog(operationForm);
        if (map == null) {
            map = new HashMap<>();
        }
        return map;
    }

    //通用添加日志方法
    public void addShippingLog(String operationName, String operationAlias, String extraWords, String comment,
                               LoShippingBO oldLoShippingBO, LoShippingBO newLoShippingBO) {
        log.info("----------添加日志------------");
        //如果没有传objectName,默认取变更对象的类名
        //如果变更的字段是字典类型,那么旧值与新值不能一个有值,一个为null
        //如果变更的字段不是字典类型,旧值或新值没有限制
        logClient.logObject(
                oldLoShippingBO.getId().toString(),
                SecurityContextUtil.getCurrentUserName(),
                operationName,
                operationAlias,
                extraWords,
                comment,
                oldLoShippingBO,
                newLoShippingBO);
    }

    //通用添加没有属性变化的日志方法
    public void addNoAttributeChangeShippingLog(String objectName, Long businessId, String operationName,
                                                String operationAlias, String extraWords, String comment) {
        log.info("-------添加没有属性变化的日志------");
        //记录没有属性变化的日志
        logClient.logAttributes(
                objectName,
                businessId.toString(),
                SecurityContextUtil.getCurrentUser().getUsername(),
                operationName,
                operationAlias,
                extraWords,
                comment,
                null);

    }

10、**/对BigDecimal类型求和 BigDecimal **

allSinglePrice = shippingList.stream().map(item -> {
 if(item.getSinglePrice() == null)
  { return new BigDecimal("0"); }
  else{
   return item.getSinglePrice();
   }
  }).reduce(BigDecimal.ZERO, BigDecimal::add); 

11Excel模板下载

 public void downLoad(HttpServletResponse response) {
        String fileName = null;
        try {
            fileName = URLEncoder.encode("改装产品导入.xlsx", "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setHeader("Content-Disposition", "attachment; filename* = UTF-8''" + fileName);

        byte[] buffs = new byte[1024];
        try (InputStream in = ResourceUtil.asStream("templates/refitProductTemplate.xlsx");
             BufferedInputStream bis = new BufferedInputStream(in);
             OutputStream os = response.getOutputStream()) {
            int i = bis.read(buffs);
            while (i != -1) {
                os.write(buffs, 0, i);
                i = bis.read(buffs);
            }
            os.flush();
        } catch (IOException e) {
            log.error("改装产品导入模板下载:", e);
        }
    }

12Excel导入

public String importProduct(MultipartFile file){
        String intekeyUrl = NacosGlobalConfiguration.getByKey("intekey-url");
        String appCode = NacosGlobalConfiguration.getByKey("intekey-appCode");
        String secretKey = NacosGlobalConfiguration.getByKey("intekey-secretKey");

        InputStream inputStream = IntekeyUtils.DecryptFile(intekeyUrl, appCode, secretKey, file);

        try {
            List<RefitProductDTO> importList = easyExcel.importExcel(inputStream, 0, 1, false, RefitProductDTO.class);
            importList.remove(importList.size()-1); //总会读取额外一行空行,因此删除
            if(CollectionUtils.isEmpty(importList)) {
                throw new BaseException(ErrorEnum.SYSTEM_ERROR,"导入信息为空或导入信息不符");
            }
            return applicationService.importProduct(RefitProductAssembler.toBOS(importList));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

13集合按照字段值生成Map

List<FiReceiptContractDTO> contractList = fiReceiptDto.getContractList();
Map<String, List<FiReceiptContractDTO>> map = contractList.stream().collect(Collectors.groupingBy(FiReceiptContractDTO::getContractCode));

14通过String的trim()方法只能去掉字符串两端的空格字符,但是对于\t \n等其它空白字符确不能去掉,因此需通过正则表达式,将其中匹配到的空白字符去掉

   protected String replaceBlank(String str){
        String dest = null;
        if(str == null){
            return dest;
        }else{
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
            return dest;
        }
    }

14许可证OCR识别

 @ApiOperation("许可证OCR识别")
    @PostMapping("/exportPermitOCR")
    public OutPermitDTO exportPermitOCR(MultipartFile file, HttpServletResponse response) throws IOException {
        try {
          HttpHeaders headers = new HttpHeaders();
           headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
           headers.setContentLength(file.getSize());
           ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
           String intekeyUrl = NacosGlobalConfiguration.getByKey("intekey-url");
           String appCode = NacosGlobalConfiguration.getByKey("intekey-appCode");
           String secretKey = NacosGlobalConfiguration.getByKey("intekey-secretKey");
           InputStream inputStream = IntekeyUtils.DecryptFile(intekeyUrl, appCode, secretKey, file);
           byte[] bytes = new byte[1024];
           int temp;
           while ((temp = inputStream.read(bytes)) != -1) {
               byteArrayOutputStream.write(bytes, 0, temp);
           }
           byte[] by = byteArrayOutputStream.toByteArray();
           HttpEntity<byte[]> httpEntity = new HttpEntity<>(by, headers);
           ResponseEntity<String> data = restTemplate.postForEntity(baseOcrUrl, httpEntity, String.class);
           JSONObject weChatResult = JSONObject.parseObject(data.getBody());

           JSONObject details = weChatResult.getJSONObject("result").getJSONObject("details");

           OutPermitDTO outPermitDTO = new OutPermitDTO();
           //出口许可证号 export_licence_no
           outPermitDTO.setExitPermitNo(details.getJSONObject("export_licence_no").getString("value"));
           //出口许可证有效截至日期  export_licence_expiry_date
           String export_licence_expiry_date = details.getJSONObject("export_licence_expiry_date").getString("value");
           String replacedString = export_licence_expiry_date.replace("年", "-").replace("月", "-").replace("日", "");
           DateTime datetime = DateUtil.parse(replacedString);
           outPermitDTO.setPermitEffectiveDate(datetime.toInstant());
           //进口国
           outPermitDTO.setImportingCountry(details.getJSONObject("country/region_of_purchase").getString("value"));
           //合同号.
           outPermitDTO.setContractCode(details.getJSONObject("contract_no").getString("value"));
           //运输方式.
           outPermitDTO.setTransportType(details.getJSONObject("mode_of_transport").getString("value"));
           //商品编码.
           outPermitDTO.setCommodityCode(details.getJSONObject("code_of_goods").getString("value"));
           //备注.
           outPermitDTO.setRemark(details.getJSONObject("supplementary_details").getString("value"));
           //
           JSONArray jsonArray = details.getJSONArray("table_list");
           List<OutPermitDetailDTO> outPermitDetailDTOS = new ArrayList<>();
           for (int i = 0; i < jsonArray.size(); i++) {
               OutPermitDetailDTO outPermitDetailDTO = new OutPermitDetailDTO();
               JSONObject j = jsonArray.getJSONObject(i);
               outPermitDetailDTO.setQuantity(j.getJSONObject("quantity").getIntValue("value"));
               outPermitDetailDTO.setSpecification(j.getJSONObject("specification").getString("value"));
               outPermitDetailDTOS.add(outPermitDetailDTO);
           }
           outPermitDTO.setPermitDetailList(outPermitDetailDTOS);
           return  outPermitDTO;
        }catch (Exception e){
            throw new BaseException(ErrorEnum.SYSTEM_ERROR, "许可证OCR识别失败!");
        }

    }

14动态Excel表头、列值不统一导出

  public  void dynamicExportExcel(@RequestParam("id") Long id,HttpServletResponse response) {
        long startTime = System.currentTimeMillis();
        try (ServletOutputStream outputStream = response.getOutputStream()) {
            LoCarriageSettlementBo bo = domainService.get(id);
            List<LoDeliverySettlementBo> loDeliverySettlementBos = bo.getDeliveryList();
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            String fileName = URLEncoder.encode("测试." + ExcelTypeEnum.XLSX.getValue(), "UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename="+fileName);
//            response.setCharacterEncoding("UTF-8");
//            response.setHeader("content-Type", "application/vnd.ms-excel");
//            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("测试." + ExcelTypeEnum.XLSX.getValue(), "UTF-8"));
            List<List<Object>> dataList = ListUtils.newArrayList();
            for (int i = 0; i < loDeliverySettlementBos.size(); i++) {
                List<Object> data = ListUtils.newArrayList();
                data.add(i);//序号
                data.add(loDeliverySettlementBos.get(i).getShippingNo());//备车单号
                if(loDeliverySettlementBos.get(i).getDriveForm() != null){
                    SysGlobalDictItemDTO drivingForm = sysDictFeign.getDictByGroupCodeAndCode("drivingForm", loDeliverySettlementBos.get(i).getDriveForm());
                    data.add(drivingForm.getItemName());//驱动形式
                }else {
                    data.add("无");
                }

                if(loDeliverySettlementBos.get(i).getFuelType() != null){
                    SysGlobalDictItemDTO fuelType = sysDictFeign.getDictByGroupCodeAndCode("fuelType", loDeliverySettlementBos.get(i).getFuelType());
                    data.add(fuelType.getItemName()); //燃料种类
                }else {
                    data.add("无");
                }

                if(loDeliverySettlementBos.get(i).getFuelGrade() != null){
                    SysGlobalDictItemDTO fuelGrade = sysDictFeign.getDictByGroupCodeAndCode("fuleCode", loDeliverySettlementBos.get(i).getFuelGrade());
                    data.add(fuelGrade.getItemName()); //燃料标号
                }else {
                    data.add("无");
                }

                if(loDeliverySettlementBos.get(i).getVehicleType() != null){
                    SysGlobalDictItemDTO vehicleType = sysDictFeign.getDictByGroupCodeAndCode("vehicleOrChassis", loDeliverySettlementBos.get(i).getVehicleType());
                    data.add(vehicleType.getItemName()); //车辆分类
                }else {
                    data.add("无");
                }
                data.add(loDeliverySettlementBos.get(i).getTransportPrice());//单价
                data.add(loDeliverySettlementBos.get(i).getStartCity());//起点
                data.add(loDeliverySettlementBos.get(i).getEndCity());//终点
                data.add(loDeliverySettlementBos.get(i).getMileage());//里程

                String formatPattern = "yyyy-MM-dd";
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatPattern).withZone(ZoneId.systemDefault());
                String d = formatter.format(loDeliverySettlementBos.get(i).getDeliveryMakeTime());
                data.add(d);
                ExpenseItemBO expenseItemBO = new ExpenseItemBO();
                List<ExpenseItemBO> expenseItemBOS =  expenseItemDomainService.list(expenseItemBO);

                LoDeliverySettlementDetailBo loDeliverySettlementDetailBo = new LoDeliverySettlementDetailBo();
                loDeliverySettlementDetailBo.setDeliveryId(loDeliverySettlementBos.get(i).getDeliveryId());
                List<LoDeliverySettlementDetailBo> loDeliverySettlementDetailBos = loDeliverySettlementDetailDomainService.selectList(loDeliverySettlementDetailBo);


                List<Object> item = ListUtils.newArrayList(Arrays.asList(new Integer[expenseItemBOS.size()]));
                System.out.println(item.size());
                for(int j = 0; j < expenseItemBOS.size(); j++){
                    if(CollectionUtils.isEmpty(loDeliverySettlementDetailBos)){
                        item.set(j,0);
                    }else{
                        for(int k = 0; k < loDeliverySettlementDetailBos.size(); k++){
                            if(expenseItemBOS.get(j).getExpenseItemId().equals(loDeliverySettlementDetailBos.get(k).getExpenseItemId())){
                                item.set(j,loDeliverySettlementDetailBos.get(k).getPrice());
                                break ;
                            }
                            else {
                                item.set(j,0);
                            }
                        }
                    }
                }
                data.addAll(item);
                data.add(loDeliverySettlementBos.get(i).getSettlementPrice());//总价
                dataList.add(data);
            }
            com.alibaba.excel.EasyExcel.write(outputStream).head(head()).sheet("sheet").doWrite(dataList);
        } catch (IOException e) {
            log.error("生成动态EXL失败,字段", e);
        }
        long endTime = System.currentTimeMillis();
        log.info("动态导出耗时:{}", endTime - startTime);
    }
     public List<List<String>> head() {
        List<List<String>> list = ListUtils.newArrayList();
        List<String> head0 = ListUtils.newArrayList();
        head0.add("序号");
        List<String> head1 = ListUtils.newArrayList();
        head1.add("送车公司");
        List<String> heads = ListUtils.newArrayList();
        heads.add("结算单号");
        List<String> head2 = ListUtils.newArrayList();
        head2.add("部门");
        List<String> head3 = ListUtils.newArrayList();
        head3.add("备车单号");
        List<String> head4 = ListUtils.newArrayList();
        head4.add("车架号");
        List<String> head5 = ListUtils.newArrayList();
        head5.add("车型号");
        List<String> head6 = ListUtils.newArrayList();
        head6.add("驱动形式");
        List<String> head7 = ListUtils.newArrayList();
        head7.add("车辆分类");
        List<String> head8 = ListUtils.newArrayList();
        head8.add("燃料种类");
        List<String> head9 = ListUtils.newArrayList();
        head9.add("燃料标号");
        List<String> head10 = ListUtils.newArrayList();
        head10.add("单价");
        List<String> head11 = ListUtils.newArrayList();
        head11.add("方向机位置");
        List<String> head12 = ListUtils.newArrayList();
        head12.add("运费油价");
        List<String> head13 = ListUtils.newArrayList();
        head13.add("排放");
        List<String> head14 = ListUtils.newArrayList();
        head14.add("品系");
        List<String> head15 = ListUtils.newArrayList();
        head15.add("挂车轴");
        List<String> head16 = ListUtils.newArrayList();
        head16.add("长");
        List<String> head17 = ListUtils.newArrayList();
        head17.add("宽");
        List<String> head18 = ListUtils.newArrayList();
        head18.add("高");
        List<String> head19 = ListUtils.newArrayList();
        head19.add("重量");
        List<String> head20 = ListUtils.newArrayList();
        head20.add("起点");
        List<String> head21 = ListUtils.newArrayList();
        head21.add("终点");
        List<String> head22 = ListUtils.newArrayList();
        head22.add("里程");
        List<String> head23 = ListUtils.newArrayList();
        head23.add("制单时间");
        List<String> head24 = ListUtils.newArrayList();
        head24.add("限达时间");
        List<String> head25 = ListUtils.newArrayList();
        head25.add("扫码出库时间");
        List<String> head26 = ListUtils.newArrayList();
        head26.add("提车确认时间");
        List<String> head27 = ListUtils.newArrayList();
        head27.add("送达确认时间");
        List<String> head28 = ListUtils.newArrayList();
        head28.add("接车确认时间");

        list.add(head0);
        list.add(head1);
        list.add(heads);
        list.add(head2);
        list.add(head3);
        list.add(head4);
        list.add(head5);
        list.add(head6);
        list.add(head7);
        list.add(head8);
        list.add(head9);
        list.add(head10);
        list.add(head11);
        list.add(head12);
        list.add(head13);
        list.add(head14);
        list.add(head15);
        list.add(head16);
        list.add(head17);
        list.add(head18);
        list.add(head19);
        list.add(head20);
        list.add(head21);
        list.add(head22);
        list.add(head23);
        list.add(head24);
        list.add(head25);
        list.add(head26);
        list.add(head27);
        list.add(head28);

        ExpenseItemBO expenseItemBO = new ExpenseItemBO();
        List<ExpenseItemBO> expenseItemBOS = expenseItemDomainService.list(expenseItemBO);
        for (int i = 0; i < expenseItemBOS.size(); i++) {
            List<String> head = ListUtils.newArrayList();
            head.add(expenseItemBOS.get(i).getExpenseItemName());
            list.add(head);
        }
        List<String> headend0 = ListUtils.newArrayList();
        headend0.add("基础运费");
        List<String> headend1 = ListUtils.newArrayList();
        headend1.add("相关费用合计");
        List<String> headend2 = ListUtils.newArrayList();
        headend2.add("考核金额");
        List<String> headend3 = ListUtils.newArrayList();
        headend3.add("考核后金额");
        List<String> headend4 = ListUtils.newArrayList();
        headend4.add("制造单位");
        List<String> headend5 = ListUtils.newArrayList();
        headend5.add("结算时间");
        list.add(headend0);
        list.add(headend1);
        list.add(headend2);
        list.add(headend3);
        list.add(headend4);
        list.add(headend5);
        return list;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值