Commit 60d82bad by HlQ

[chg] 使用 LocalDateTime 替换 Date

1 parent 6b3ca06f
Showing 181 changed files with 1377 additions and 831 deletions
......@@ -20,6 +20,7 @@
</resource>
</resources>
```
## 更新合同金额
需要在 ``Contract.class`` 把 金额上面的四个注解 ``@ReverseAutoMapping(targetClass = ContractDTO.class, ignore = true)``
注释掉,然后调用更新接口。
\ No newline at end of file
......@@ -8,7 +8,7 @@ import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -19,15 +19,15 @@ public class MyBatisPlusConfig implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.fillHasGetter(metaObject, "createTime", new Date());
this.fillHasGetter(metaObject, "modifyTime", new Date());
this.fillHasGetter(metaObject, "updateTime", new Date());
this.fillHasGetter(metaObject, "createTime", LocalDateTime.now());
this.fillHasGetter(metaObject, "modifyTime", LocalDateTime.now());
this.fillHasGetter(metaObject, "updateTime", LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.fillHasGetter(metaObject, "modifyTime", new Date());
this.fillHasGetter(metaObject, "updateTime", new Date());
this.fillHasGetter(metaObject, "modifyTime", LocalDateTime.now());
this.fillHasGetter(metaObject, "updateTime", LocalDateTime.now());
}
protected void fillHasGetter(MetaObject metaObject, String fieldName, Object fieldVal) {
......
package vion.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.codec.JsonJacksonCodec;
......@@ -28,7 +30,9 @@ public class RedisConfig {
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() {
Config config = new Config();
config.setCodec(JsonJacksonCodec.INSTANCE);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
config.setCodec(new JsonJacksonCodec(objectMapper));
SingleServerConfig singleServerConfig = config.useSingleServer();
singleServerConfig.setAddress("redis://" + host + ":" + port)
.setPassword(password)
......
package vion.config;
import jakarta.servlet.http.HttpServletRequestWrapper;
import org.dromara.hutool.core.io.IoUtil;
import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import org.dromara.hutool.core.io.IoUtil;
import java.io.*;
......
package vion.constant;
import org.dromara.hutool.core.text.StrUtil;
import lombok.Getter;
import org.dromara.hutool.core.text.StrUtil;
import java.util.Arrays;
......
......@@ -11,8 +11,8 @@ import vion.vo.ConstructionTeamVO;
import vion.vo.RContractTeamVO;
/**
* 施工队管理
*/
* 施工队管理
*/
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
......
......@@ -10,7 +10,7 @@ import com.github.liaochong.myexcel.utils.WatermarkUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.text.CharSequenceUtil;
import org.dromara.hutool.core.text.StrUtil;
......@@ -31,7 +31,7 @@ import vion.vo.UserVO;
import java.awt.*;
import java.io.IOException;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
......@@ -192,7 +192,7 @@ public class ContractController {
watermark.setText(user.getUsername() + "-" + user.getPhone());
watermark.setFont(new Font("SimSun", Font.PLAIN, 16));
WatermarkUtil.addWatermark(workbook, watermark);
AttachmentExportUtil.export(workbook, StrUtil.format("合同列表_{}", DateUtil.formatDateTime(new Date())), response);
AttachmentExportUtil.export(workbook, StrUtil.format("合同列表_{}", TimeUtil.formatNormal(LocalDateTime.now())), response);
} catch (IOException e) {
throw new RuntimeException(e);
}
......
......@@ -7,7 +7,7 @@ import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Assert;
......@@ -31,7 +31,7 @@ import vion.vo.FileInfoVO;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.time.LocalDateTime;
@RestController
@RequestMapping("/api")
......@@ -110,7 +110,7 @@ public class FileController {
@SaCheckPermission(value = "file:form:upload", orRole = "admin")
public String uploadFile(FileInfoDTO dto, @RequestParam(name = "file") MultipartFile infile) throws IOException {
String filename = FileNameUtil.mainName(infile.getOriginalFilename()) + "_" +
DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS") + "." +
TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS") + "." +
FileNameUtil.extName(infile.getOriginalFilename());
String path = getPath(dto, filename);
File file = FileUtil.touch(path);
......@@ -142,7 +142,7 @@ public class FileController {
public String uploadFile1(FileInfo fileInfo, @RequestParam(name = "files") MultipartFile[] files) throws IOException {
for (MultipartFile infile : files) {
String filename = FileNameUtil.mainName(infile.getOriginalFilename()) + "_" +
DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS") + "." +
TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS") + "." +
FileNameUtil.extName(infile.getOriginalFilename());
String path = fileUrl + FileUtil.FILE_SEPARATOR + fileInfo.getStoreId() + FileUtil.FILE_SEPARATOR + fileInfo.getSourceId() + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
......
......@@ -11,7 +11,7 @@ import vion.model.Inspect;
import vion.service.IInspectService;
import vion.vo.InspectVO;
import java.util.Date;
import java.time.LocalDate;
@RestController
@RequestMapping("/api")
......@@ -47,10 +47,10 @@ public class InspectController {
boolean result = inspectService.lambdaUpdate()
.eq(Inspect::getId, data.getId())
.set(Inspect::getStatus, data.getStatus())
.set(Inspect::getAuditDate, new Date())
.set(Inspect::getAuditDate, LocalDate.now())
.set(Inspect::getReviewer, data.getReviewer())
//审核状态为已完成的时候更新完成时间(0进行中、1待审核、2已完成、3、驳回)
.set(data.getStatus() == 2, Inspect::getFinishDate, new Date())
.set(data.getStatus() == 2, Inspect::getFinishDate, LocalDate.now())
.update();
return result ? "更新巡检状态成功" : "更新巡检状态失败";
}
......
......@@ -10,7 +10,7 @@ import io.github.linpeilie.Converter;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.web.bind.annotation.*;
import vion.dto.InvoiceDTO;
......@@ -21,7 +21,7 @@ import vion.vo.UserVO;
import java.awt.*;
import java.io.IOException;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -79,7 +79,7 @@ public class InvoiceController {
watermark.setText(user.getUsername() + "-" + user.getPhone());
watermark.setFont(new Font("SimSun", Font.PLAIN, 16));
WatermarkUtil.addWatermark(workbook, watermark);
AttachmentExportUtil.export(workbook, StrUtil.format("发票列表_{}", DateUtil.formatDateTime(new Date())), response);
AttachmentExportUtil.export(workbook, StrUtil.format("发票列表_{}", TimeUtil.formatNormal(LocalDateTime.now())), response);
} catch (IOException e) {
throw new RuntimeException(e);
}
......
......@@ -2,31 +2,31 @@ package vion.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.text.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.liaochong.myexcel.core.DefaultExcelBuilder;
import com.github.liaochong.myexcel.core.watermark.Watermark;
import vion.utils.excel.AttachmentExportUtil;
import com.github.liaochong.myexcel.utils.WatermarkUtil;
import io.github.linpeilie.Converter;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.web.bind.annotation.*;
import vion.dto.PaymentDTO;
import vion.service.IPaymentService;
import vion.utils.excel.AttachmentExportUtil;
import vion.vo.PaymentVO;
import vion.vo.UserVO;
import jakarta.servlet.http.HttpServletResponse;
import java.awt.*;
import java.io.IOException;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
/**
* 收款记录管理
*/
* 收款记录管理
*/
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
......@@ -79,7 +79,7 @@ public class PaymentController {
watermark.setText(user.getUsername() + "-" + user.getPhone());
watermark.setFont(new Font("SimSun", Font.PLAIN, 16));
WatermarkUtil.addWatermark(workbook, watermark);
AttachmentExportUtil.export(workbook, StrUtil.format("收款列表_{}", DateUtil.formatDateTime(new Date())), response);
AttachmentExportUtil.export(workbook, StrUtil.format("收款列表_{}", TimeUtil.formatNormal(LocalDateTime.now())), response);
} catch (IOException e) {
throw new RuntimeException(e);
}
......
......@@ -2,28 +2,28 @@ package vion.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.text.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.liaochong.myexcel.core.DefaultExcelBuilder;
import com.github.liaochong.myexcel.core.watermark.Watermark;
import vion.utils.excel.AttachmentExportUtil;
import com.github.liaochong.myexcel.utils.WatermarkUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.web.bind.annotation.*;
import vion.dto.PointInfoDTO;
import vion.model.RejectInfo;
import vion.service.IPointInfoService;
import vion.third.WechatMod;
import vion.utils.excel.AttachmentExportUtil;
import vion.vo.PointInfoVO;
import vion.vo.UserVO;
import jakarta.servlet.http.HttpServletResponse;
import java.awt.*;
import java.io.IOException;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -128,7 +128,7 @@ public class PointDesignController {
watermark.setText(user.getUsername() + "-" + user.getPhone());
watermark.setFont(new Font("SimSun", Font.PLAIN, 16));
WatermarkUtil.addWatermark(workbook, watermark);
AttachmentExportUtil.export(workbook, StrUtil.format("点位设计列表_{}", DateUtil.formatDateTime(new Date())), response);
AttachmentExportUtil.export(workbook, StrUtil.format("点位设计列表_{}", TimeUtil.formatNormal(LocalDateTime.now())), response);
} catch (IOException e) {
throw new RuntimeException(e);
}
......
package vion.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.hutool.core.lang.Opt;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.lang.Opt;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......
package vion.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.array.ArrayUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.lang.Assert;
import org.springframework.web.bind.annotation.*;
import vion.dto.RepairRecDTO;
import vion.service.IRepairRecService;
......
package vion.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.text.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.util.ObjUtil;
import org.springframework.web.bind.annotation.*;
import vion.dto.RoleDTO;
......
......@@ -9,7 +9,7 @@ import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.web.bind.annotation.*;
......@@ -22,7 +22,7 @@ import vion.vo.UserVO;
import java.awt.*;
import java.io.IOException;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -92,7 +92,7 @@ public class SparePartController {
watermark.setText(user.getUsername() + "-" + user.getPhone());
watermark.setFont(new Font("SimSun", Font.PLAIN, 16));
WatermarkUtil.addWatermark(workbook, watermark);
AttachmentExportUtil.export(workbook, StrUtil.format("备件申请列表_{}", DateUtil.formatDateTime(new Date())), response);
AttachmentExportUtil.export(workbook, StrUtil.format("备件申请列表_{}", TimeUtil.formatNormal(LocalDateTime.now())), response);
} catch (IOException e) {
throw new RuntimeException(e);
}
......
......@@ -10,7 +10,7 @@ import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
......@@ -27,7 +27,8 @@ import vion.vo.UserVO;
import java.awt.*;
import java.io.IOException;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
......@@ -81,7 +82,7 @@ public class TaskController {
FaultLog faultLog = new FaultLog();
faultLog.setOperator(taskVO.getActiveUser());
faultLog.setContent("工单正在处理中");
faultLog.setCreateTime(new Date());
faultLog.setCreateTime(LocalDateTime.now());
faultLogList.add(faultLog);
}
return faultLogList;
......@@ -108,7 +109,7 @@ public class TaskController {
watermark.setText(user.getUsername() + "-" + user.getPhone());
watermark.setFont(new Font("SimSun", Font.PLAIN, 16));
WatermarkUtil.addWatermark(workbook, watermark);
AttachmentExportUtil.export(workbook, StrUtil.format("任务列表_{}", DateUtil.formatDateTime(new Date())), response);
AttachmentExportUtil.export(workbook, StrUtil.format("任务列表_{}", TimeUtil.formatNormal(LocalDateTime.now())), response);
} catch (IOException e) {
throw new RuntimeException(e);
}
......@@ -147,8 +148,8 @@ public class TaskController {
@GetMapping("/task/peopleAnal")
@SaCheckPermission(value = "task:peopleAnal", orRole = "admin")
public List<Map<String, Object>> peopleAnalysis(@DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate,
public List<Map<String, Object>> peopleAnalysis(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate,
Integer source,
@RequestParam(required = false) List<Long> userIds) {
return taskService.peopleAnalysis(startDate, endDate, source, userIds);
......@@ -156,8 +157,8 @@ public class TaskController {
@GetMapping("/task/proAnal")
@SaCheckPermission(value = "task:proAnal", orRole = "admin")
public List<Map<String, Object>> proAnalysis(@DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate,
public List<Map<String, Object>> proAnalysis(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate,
Integer source,
@RequestParam(required = false) List<Long> userIds) {
return taskService.proAnalysis(startDate, endDate, source, userIds);
......@@ -165,8 +166,8 @@ public class TaskController {
@GetMapping("/task/summaryAnal")
@SaCheckPermission(value = "task:summaryAnal", orRole = "admin")
public Map<String, Map<String, List<Task>>> summaryAnalysis(@DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate,
public Map<String, Map<String, List<Task>>> summaryAnalysis(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate,
Integer source) {
return taskService.summaryAnalysis(startDate, endDate, source);
}
......
......@@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.math.NumberUtil;
import org.dromara.hutool.core.text.StrUtil;
......@@ -165,9 +165,9 @@ public class ContractRunner {
contract.setName(jsonObj1.path("text_14").asText());
contract.setContractNo(jsonObj1.path("serialNo").asText());
contract.setType(contractTypeMap.getOrDefault(jsonObj1.path("text_17").path("text").asText(), 0));
contract.setSignDate(DateUtil.date(jsonObj1.path("date_1").asLong() * 1000));
contract.setMaintainSdate(Opt.ofNullable(jsonObj1.path("date_4")).filter(JsonNode::isNumber).map(sec -> DateUtil.date(sec.asLong() * 1000)).orElse(null));
contract.setMaintainEdate(Opt.ofNullable(jsonObj1.path("date_5")).filter(JsonNode::isNumber).map(sec -> DateUtil.date(sec.asLong() * 1000)).orElse(null));
contract.setSignDate(TimeUtil.of(jsonObj1.path("date_1").asLong() * 1000).toLocalDate());
contract.setMaintainSdate(Opt.ofNullable(jsonObj1.path("date_4")).filter(JsonNode::isNumber).map(sec -> TimeUtil.of(sec.asLong() * 1000).toLocalDate()).orElse(null));
contract.setMaintainEdate(Opt.ofNullable(jsonObj1.path("date_5")).filter(JsonNode::isNumber).map(sec -> TimeUtil.of(sec.asLong() * 1000).toLocalDate()).orElse(null));
String warrantyPeriod = jsonObj1.path("text_23").path("text").asText("");
// 23 质保 没有维保开始时间和结束时间 25 维保
if (StrUtil.isNotBlank(warrantyPeriod) && warrantyPeriod.contains("个月")) {
......@@ -183,7 +183,7 @@ public class ContractRunner {
if (!paymentForm.isEmpty()) {
paymentForm.forEach(pf -> {
var ratio = NumberUtil.div(BigDecimal.valueOf(Double.parseDouble(pf.path("text_1").asText())), 100);
var date = DateUtil.date(pf.path("date_1").asLong() * 1000);
var date = TimeUtil.of(pf.path("date_1").asLong() * 1000).toLocalDate();
var stage = pf.path("text_2").path("text").asText();
if (StrUtil.equals(stage, "预付款")) {
contract.setSignRatio(ratio);
......@@ -224,8 +224,8 @@ public class ContractRunner {
contract.setBackInfo(jsonObj1.path("text_29").asText());
contract.setCreateUser(-1L);
contract.setModifyUser(-1L);
contract.setEntryTime(DateUtil.date(result.path("addTime").asLong() * 1000));
contract.setOriginalModTime(DateUtil.date(result.path("updateTime").asLong() * 1000));
contract.setEntryTime(TimeUtil.of(result.path("addTime").asLong() * 1000));
contract.setOriginalModTime(TimeUtil.of(result.path("updateTime").asLong() * 1000));
insOrUpdContractList.add(contract);
var productArr = jsonObj1.withArray("array_4");
......@@ -320,8 +320,7 @@ public class ContractRunner {
contractPaymentService.calMoney(exist, updDto);
contractService.updateById(updDto);
});
redissonClient.getBucket(RedisKeyEnum.CONTRACT_SYNC_NEW_TIME.getVal()).set(insOrUpdContractList.getFirst().getOriginalModTime().getTime());
redissonClient.getBucket(RedisKeyEnum.CONTRACT_SYNC_NEW_TIME.getVal()).set(TimeUtil.toEpochMilli(insOrUpdContractList.getFirst().getOriginalModTime()));
log.info("【结束】从crm系统同步合同信息");
}
......
......@@ -2,7 +2,7 @@ package vion.cron;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil;
......@@ -20,6 +20,7 @@ import vion.service.IStoreService;
import vion.third.DingMod;
import vion.utils.JsonUtil;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.stream.Collectors;
......@@ -83,7 +84,7 @@ public class LogPushRunner {
.put("text", StrUtil.format("""
### 项目日志待提交提醒
#### 项目:[{}]请及时提交日志
#### 发送时间:{}""", storeName, DateUtil.now()));
#### 发送时间:{}""", storeName, TimeUtil.formatNormal(LocalDateTime.now())));
var msg = JsonUtil.createObj()
.put("msgtype", "markdown")
......
......@@ -3,7 +3,7 @@ package vion.cron;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Opt;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
......@@ -14,6 +14,7 @@ import vion.service.IUserService;
import vion.third.DingMod;
import vion.utils.JsonUtil;
import java.time.LocalDateTime;
import java.util.stream.Collectors;
/**
......@@ -52,7 +53,7 @@ public class TaskRunner {
.put("markdown", """
### 未完成工单提醒
#### 请查看您未完成的工单
#### 发送时间:""" + DateUtil.now())
#### 发送时间:""" + TimeUtil.formatNormal(LocalDateTime.now()))
.put("btn_orientation", "1");
var jsonArray = JsonUtil.createArr()
......
......@@ -7,7 +7,8 @@ import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -56,24 +57,26 @@ public class ContractDTO extends BaseDTO {
/**
* 终验日期
*/
private Date finalDate;
private LocalDateTime finalDate;
/**
* 项目id
*/
private Long storeId;
/** 文件来源 */
/**
* 文件来源
*/
private Integer sourceType;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date nodeDate;
private LocalDate nodeDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date signDateStart;
private LocalDate signDateStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date signDateEnd;
private LocalDate signDateEnd;
/**
* 1:查询未关联的合同
......@@ -81,7 +84,9 @@ public class ContractDTO extends BaseDTO {
*/
private int switchFlag;
/** 产品线属性 */
/**
* 产品线属性
*/
private List<Integer> productLines;
/**
......@@ -107,7 +112,9 @@ public class ContractDTO extends BaseDTO {
private BigDecimal amount;
/** 操作符 > < = */
/**
* 操作符 > < =
*/
private String operator;
private OrderItem orderItem;
......
......@@ -5,7 +5,7 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
@Getter
@Setter
......@@ -31,6 +31,6 @@ public class ContractPaymentDTO {
* 节点日期,指合同到这一阶段时的时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date nodeDate;
private LocalDate nodeDate;
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.time.LocalDate;
import java.util.List;
@Getter
......@@ -39,13 +39,13 @@ public class DeliverLogDTO extends BaseDTO {
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date logDate;
private LocalDate logDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date logDateStart;
private LocalDate logDateStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date logDateEnd;
private LocalDate logDateEnd;
/**
* 干系人
......
......@@ -6,7 +6,7 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.time.LocalDate;
@Getter
@Setter
......@@ -53,14 +53,14 @@ public class DeliveryRecordDTO extends BaseDTO {
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shipDate;
private LocalDate shipDate;
/**
* 到货签收日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date signDate;
private LocalDate signDate;
/**
* 快递公司
......
......@@ -4,7 +4,7 @@ import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.time.LocalDate;
@Getter
@Setter
......@@ -55,7 +55,7 @@ public class DeviceDTO extends BaseDTO {
* 入库日期
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date recDate;
private LocalDate recDate;
/**
* 备注
......
......@@ -9,31 +9,57 @@ import java.util.List;
@Setter
public class FileInfoDTO extends BaseDTO {
private Long id;
/** 门店id */
/**
* 门店id
*/
private Long storeId;
/** 文件扩展名 */
/**
* 文件扩展名
*/
private String type;
/** 文件来源 */
/**
* 文件来源
*/
private Integer sourceType;
private List<Integer> sourceTypeList;
/** 文件来源id */
/**
* 文件来源id
*/
private Long sourceId;
/** 合同id */
/**
* 合同id
*/
private Long contractId;
/** 合同编号 */
/**
* 合同编号
*/
private String contractNo;
/** 文件名称 */
/**
* 文件名称
*/
private String name;
/** 文件地址 */
/**
* 文件地址
*/
private String url;
/** 备注 */
/**
* 备注
*/
private String remark;
/** sha256 */
/**
* sha256
*/
private String sha256;
/** 上传人 */
/**
* 上传人
*/
private String uploader;
/** 标识:storeLog,用于区分项目日志的表单文件的提交存储和其他通用表单的文件存储 */
/**
* 标识:storeLog,用于区分项目日志的表单文件的提交存储和其他通用表单的文件存储
*/
private String flag;
/** 更新标识,更新接口不传该字段,不允许更新文件:1.项目资料 */
/**
* 更新标识,更新接口不传该字段,不允许更新文件:1.项目资料
*/
private Integer updFlag;
}
......@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
......@@ -41,7 +41,7 @@ public class FormDTO extends BaseDTO {
* 签字时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date signTime;
private LocalDateTime signTime;
/**
* 来源,1:任务管理,2:巡检管理
......
......@@ -5,45 +5,68 @@ import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Getter
@Setter
public class InspectDTO extends BaseDTO {
/** 自增列 */
/**
* 自增列
*/
private Long id;
/** 门店id */
/**
* 门店id
*/
private Long storeId;
/** 巡检时间 */
/**
* 巡检时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date inspectDate;
private LocalDate inspectDate;
/** 巡检方式(0远程、1现场) */
/**
* 巡检方式(0远程、1现场)
*/
private Integer type;
/** 状态(0进行中、1待审核、2已完成、3、驳回) */
/**
* 状态(0进行中、1待审核、2已完成、3、驳回)
*/
private Integer status;
/** 巡检人 */
/**
* 巡检人
*/
private Integer inspectUser;
/** 审核人 */
/**
* 审核人
*/
private Integer reviewer;
/** 完成时间 */
/**
* 完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date finishDate;
private LocalDate finishDate;
/** 审核时间 */
/**
* 审核时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date auditDate;
private LocalDate auditDate;
/** 备注 */
/**
* 备注
*/
private String remark;
/** 集团id */
/**
* 集团id
*/
private Long accountId;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startdate;
private LocalDateTime startdate;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date enddate;
private LocalDateTime enddate;
}
......@@ -7,7 +7,7 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
@Getter
......@@ -24,7 +24,7 @@ public class InvoiceDTO extends BaseDTO {
* 开票时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date invoicingTime;
private LocalDate invoicingTime;
/**
* 发票金额
......@@ -47,9 +47,9 @@ public class InvoiceDTO extends BaseDTO {
private String serialNo;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date invoicingTimeStart;
private LocalDate invoicingTimeStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date invoicingTimeEnd;
private LocalDate invoicingTimeEnd;
private OrderItem orderItem;
......
......@@ -7,7 +7,7 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
/**
* 收款记录表
......@@ -31,7 +31,7 @@ public class PaymentDTO extends BaseDTO {
* 收款时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date collectionTime;
private LocalDate collectionTime;
/**
* 收款金额
......@@ -47,10 +47,10 @@ public class PaymentDTO extends BaseDTO {
* 收款开始时间、结束时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date collectionTimeStart;
private LocalDate collectionTimeStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date collectionTimeEnd;
private LocalDate collectionTimeEnd;
private OrderItem orderItem;
......
......@@ -200,14 +200,20 @@ public class PointInfoDTO extends BaseDTO {
private MultipartFile[] files;
/** 客户上传合同文件 */
/**
* 客户上传合同文件
*/
private MultipartFile contractFile;
/** 上传的合同范本 */
/**
* 上传的合同范本
*/
private MultipartFile contractTemplateFile;
/* 终版合同 */
private MultipartFile finalContractFile;
/** 微信 openid 和昵称 */
/**
* 微信 openid 和昵称
*/
private String openid;
private String nickname;
......
......@@ -3,7 +3,7 @@ package vion.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -36,12 +36,12 @@ public class RContractTeamDTO extends BaseDTO {
/**
* 分配日期
*/
private Date assignDate;
private LocalDateTime assignDate;
/**
* 完成日期
*/
private Date finishDate;
private LocalDateTime finishDate;
/**
* 施工状态
......
......@@ -6,7 +6,8 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -87,7 +88,7 @@ public class RepairRecDTO extends BaseDTO {
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shipDate;
private LocalDate shipDate;
/**
* 快递公司
......@@ -119,14 +120,14 @@ public class RepairRecDTO extends BaseDTO {
private MultipartFile[] files;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeStart;
private LocalDateTime createTimeStart;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeEnd;
private LocalDateTime createTimeEnd;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shipDateStart;
private LocalDate shipDateStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shipDateEnd;
private LocalDate shipDateEnd;
private String deviceName;
private String deviceNo;
......
......@@ -4,7 +4,7 @@ import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -36,8 +36,8 @@ public class RoleDTO extends BaseDTO {
private String remark;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startDate;
private LocalDateTime startDate;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
private LocalDateTime endDate;
}
......@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -14,62 +14,100 @@ import java.util.Date;
@Setter
public class ServiceOrderDTO extends BaseDTO {
/** 项目名称 */
/**
* 项目名称
*/
private String projectName;
/** 报修人 */
/**
* 报修人
*/
private String submitter;
/** 报修人手机号码 */
/**
* 报修人手机号码
*/
private String submitPhone;
/** 报修时间 */
/**
* 报修时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitTime;
private LocalDateTime submitTime;
/** 维修人 */
/**
* 维修人
*/
private String repairPeople;
/** 维修人手机号码*/
/**
* 维修人手机号码
*/
private String repairPhone;
/** 部门 */
/**
* 部门
*/
private String dept;
/** 服务方式(1.电话支持 2.远程服务 3.现场服务) */
/**
* 服务方式(1.电话支持 2.远程服务 3.现场服务)
*/
private Integer serviceType;
/** 耗时 */
/**
* 耗时
*/
private Double time;
/** 故障内容 */
/**
* 故障内容
*/
private String faultContent;
/** 维修结果 */
/**
* 维修结果
*/
private String repairRes;
/** 客户评价 */
/**
* 客户评价
*/
private String review;
/** 工单id */
/**
* 工单id
*/
private Long taskId;
/** 服务单状态 */
/**
* 服务单状态
*/
private Integer state;
/** 五星好评 */
/**
* 五星好评
*/
private Integer stars;
/** 签字图片base64 */
/**
* 签字图片base64
*/
private String signPic;
/** 签字时间 */
/**
* 签字时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date signTime;
private LocalDateTime signTime;
/** 完成时间 */
/**
* 完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date finishTime;
/** 项目id */
private LocalDateTime finishTime;
/**
* 项目id
*/
private Long storeId;
}
......@@ -6,7 +6,8 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -82,7 +83,7 @@ public class SparePartDTO extends BaseDTO {
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shipDate;
private LocalDate shipDate;
/**
* 快递公司
......@@ -114,18 +115,20 @@ public class SparePartDTO extends BaseDTO {
*/
private String uuid;
/** 微信用户id */
/**
* 微信用户id
*/
private String openid;
private MultipartFile[] files;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeStart;
private LocalDateTime createTimeStart;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeEnd;
private LocalDateTime createTimeEnd;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shipDateStart;
private LocalDate shipDateStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shipDateEnd;
private LocalDate shipDateEnd;
}
\ No newline at end of file
......@@ -7,13 +7,21 @@ import org.springframework.web.multipart.MultipartFile;
@Getter
@Setter
public class StatusDTO {
/** 门店id */
/**
* 门店id
*/
private Long storeId;
/** 阶段 */
/**
* 阶段
*/
private Integer projectStage;
/** 文件来源 */
/**
* 文件来源
*/
private Integer sourceType;
/** 来源id */
/**
* 来源id
*/
private Long sourceId;
private MultipartFile[] files;
}
......@@ -5,7 +5,8 @@ import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -16,69 +17,121 @@ import java.util.List;
public class StoreDTO extends BaseDTO {
private Long id;
private List<Long> ids;
/** 门店名称 */
private String name ;
/** 销售人 */
/**
* 门店名称
*/
private String name;
/**
* 销售人
*/
private Integer salesperson;
/** 客户姓名 */
/**
* 客户姓名
*/
private String customerName;
/** 实施类型:0纯供货、1供货+安装、3续保、4维修 */
/**
* 实施类型:0纯供货、1供货+安装、3续保、4维修
*/
private Integer implementType;
/** 项目状态:0待确认、1进行中、2已完成、3挂起 */
/**
* 项目状态:0待确认、1进行中、2已完成、3挂起
*/
private Integer projectState;
/** 联系人(多个联系人逗号隔开) */
/**
* 联系人(多个联系人逗号隔开)
*/
private String contacts;
/** 创建者 */
/**
* 创建者
*/
private Long createUser;
/** 修改者 */
/**
* 修改者
*/
private Long modifyUser;
/** 备注 */
/**
* 备注
*/
private String remark;
/** 项目阶段 */
/**
* 项目阶段
*/
private Integer projectStage;
/** 集团id */
/**
* 集团id
*/
private Long accountId;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startdate;
private LocalDateTime startdate;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date enddate;
/** 立项日期 */
private LocalDateTime enddate;
/**
* 立项日期
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date estDate;
private LocalDate estDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date estDateStart;
private LocalDate estDateStart;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date estDateEnd;
/** 主合同id */
private LocalDate estDateEnd;
/**
* 主合同id
*/
private Long masterContract;
/** 维保状态 */
/**
* 维保状态
*/
private String maintainStatus;
/** 产品线属性 */
/**
* 产品线属性
*/
private Integer productLine;
/** 是否重点项目 0:不是 1:是 */
/**
* 是否重点项目 0:不是 1:是
*/
private Integer isImportant;
/** 任务详情 */
/**
* 任务详情
*/
private String taskDetail;
/** 预计完成日期 */
/**
* 预计完成日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date finishDate;
/** 完成百分比 */
private LocalDate finishDate;
/**
* 完成百分比
*/
private Double percentage;
/** 当前卡点 */
/**
* 当前卡点
*/
private String stuckPoint;
/** 标签id */
/**
* 标签id
*/
private Long tagId;
/** 项目负责人 or 项目经理 */
/**
* 项目负责人 or 项目经理
*/
private Long mainUser;
/** 主要产品 */
/**
* 主要产品
*/
private Integer mainProduct;
/** 点位数量 */
/**
* 点位数量
*/
private Integer pointNum;
/** 计划完成日期 */
/**
* 计划完成日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date planFinishDate;
/** 项目规模 */
private LocalDate planFinishDate;
/**
* 项目规模
*/
private Integer projectSize;
/**
* 巡检次数
......
......@@ -6,7 +6,8 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -22,7 +23,7 @@ public class TaskDTO extends BaseDTO {
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date repairTime;
private LocalDateTime repairTime;
/**
* 故障类型
*/
......@@ -48,7 +49,7 @@ public class TaskDTO extends BaseDTO {
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date solveDate;
private LocalDate solveDate;
/**
* 故障原因
*/
......@@ -75,7 +76,7 @@ public class TaskDTO extends BaseDTO {
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date expDate;
private LocalDate expDate;
/**
* 备注
......@@ -93,11 +94,11 @@ public class TaskDTO extends BaseDTO {
private MultipartFile[] files;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startdate;
private LocalDateTime startdate;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date enddate;
private LocalDateTime enddate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date curDate;
private LocalDate curDate;
/**
* 工时
*/
......
......@@ -6,7 +6,7 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -22,7 +22,7 @@ public class TaskTempDTO extends BaseDTO {
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date repairTime;
private LocalDateTime repairTime;
/**
* 故障说明
*/
......@@ -53,7 +53,7 @@ public class TaskTempDTO extends BaseDTO {
private MultipartFile[] files;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startdate;
private LocalDateTime startdate;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date enddate;
private LocalDateTime enddate;
}
......@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 用户信息
......@@ -18,15 +18,19 @@ public class UserDTO extends BaseDTO {
private String phone;
private Long deptId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
private String remark;
/** 是否是预工单处理人 0:不是 1:是 */
/**
* 是否是预工单处理人 0:不是 1:是
*/
private Integer preWorkOrder;
/** 员工状态 2:试用期 3:正式 5:待离职 -1:无状态 */
/**
* 员工状态 2:试用期 3:正式 5:待离职 -1:无状态
*/
private Integer employeeStatus;
/* 状态 0:正常 1:禁用 */
......
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.Dictionary;
public interface DictionaryMapper extends MPJBaseMapper<Dictionary> {
}
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.DictionaryType;
public interface DictionaryTypeMapper extends MPJBaseMapper<DictionaryType> {
}
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.FaultLog;
public interface FaultLogMapper extends MPJBaseMapper<FaultLog> {
}
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.FileInfo;
public interface FileMapper extends MPJBaseMapper<FileInfo> {
}
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.Inspect;
public interface InspectMapper extends MPJBaseMapper<Inspect> {
}
package vion.mapper;
package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.SparePart;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.SparePart;
/**
* @author HlQ
......
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.Store;
public interface StoreMapper extends MPJBaseMapper<Store> {
}
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.Task;
public interface TaskMapper extends MPJBaseMapper<Task> {
}
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.TaskTemp;
public interface TaskTempMapper extends MPJBaseMapper<TaskTemp> {
}
......@@ -2,5 +2,6 @@ package vion.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import vion.model.User;
public interface UserMapper extends MPJBaseMapper<User> {
}
......@@ -6,7 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.BaseDTO;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -29,14 +29,14 @@ public class Account extends BaseDTO {
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
/**
* 备注
......
......@@ -8,7 +8,7 @@ import lombok.Setter;
import vion.dto.ConstructionTeamDTO;
import vion.vo.ConstructionTeamVO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 施工队信息表
......@@ -37,8 +37,8 @@ public class ConstructionTeam {
private String city;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -10,7 +10,8 @@ import vion.dto.ContractDTO;
import vion.vo.ContractVO;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
......@@ -49,19 +50,19 @@ public class Contract {
* 合同签订日期
*/
@TableField(value = "sign_date")
private Date signDate;
private LocalDate signDate;
/**
* 合同维保开始日期
*/
@TableField(value = "maintain_sdate")
private Date maintainSdate;
private LocalDate maintainSdate;
/**
* 合同维保结束日期
*/
@TableField(value = "maintain_edate")
private Date maintainEdate;
private LocalDate maintainEdate;
/**
* 合同进度:1-签订 2-到货 3-系统验收(初验) 4-项目验收(终验) 5-质保 6-第一笔维保款 7-第二笔维保款 8-第三笔维保款 9-维保进度款 10-维保验收款
......@@ -140,13 +141,13 @@ public class Contract {
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
private Date modifyTime;
private LocalDateTime modifyTime;
/**
* 合同质保周期(月)
......@@ -158,7 +159,7 @@ public class Contract {
* 终验日期,目前取值为合同阶段为系统初验或者终验的 nodeDate
*/
@TableField(value = "final_date")
private Date finalDate;
private LocalDate finalDate;
/**
* 开票金额
......@@ -170,7 +171,7 @@ public class Contract {
* 录入时间
*/
@TableField(value = "entry_time")
private Date entryTime;
private LocalDateTime entryTime;
/**
* 财务状态
......@@ -185,7 +186,7 @@ public class Contract {
private String backInfo;
@TableField(exist = false)
private Date originalModTime;
private LocalDateTime originalModTime;
/**
* 合同签订付款比例
......@@ -197,7 +198,7 @@ public class Contract {
* 合同签订付款日期
*/
@TableField(exist = false)
private Date signDate1;
private LocalDate signDate1;
/**
* 合同到货付款比例
......@@ -209,7 +210,7 @@ public class Contract {
* 合同到货付款日期
*/
@TableField(exist = false)
private Date arriveDate;
private LocalDate arriveDate;
/**
* 合同系统验收付款比例
......@@ -221,7 +222,7 @@ public class Contract {
* 合同系统验收付款日期
*/
@TableField(exist = false)
private Date systemCheckDate;
private LocalDate systemCheckDate;
/**
* 合同项目验收付款比例
......@@ -233,7 +234,7 @@ public class Contract {
* 合同项目验收付款日期
*/
@TableField(exist = false)
private Date projectCheckDate;
private LocalDate projectCheckDate;
/**
* 合同质保付款比例
......@@ -245,7 +246,7 @@ public class Contract {
* 合同质保付款日期
*/
@TableField(exist = false)
private Date warrantyDate;
private LocalDate warrantyDate;
/**
* 合同维保付款比例1
......@@ -257,7 +258,7 @@ public class Contract {
* 合同维保付款日期1
*/
@TableField(exist = false)
private Date maintainDate1;
private LocalDate maintainDate1;
/**
* 合同维保付款比例2
......@@ -269,7 +270,7 @@ public class Contract {
* 合同维保付款日期2
*/
@TableField(exist = false)
private Date maintainDate2;
private LocalDate maintainDate2;
/**
* 合同维保付款比例3
......@@ -281,7 +282,7 @@ public class Contract {
* 合同维保付款日期3
*/
@TableField(exist = false)
private Date maintainDate3;
private LocalDate maintainDate3;
/**
* 维保进度款
......@@ -293,7 +294,7 @@ public class Contract {
* 维保进度款付款日期
*/
@TableField(exist = false)
private Date maintainProgressDate;
private LocalDate maintainProgressDate;
/**
* 维保验收款
......@@ -305,5 +306,5 @@ public class Contract {
* 维保验收款付款日期
*/
@TableField(exist = false)
private Date maintainAcceptanceDate;
private LocalDate maintainAcceptanceDate;
}
\ No newline at end of file
......@@ -5,7 +5,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -47,9 +48,9 @@ public class ContractLog {
*/
@TableField(value = "rec_time")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date recTime;
private LocalDate recTime;
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
}
\ No newline at end of file
......@@ -9,7 +9,8 @@ import vion.dto.ContractPaymentDTO;
import vion.vo.ContractPaymentVO;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 合同收款方式
......@@ -47,13 +48,13 @@ public class ContractPayment {
* 收款日期
*/
@TableField(value = "payment_date")
private Date paymentDate;
private LocalDate paymentDate;
/**
* 节点日期,指合同到这一阶段时的时间
*/
@TableField(value = "node_date")
private Date nodeDate;
private LocalDate nodeDate;
/**
* 创建者
......@@ -71,11 +72,11 @@ public class ContractPayment {
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
private Date modifyTime;
private LocalDateTime modifyTime;
}
\ No newline at end of file
......@@ -8,7 +8,8 @@ import lombok.Setter;
import vion.dto.DeliverLogDTO;
import vion.vo.DeliverLogVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 项目交付人员日志
......@@ -52,7 +53,7 @@ public class DeliverLog {
* 日志日期
*/
@TableField(value = "log_date")
private Date logDate;
private LocalDate logDate;
/**
* 干系人
......@@ -82,11 +83,11 @@ public class DeliverLog {
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -8,7 +8,8 @@ import lombok.Setter;
import vion.dto.DeliveryRecordDTO;
import vion.vo.DeliveryRecordVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 发货记录表
......@@ -36,15 +37,21 @@ public class DeliveryRecord {
@TableField(value = "contract_id")
private Long contractId;
/** 收货人 */
/**
* 收货人
*/
@TableField(value = "consignee")
private String consignee;
/** 收货地址 */
/**
* 收货地址
*/
@TableField(value = "address")
private String address;
/** 收货电话 */
/**
* 收货电话
*/
@TableField(value = "phone")
private String phone;
......@@ -52,13 +59,13 @@ public class DeliveryRecord {
* 发货日期
*/
@TableField(value = "ship_date")
private Date shipDate;
private LocalDate shipDate;
/**
* 到货签收日期
*/
@TableField(value = "sign_date")
private Date signDate;
private LocalDate signDate;
/**
* 快递公司
......@@ -87,11 +94,11 @@ public class DeliveryRecord {
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -5,11 +5,11 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
@TableName(value="tbl_dept_info")
@TableName(value = "tbl_dept_info")
public class Dept {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
......@@ -18,9 +18,9 @@ public class Dept {
private Long parentId;
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
}
\ No newline at end of file
......@@ -7,7 +7,8 @@ import lombok.Data;
import vion.dto.DeviceDTO;
import vion.vo.DeviceVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 设备表
......@@ -68,7 +69,7 @@ public class Device {
* 入库日期
*/
@TableField(value = "rec_date")
private Date recDate;
private LocalDate recDate;
/**
* 备注
......@@ -77,8 +78,8 @@ public class Device {
private String remark;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -4,12 +4,13 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
* @date 2024/8/12
*/
/**
* 设备变更日志表
*/
......@@ -39,5 +40,5 @@ public class DeviceLog {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
}
\ No newline at end of file
......@@ -8,11 +8,11 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.DictionaryDTO;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
@TableName(value="tbl_dictionary_info")
@TableName(value = "tbl_dictionary_info")
@AutoMappers({
@AutoMapper(target = DictionaryDTO.class),
})
......@@ -24,13 +24,17 @@ public class Dictionary {
private Integer key;
private String value;
private String remark;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
......@@ -8,11 +8,11 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.DictionaryTypeDTO;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
@TableName(value="tbl_dictionary_type")
@TableName(value = "tbl_dictionary_type")
@AutoMappers({
@AutoMapper(target = DictionaryTypeDTO.class),
})
......@@ -24,13 +24,17 @@ public class DictionaryType {
private String type;
private String remark;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
......@@ -5,33 +5,49 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 工单操作记录
*/
@Getter
@Setter
@TableName(value="tbl_fault_log")
@TableName(value = "tbl_fault_log")
public class FaultLog {
/** 自增列 */
/**
* 自增列
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/** 门店id */
/**
* 门店id
*/
private Long storeId;
/** 工单id */
/**
* 工单id
*/
private Long taskId;
/** 操作者 */
/**
* 操作者
*/
private Long operator;
/** 操作内容 */
/**
* 操作内容
*/
private String content;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/** 备注 */
private LocalDateTime createTime;
/**
* 备注
*/
private String remark;
/** 工时 */
/**
* 工时
*/
private Double manHour;
}
......@@ -8,14 +8,14 @@ import lombok.Setter;
import vion.dto.FileInfoDTO;
import vion.vo.FileInfoVO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 文件信息
*/
@Getter
@Setter
@TableName(value="tbl_file_info")
@TableName(value = "tbl_file_info")
@AutoMappers({
@AutoMapper(target = FileInfoDTO.class),
@AutoMapper(target = FileInfoVO.class),
......@@ -23,9 +23,13 @@ import java.util.Date;
public class FileInfo {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/** 项目id */
/**
* 项目id
*/
private Long storeId;
/** 文件扩展名 */
/**
* 文件扩展名
*/
private String type;
/**
* 文件来源
......@@ -38,22 +42,38 @@ public class FileInfo {
* <br>24验收报告,25竣工图纸,26点位表,27项目总结,28前期勘察,29巡检报告,30结算资料,31启动会</br>
*/
private Integer sourceType;
/** 文件来源id */
/**
* 文件来源id
*/
private Long sourceId;
/** 合同id */
/**
* 合同id
*/
private Long contractId;
/** 文件名称 */
/**
* 文件名称
*/
@TableField(condition = SqlCondition.LIKE)
private String name;
/** 文件地址 */
/**
* 文件地址
*/
private String url;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/** 备注 */
private LocalDateTime createTime;
/**
* 备注
*/
private String remark;
/** sha256 */
/**
* sha256
*/
private String sha256;
/** 上传人 */
/**
* 上传人
*/
private String uploader;
}
......@@ -9,7 +9,7 @@ import vion.config.JsonbTypeHandler;
import vion.dto.FormDTO;
import vion.vo.FormVO;
import java.util.Date;
import java.time.LocalDateTime;
/**
......@@ -60,7 +60,7 @@ public class Form {
* 签字时间
*/
@TableField(value = "sign_time")
private Date signTime;
private LocalDateTime signTime;
/**
* 唯一uuid
......@@ -87,8 +87,8 @@ public class Form {
private Long updateUser;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -8,7 +8,8 @@ import lombok.Setter;
import vion.dto.InspectDTO;
import vion.vo.InspectVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 巡检信息
......@@ -21,40 +22,66 @@ import java.util.Date;
@AutoMapper(target = InspectDTO.class),
})
public class Inspect {
/** 自增列 */
/**
* 自增列
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/** 门店id */
/**
* 门店id
*/
private Long storeId;
/** 巡检时间 */
/**
* 巡检时间
*/
@OrderBy
private Date inspectDate;
private LocalDate inspectDate;
/** 巡检方式(0远程、1现场) */
/**
* 巡检方式(0远程、1现场)
*/
private Integer type;
/** 状态(0进行中、1待审核、2已完成、3、驳回) */
/**
* 状态(0进行中、1待审核、2已完成、3、驳回)
*/
private Integer status;
/** 巡检人 */
/**
* 巡检人
*/
private Integer inspectUser;
/** 审核人 */
/**
* 审核人
*/
private Integer reviewer;
/** 巡检时间 */
private Date finishDate;
/**
* 巡检时间
*/
private LocalDate finishDate;
/** 审核时间 */
private Date auditDate;
/**
* 审核时间
*/
private LocalDate auditDate;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
/** 修改时间 */
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
private Date modifyTime;
/** 备注 */
private LocalDateTime modifyTime;
/**
* 备注
*/
private String remark;
/** 集团id */
/**
* 集团id
*/
private Long accountId;
}
......@@ -9,7 +9,8 @@ import vion.dto.InvoiceDTO;
import vion.vo.InvoiceVO;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
......@@ -36,7 +37,7 @@ public class Invoice {
* 开票时间
*/
@TableField(value = "invoicing_time")
private Date invoicingTime;
private LocalDate invoicingTime;
/**
* 发票金额
......@@ -63,8 +64,8 @@ public class Invoice {
private String serialNo;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -9,7 +9,8 @@ import vion.dto.PaymentDTO;
import vion.vo.PaymentVO;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 收款记录表
......@@ -41,7 +42,7 @@ public class Payment {
* 收款时间
*/
@TableField(value = "collection_time")
private Date collectionTime;
private LocalDate collectionTime;
/**
* 收款金额
......@@ -56,8 +57,8 @@ public class Payment {
private String remark;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ import lombok.Setter;
import vion.dto.PointInfoDTO;
import vion.vo.PointInfoVO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -236,8 +236,8 @@ public class PointInfo {
private String uuid;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -6,7 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -93,9 +93,9 @@ public class RContractProduct {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.RContractStoreDTO;
import java.util.Date;
import java.time.LocalDateTime;
/**
......@@ -53,12 +53,12 @@ public class RContractStore {
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
}
\ No newline at end of file
......@@ -11,11 +11,12 @@ import lombok.Setter;
import vion.dto.RContractTeamDTO;
import vion.vo.RContractTeamVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 合同与施工队关联表
*/
* 合同与施工队关联表
*/
@Getter
@Setter
@TableName(value = "r_contract_team")
......@@ -55,13 +56,13 @@ public class RContractTeam {
* 分配日期
*/
@TableField(value = "assign_date")
private Date assignDate;
private LocalDate assignDate;
/**
* 完成日期
*/
@TableField(value = "finish_date")
private Date finishDate;
private LocalDate finishDate;
/**
* 施工状态
......@@ -88,8 +89,8 @@ public class RContractTeam {
private String remark;
@TableField(value = "create_time")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -6,7 +6,8 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.BaseDTO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -54,9 +55,9 @@ public class RContractUser extends BaseDTO {
*/
@TableField(value = "enter_date")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date enterDate;
private LocalDate enterDate;
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -32,9 +32,9 @@ public class RPointDevice {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -38,9 +38,9 @@ public class RPointWx {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -10,7 +10,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.BaseDTO;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -136,9 +136,9 @@ public class RRepairDevice extends BaseDTO {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.RRoleResourceDTO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -36,13 +36,17 @@ public class RRoleResource {
@TableField(value = "resource_id")
private Long resourceId;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -6,7 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.BaseDTO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 项目干系人
......@@ -47,12 +47,12 @@ public class RStoreConfederate extends BaseDTO {
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -32,9 +32,9 @@ public class RStoreTag {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -5,12 +5,13 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
* @date 2023/12/27
*/
/**
* 项目与用户关联表
*/
......@@ -43,11 +44,11 @@ public class RStoreUser {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@OrderBy
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
@TableField(exist = false)
private RStoreUser[] storeUsers;
......
......@@ -8,7 +8,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.RUserRoleDTO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -41,12 +41,12 @@ public class RUserRole {
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -6,7 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.BaseDTO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -39,9 +39,9 @@ public class RejectInfo extends BaseDTO {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -8,7 +8,8 @@ import lombok.Setter;
import vion.dto.RepairRecDTO;
import vion.vo.RepairRecVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -108,7 +109,7 @@ public class RepairRec {
* 发货日期
*/
@TableField(value = "ship_date")
private Date shipDate;
private LocalDate shipDate;
/**
* 快递公司
......@@ -144,8 +145,8 @@ public class RepairRec {
private String remark;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import lombok.Setter;
import vion.dto.ResourceDTO;
import vion.vo.ResourceVO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -74,14 +74,18 @@ public class Resource {
@TableField(value = "remark")
private String remark;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import lombok.Setter;
import vion.dto.RoleDTO;
import vion.vo.RoleVO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 角色表
......@@ -49,14 +49,18 @@ public class Role {
@TableField(value = "remark")
private String remark;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import lombok.Setter;
import vion.dto.ServiceOrderDTO;
import vion.vo.ServiceOrderVO;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -22,74 +22,116 @@ public class ServiceOrder {
@TableId(type = IdType.AUTO)
private Long id;
/** 项目名称 */
/**
* 项目名称
*/
private String projectName;
/** 报修人 */
/**
* 报修人
*/
private String submitter;
/** 报修人手机号码 */
/**
* 报修人手机号码
*/
private String submitPhone;
/** 报修时间 */
/**
* 报修时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitTime;
private LocalDateTime submitTime;
/** 维修人 */
/**
* 维修人
*/
private String repairPeople;
/** 维修人手机号码*/
/**
* 维修人手机号码
*/
private String repairPhone;
/** 部门 */
/**
* 部门
*/
private String dept;
/** 服务方式(1.电话支持 2.远程服务 3.现场服务) */
/**
* 服务方式(1.电话支持 2.远程服务 3.现场服务)
*/
private Integer serviceType;
/** 耗时 */
/**
* 耗时
*/
private Double time;
/** 故障内容 */
/**
* 故障内容
*/
private String faultContent;
/** 维修结果 */
/**
* 维修结果
*/
private String repairRes;
/** 客户评价 */
/**
* 客户评价
*/
private String review;
/** 工单id */
/**
* 工单id
*/
private Long taskId;
/** 服务单状态 */
/**
* 服务单状态
*/
private Integer state;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
/** 五星好评 */
/**
* 五星好评
*/
private Integer stars;
/** 签字图片base64 */
/**
* 签字图片base64
*/
private String signPic;
/** 签字时间 */
/**
* 签字时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date signTime;
private LocalDateTime signTime;
/** 完成时间 */
/**
* 完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date finishTime;
private LocalDateTime finishTime;
/** 唯一id */
/**
* 唯一id
*/
private String unid;
}
......@@ -9,7 +9,7 @@ import vion.dto.SettlementDiffDTO;
import vion.vo.SettlementDiffVO;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -72,5 +72,5 @@ public class SettlementDiff {
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
}
\ No newline at end of file
......@@ -8,7 +8,8 @@ import lombok.Setter;
import vion.dto.SparePartDTO;
import vion.vo.SparePartVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -101,7 +102,7 @@ public class SparePart {
* 发货日期
*/
@TableField(value = "ship_date")
private Date shipDate;
private LocalDate shipDate;
/**
* 快递公司
......@@ -139,13 +140,15 @@ public class SparePart {
@TableField(value = "uuid")
private String uuid;
/** 微信用户id */
/**
* 微信用户id
*/
@TableField(value = "openid")
private String openid;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -9,7 +9,8 @@ import lombok.Setter;
import vion.dto.StoreDTO;
import vion.vo.StoreVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 门店信息
......@@ -59,14 +60,14 @@ public class Store {
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
/**
* 备注
......@@ -87,7 +88,7 @@ public class Store {
* 立项日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date estDate;
private LocalDate estDate;
/**
* 主合同id
......@@ -117,7 +118,7 @@ public class Store {
/**
* 实际完成日期
*/
private Date finishDate;
private LocalDate finishDate;
/**
* 完成百分比
......@@ -142,7 +143,7 @@ public class Store {
/**
* 计划完成日期
*/
private Date planFinishDate;
private LocalDate planFinishDate;
/**
* 项目规模
......
......@@ -7,11 +7,12 @@ import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import vion.dto.BaseDTO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 项目日志表
*/
* 项目日志表
*/
@Getter
@Setter
@TableName(value = "tbl_store_log")
......@@ -31,7 +32,7 @@ public class StoreLog extends BaseDTO {
@TableField(value = "log_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date logDate;
private LocalDate logDate;
/**
* 记录人
......@@ -48,9 +49,9 @@ public class StoreLog extends BaseDTO {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@OrderBy
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -6,7 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.dto.BaseDTO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -33,9 +33,9 @@ public class Tag extends BaseDTO {
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -10,7 +10,8 @@ import org.springframework.format.annotation.DateTimeFormat;
import vion.dto.TaskDTO;
import vion.vo.TaskVO;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -35,7 +36,7 @@ public class Task {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@OrderBy(sort = 2)
private Date repairTime;
private LocalDateTime repairTime;
/**
* 故障类型
*/
......@@ -64,7 +65,7 @@ public class Task {
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date solveDate;
private LocalDate solveDate;
/**
* 故障原因
*/
......@@ -90,21 +91,21 @@ public class Task {
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date expDate;
private LocalDate expDate;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
/**
* 备注
......
......@@ -10,54 +10,76 @@ import org.springframework.format.annotation.DateTimeFormat;
import vion.dto.TaskTempDTO;
import vion.vo.TaskTempVO;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
@TableName(value="tbl_task_temp")
@TableName(value = "tbl_task_temp")
@AutoMappers({
@AutoMapper(target = TaskTempVO.class),
@AutoMapper(target = TaskTempDTO.class),
})
public class TaskTemp {
@TableId(type= IdType.AUTO)
@TableId(type = IdType.AUTO)
private Long id;
/** 项目id */
/**
* 项目id
*/
private Long storeId;
/** 项目名称(用户提交的名称) */
/**
* 项目名称(用户提交的名称)
*/
@TableField(condition = SqlCondition.LIKE)
private String storeName;
/** 报修时间 */
/**
* 报修时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@OrderBy(sort = 2)
private Date repairTime;
private LocalDateTime repairTime;
/** 故障说明 */
/**
* 故障说明
*/
private String faultDescription;
/** 报修人 */
/**
* 报修人
*/
@TableField(condition = SqlCondition.LIKE)
private String repairPeople;
/** 联系方式 */
/**
* 联系方式
*/
@TableField(condition = SqlCondition.LIKE)
private String repairPhone;
/** 状态(1待确认、2进行中、3已确认) */
/**
* 状态(1待确认、2进行中、3已确认)
*/
@OrderBy(asc = true, sort = 1)
private Integer status;
/** 操作人 */
/**
* 操作人
*/
private Long operator;
/** 创建时间 */
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 修改时间 */
/**
* 修改时间
*/
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
/** 备注 */
/**
* 备注
*/
private String remark;
/**
......@@ -70,7 +92,9 @@ public class TaskTemp {
*/
private String email;
/** 微信用户id */
/**
* 微信用户id
*/
private String openid;
}
......@@ -9,14 +9,14 @@ import lombok.Setter;
import vion.dto.UserDTO;
import vion.vo.UserVO;
import java.util.Date;
import java.time.LocalDateTime;
/**
* 用户信息
*/
@Getter
@Setter
@TableName(value="tbl_user_info")
@TableName(value = "tbl_user_info")
@AutoMappers({
@AutoMapper(target = UserDTO.class),
@AutoMapper(target = UserVO.class),
......@@ -31,16 +31,20 @@ public class User {
private Long deptId;
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@TableField(value = "modify_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
private String remark;
/** 是否是预工单处理人 0:不是 1:是 */
/**
* 是否是预工单处理人 0:不是 1:是
*/
private Integer preWorkOrder;
/** 员工状态 2:试用期 3:正式 5:待离职 -1:无状态 */
/**
* 员工状态 2:试用期 3:正式 5:待离职 -1:无状态
*/
private Integer employeeStatus;
/* 状态 0:正常 1:禁用 */
......
......@@ -2,11 +2,12 @@ package vion.service;
import com.baomidou.mybatisplus.extension.service.IService;
import vion.model.DeviceLog;
/**
/**
* @author HlQ
* @date 2024/8/12
*/
public interface IDeviceLogService extends IService<DeviceLog>{
public interface IDeviceLogService extends IService<DeviceLog> {
}
package vion.service;
import vion.model.RContractProduct;
import com.baomidou.mybatisplus.extension.service.IService;
/**
import vion.model.RContractProduct;
/**
* @author HlQ
* @date 2024/3/26
*/
public interface IRContractProductService extends IService<RContractProduct>{
public interface IRContractProductService extends IService<RContractProduct> {
}
package vion.service;
import vion.model.RContractStore;
import com.github.yulichang.base.MPJBaseService;
/**
import vion.model.RContractStore;
/**
* @author HlQ
* @date 2023/11/29
*/
public interface IRContractStoreService extends MPJBaseService<RContractStore>{
public interface IRContractStoreService extends MPJBaseService<RContractStore> {
}
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RContractTeam;
/**
/**
* @author HlQ
* @date 2023/12/26
*/
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RContractUser;
/**
/**
* @author HlQ
* @date 2023/12/28
*/
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RPointDevice;
/**
/**
* @author HlQ
* @date 2024/1/12
*/
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RPointWx;
/**
/**
* @author HlQ
* @date 2024/1/12
*/
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RRepairDevice;
/**
/**
* @author HlQ
* @date 2024/1/25
*/
......
package vion.service;
import vion.model.RRoleResource;
import com.github.yulichang.base.MPJBaseService;
/**
import vion.model.RRoleResource;
/**
* @author HlQ
* @date 2023/11/28
*/
public interface IRRoleResourceService extends MPJBaseService<RRoleResource>{
public interface IRRoleResourceService extends MPJBaseService<RRoleResource> {
}
package vion.service;
import vion.model.RStoreConfederate;
import com.baomidou.mybatisplus.extension.service.IService;
import vion.model.RStoreConfederate;
public interface IRStoreConfederateService extends IService<RStoreConfederate> {
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RStoreTag;
/**
/**
* @author HlQ
* @date 2024/1/30
*/
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RStoreUser;
/**
/**
* @author HlQ
* @date 2023/12/27
*/
......
package vion.service;
import vion.model.RUserRole;
import com.github.yulichang.base.MPJBaseService;
/**
import vion.model.RUserRole;
/**
* @author HlQ
* @date 2023/11/28
*/
public interface IRUserRoleService extends MPJBaseService<RUserRole>{
public interface IRUserRoleService extends MPJBaseService<RUserRole> {
}
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.RejectInfo;
/**
/**
* @author HlQ
* @date 2024/1/8
*/
......
......@@ -13,7 +13,7 @@ import java.util.List;
* @author HlQ
* @date 2023/11/28
*/
public interface IResourceService extends MPJBaseService<Resource>{
public interface IResourceService extends MPJBaseService<Resource> {
Page<ResourceVO> list(ResourceDTO dto);
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.StoreLog;
/**
/**
* @author HlQ
* @date 2023/12/27
*/
......
......@@ -2,7 +2,8 @@ package vion.service;
import com.github.yulichang.base.MPJBaseService;
import vion.model.Tag;
/**
/**
* @author HlQ
* @date 2024/1/30
*/
......
......@@ -6,7 +6,7 @@ import vion.dto.TaskDTO;
import vion.model.Task;
import vion.vo.TaskVO;
import java.util.Date;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
......@@ -28,9 +28,10 @@ public interface ITaskService extends MPJBaseService<Task> {
String urgeTask(Long taskId, String remark);
List<Map<String, Object>> peopleAnalysis(Date startDate, Date endDate, Integer source, List<Long> userIds);
List<Map<String, Object>> peopleAnalysis(LocalDate startDate, LocalDate endDate, Integer source,
List<Long> userIds);
List<Map<String, Object>> proAnalysis(Date startDate, Date endDate, Integer source, List<Long> userIds);
List<Map<String, Object>> proAnalysis(LocalDate startDate, LocalDate endDate, Integer source, List<Long> userIds);
Map<String, Map<String, List<Task>>> summaryAnalysis(Date startDate, Date endDate, Integer source);
Map<String, Map<String, List<Task>>> summaryAnalysis(LocalDate startDate, LocalDate endDate, Integer source);
}
......@@ -11,6 +11,7 @@ import java.util.Map;
public interface ITaskTempService extends MPJBaseService<TaskTemp> {
Page<TaskTempVO> getTaskTempList(TaskTempDTO data);
TaskTempVO getTaskTempById(Long id);
Object saveTaskTemp(TaskTempDTO data);
......
package vion.service.impl;
import org.dromara.hutool.core.text.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.stereotype.Service;
import vion.dto.ConstructionTeamDTO;
import vion.dto.RContractTeamDTO;
......
......@@ -19,8 +19,7 @@ import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.collection.set.SetUtil;
import org.dromara.hutool.core.comparator.CompareUtil;
import org.dromara.hutool.core.date.DateUnit;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Assert;
......@@ -31,7 +30,6 @@ import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.crypto.SecureUtil;
import org.dromara.hutool.http.client.HttpDownloader;
import org.dromara.hutool.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Scheduled;
......@@ -52,6 +50,9 @@ import vion.vo.*;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -360,7 +361,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName, TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = fileUrl + FileUtil.FILE_SEPARATOR + "contract" + FileUtil.FILE_SEPARATOR + contract.getId() + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
try {
......@@ -432,7 +433,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
.between(ArrayUtil.isAllNotNull(dto.getSignDateStart(), dto.getSignDateEnd()), Contract::getSignDate, dto.getSignDateStart(), dto.getSignDateEnd())
.list();
if (CollUtil.isEmpty(contractList)) {
return new JSONObject();
return Map.of();
}
Map<Long, List<ContractPayment>> id2PaymentMap = Opt.ofEmptyAble(contractPaymentService
......@@ -441,7 +442,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
.map(list -> list.stream().collect(Collectors.groupingBy(ContractPayment::getContractId)))
.orElse(MapUtil.empty());
if (MapUtil.isEmpty(id2PaymentMap)) {
return new JSONObject();
return Map.of();
}
List<FinancialAgeVO> financialAgeVOList = new ArrayList<>();
......@@ -452,7 +453,8 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
}
BigDecimal totalAmount = c.getTotalAmount();
BigDecimal paidAmount = c.getPaidAmount();
Map<Integer, Date> type2DateMap = contractPaymentList.stream().filter(cp -> cp.getPaymentType() <= c.getStatus()).collect(HashMap::new, (m, v) -> m.put(v.getPaymentType(), v.getPaymentDate()), HashMap::putAll);
Map<Integer, LocalDate> type2DateMap =
contractPaymentList.stream().filter(cp -> cp.getPaymentType() <= c.getStatus()).collect(HashMap::new, (m, v) -> m.put(v.getPaymentType(), v.getPaymentDate()), HashMap::putAll);
Map<Integer, BigDecimal> type2AmountMap = contractPaymentList.stream().filter(cp -> cp.getPaymentType() <= c.getStatus()).collect(Collectors.toMap(ContractPayment::getPaymentType, v -> NumberUtil.mul(v.getPaymentRatio(), totalAmount)));
TreeMap<Integer, BigDecimal> sortMap = MapUtil.sort(type2AmountMap, Comparator.comparingInt(Integer::intValue));
......@@ -475,7 +477,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
Opt.ofNullable(type2DateMap.get(type)).ifPresent(
date -> {
financialAgeVO.setPayableDate(date);
long age = DateUtil.between(date, new Date(), DateUnit.DAY, true);
long age = Math.abs(date.until(LocalDate.now(), ChronoUnit.DAYS));
financialAgeVO.setAge(((int) age));
}
);
......@@ -626,7 +628,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
ArrayNode jsonArray = jobO.path("result").withArray("list");
var fileList = StreamSupport.stream(jsonArray.spliterator(), false)
.map(v -> {
var fileArr = v.path("data").withArray("file_1");
var fileArr = JsonUtil.parseTree(v.path("data").path("file_1").asText());
var contractNo = v.path("data").path("serialNo").asText();
return (JsonNode) JsonUtil.createObj().put("contractNo", contractNo).set("fileArr", fileArr);
}).collect(Collectors.toList());
......@@ -839,7 +841,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
contract.getContractNo(), contract.getName(), applicantName, DateUtil.now());
contract.getContractNo(), contract.getName(), applicantName, TimeUtil.formatNormal(LocalDateTime.now()));
content.put("markdown", markdown);
var msg = JsonUtil.createObj().put("msgtype", "action_card").set("action_card", content);
......@@ -862,7 +864,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
contract.getContractNo(), contract.getName(), statusStr, DateUtil.formatDate(dto.getNodeDate()), DateUtil.now());
contract.getContractNo(), contract.getName(), statusStr, dto.getNodeDate(), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("text", markdown);
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
......@@ -1048,8 +1050,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
var result = jobj1.path("result");
var jsonObj1 = result.path("data");
Map<String, Integer> contractTypeMap = Db.list(Wrappers.lambdaQuery(Dictionary.class).eq(Dictionary::getType,
"contract_type"))
Map<String, Integer> contractTypeMap = Db.list(Wrappers.lambdaQuery(Dictionary.class).eq(Dictionary::getType, "contract_type"))
.stream()
.collect(Collectors.toMap(Dictionary::getValue, Dictionary::getKey));
......@@ -1057,9 +1058,9 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
xbongContract.setName(jsonObj1.path("text_14").asText());
xbongContract.setContractNo(jsonObj1.path("serialNo").asText());
xbongContract.setType(contractTypeMap.getOrDefault(jsonObj1.path("text_17").path("text").asText(), 0));
xbongContract.setSignDate(DateUtil.date(jsonObj1.path("date_1").asLong() * 1000).toJdkDate());
xbongContract.setMaintainSdate(Opt.ofNullable(jsonObj1.path("date_4")).filter(JsonNode::isNumber).map(sec -> DateUtil.date(sec.asLong() * 1000).toJdkDate()).orElse(null));
xbongContract.setMaintainEdate(Opt.ofNullable(jsonObj1.path("date_5")).filter(JsonNode::isNumber).map(sec -> DateUtil.date(sec.asLong() * 1000).toJdkDate()).orElse(null));
xbongContract.setSignDate(TimeUtil.of(jsonObj1.path("date_1").asLong() * 1000).toLocalDate());
xbongContract.setMaintainSdate(Opt.ofNullable(jsonObj1.path("date_4")).filter(JsonNode::isNumber).map(sec -> TimeUtil.of(sec.asLong() * 1000).toLocalDate()).orElse(null));
xbongContract.setMaintainEdate(Opt.ofNullable(jsonObj1.path("date_5")).filter(JsonNode::isNumber).map(sec -> TimeUtil.of(sec.asLong() * 1000).toLocalDate()).orElse(null));
String warrantyPeriod = jsonObj1.path("text_23").path("text").asText("");
if (StrUtil.isNotBlank(warrantyPeriod) && warrantyPeriod.contains("个月")) {
String substring = warrantyPeriod.substring(0, (warrantyPeriod.length() - 2));
......@@ -1074,7 +1075,7 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
if (!paymentForm.isEmpty()) {
paymentForm.forEach(pf -> {
var ratio = NumberUtil.div(BigDecimal.valueOf(Double.parseDouble(pf.path("text_1").asText())), 100);
var date = DateUtil.date(pf.path("date_1").asLong() * 1000);
var date = TimeUtil.of(pf.path("date_1").asLong() * 1000).toLocalDate();
var stage = pf.path("text_2").path("text").asText();
if (StrUtil.equals(stage, "预付款")) {
xbongContract.setSignRatio(ratio);
......@@ -1114,8 +1115,8 @@ public class ContractServiceImpl extends MPJBaseServiceImpl<ContractMapper, Cont
xbongContract.setSaleName(jsonObj1.path("text_8").path("name").asText());
xbongContract.setCreateUser(-1L);
xbongContract.setModifyUser(-1L);
xbongContract.setEntryTime(DateUtil.date(result.path("addTime").asLong() * 1000).toJdkDate());
xbongContract.setOriginalModTime(DateUtil.date(result.path("updateTime").asLong() * 1000).toJdkDate());
xbongContract.setEntryTime(TimeUtil.of(result.path("addTime").asLong() * 1000));
xbongContract.setOriginalModTime(TimeUtil.of(result.path("updateTime").asLong() * 1000));
var bongMap = BeanUtil.beanToMap(xbongContract, new HashMap<>(), copyOptions);
if (!mapEqual(platMap, bongMap)) {
......
......@@ -5,7 +5,7 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.text.StrUtil;
import org.redisson.api.RedissonClient;
......@@ -21,6 +21,7 @@ import vion.third.DingMod;
import vion.utils.JsonUtil;
import vion.vo.DeliverLogVO;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
......@@ -59,7 +60,7 @@ public class DeliverLogServiceImpl extends MPJBaseServiceImpl<DeliverLogMapper,
.ifPresent(rContractUser -> log.setContractSaleName(rContractUser.getUsername()))
);
return deliverLogList.stream().collect(Collectors.groupingBy(DeliverLogVO::getUsername,
Collectors.groupingBy(v -> DateUtil.formatDate(v.getLogDate()), () -> new TreeMap<String,
Collectors.groupingBy(v -> v.getLogDate().toString(), () -> new TreeMap<String,
List<DeliverLogVO>>(Comparator.reverseOrder()), Collectors.toList())));
}
......@@ -146,7 +147,7 @@ public class DeliverLogServiceImpl extends MPJBaseServiceImpl<DeliverLogMapper,
confederateName,
deliverLog.getLogHour(),
deliverLog.getContent(),
DateUtil.now()));
TimeUtil.formatNormal(LocalDateTime.now())));
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
jsonObj.set("msg", msg);
......@@ -164,7 +165,7 @@ public class DeliverLogServiceImpl extends MPJBaseServiceImpl<DeliverLogMapper,
### 项目交付日志提醒
#### 您的日志还未提交,请尽快提交!
#### 未提交日志日期:{}
#### 发送时间:{}""", dateStr, DateUtil.now()));
#### 发送时间:{}""", dateStr, TimeUtil.formatNormal(LocalDateTime.now())));
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
jsonObj.set("msg", msg);
......
......@@ -8,7 +8,7 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Opt;
......@@ -30,8 +30,8 @@ import vion.vo.UserVO;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -167,7 +167,7 @@ public class DeliveryRecordServiceImpl extends MPJBaseServiceImpl<DeliveryRecord
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
contract.getName(), contract.getContractNo(), rec.getCourierCompany(), rec.getTrackingNumber(), rec.getConsignee(), DateUtil.formatDate(rec.getShipDate()), DateUtil.now());
contract.getName(), contract.getContractNo(), rec.getCourierCompany(), rec.getTrackingNumber(), rec.getConsignee(), rec.getShipDate(), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("markdown", markdown).put("btn_orientation", "1");
var jsonArray = JsonUtil.createArr()
......@@ -191,7 +191,8 @@ public class DeliveryRecordServiceImpl extends MPJBaseServiceImpl<DeliveryRecord
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName,
TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = fileUrl + FileUtil.FILE_SEPARATOR + "delivery" + FileUtil.FILE_SEPARATOR + deliveryRecord.getId() + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
try {
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.DeviceLogMapper;
import vion.model.DeviceLog;
import vion.service.IDeviceLogService;
/**
* @author HlQ
* @date 2024/8/12
......
......@@ -8,7 +8,7 @@ import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.math.NumberUtil;
......@@ -31,6 +31,7 @@ import vion.vo.RoleVO;
import vion.vo.UserVO;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -187,7 +188,7 @@ public class InvoiceServiceImpl extends MPJBaseServiceImpl<InvoiceMapper, Invoic
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
contract.getContractNo(), contract.getName(), invoice.getInvoiceNo(), invoice.getInvoiceAmount(), DateUtil.formatDate(invoice.getInvoicingTime()), invoice.getRemark(), DateUtil.now());
contract.getContractNo(), contract.getName(), invoice.getInvoiceNo(), invoice.getInvoiceAmount(), invoice.getInvoicingTime(), invoice.getRemark(), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("text", markdown);
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
......
......@@ -8,7 +8,7 @@ import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.map.MapUtil;
......@@ -32,6 +32,7 @@ import vion.vo.RoleVO;
import vion.vo.UserVO;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -196,7 +197,7 @@ public class PaymentServiceImpl extends MPJBaseServiceImpl<PaymentMapper, Paymen
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
contract.getContractNo(), contract.getName(), payment.getPaymentAmount(), DateUtil.formatDate(payment.getCollectionTime()), payment.getRemark(), DateUtil.now());
contract.getContractNo(), contract.getName(), payment.getPaymentAmount(), payment.getCollectionTime(), payment.getRemark(), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("text", markdown);
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
......
......@@ -18,7 +18,7 @@ import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.data.id.IdUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Opt;
......@@ -44,6 +44,7 @@ import vion.vo.UserVO;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
......@@ -73,15 +74,14 @@ public class PointInfoServiceImpl extends MPJBaseServiceImpl<PointInfoMapper, Po
@Override
public Object frontSubmit(PointInfoDTO dto) {
Object obj = insRec(dto);
if (obj instanceof Map) {
Map<String, Long> map = (Map<String, Long>) obj;
if (obj instanceof Map map) {
Opt.ofNullable(new String[]{dto.getOpenid(), dto.getNickname()})
.filter(ArrayUtil::isAllNotNull)
.ifPresent(l -> {
String openid = l[0];
String nickname = l[1];
RPointWx pointWx = new RPointWx();
pointWx.setPointId(map.get("id"));
pointWx.setPointId((Long) map.get("id"));
pointWx.setOpenid(openid);
pointWx.setWxName(nickname);
pointWxService.save(pointWx);
......@@ -227,7 +227,7 @@ public class PointInfoServiceImpl extends MPJBaseServiceImpl<PointInfoMapper, Po
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName, TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = getPath(id, dto, filename);
File file = FileUtil.touch(path);
try {
......@@ -484,7 +484,7 @@ public class PointInfoServiceImpl extends MPJBaseServiceImpl<PointInfoMapper, Po
List<WxMpTemplateData> wxMpTemplateDataList = ListUtil.of(
new WxMpTemplateData("thing4", pointInfo.getProjectName()),
new WxMpTemplateData("phrase11", statusMap.get(pointInfo.getStatus())),
new WxMpTemplateData("time3", DateUtil.formatDateTime(new Date())),
new WxMpTemplateData("time3", TimeUtil.formatNormal(LocalDateTime.now())),
new WxMpTemplateData("thing18", content));
return wechatMod.sendMsg("IzPvAwx4zgXZmm4bwMc8Pka6piBK2sUf4zf9xA4hkNk", openid, wxMpTemplateDataList, StrUtil.format("{}?uuid={}", url, pointInfo.getUuid()));
}
......
package vion.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import vion.model.RContractProduct;
import org.springframework.stereotype.Service;
import vion.mapper.RContractProductMapper;
import vion.model.RContractProduct;
import vion.service.IRContractProductService;
/**
* @author HlQ
* @date 2024/3/26
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RContractStoreMapper;
import vion.model.RContractStore;
import vion.service.IRContractStoreService;
/**
* @author HlQ
* @date 2023/11/29
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RContractTeamMapper;
import vion.model.RContractTeam;
import vion.service.IRContractTeamService;
/**
* @author HlQ
* @date 2023/12/26
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RContractUserMapper;
import vion.model.RContractUser;
import vion.service.IRContractUserService;
/**
* @author HlQ
* @date 2023/12/28
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RPointDeviceMapper;
import vion.model.RPointDevice;
import vion.service.IRPointDeviceService;
/**
* @author HlQ
* @date 2024/1/12
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RPointWxMapper;
import vion.model.RPointWx;
import vion.service.IRPointWxService;
/**
* @author HlQ
* @date 2024/1/12
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RRepairDeviceMapper;
import vion.model.RRepairDevice;
import vion.service.IRRepairDeviceService;
/**
* @author HlQ
* @date 2024/1/25
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RRoleResourceMapper;
import vion.model.RRoleResource;
import vion.service.IRRoleResourceService;
/**
* @author HlQ
* @date 2023/11/28
......
package vion.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import vion.model.RStoreConfederate;
import org.springframework.stereotype.Service;
import vion.mapper.RStoreConfederateMapper;
import vion.model.RStoreConfederate;
import vion.service.IRStoreConfederateService;
@Service
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RStoreTagMapper;
import vion.model.RStoreTag;
import vion.service.IRStoreTagService;
/**
* @author HlQ
* @date 2024/1/30
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RStoreUserMapper;
import vion.model.RStoreUser;
import vion.service.IRStoreUserService;
/**
* @author HlQ
* @date 2023/12/27
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RUserRoleMapper;
import vion.model.RUserRole;
import vion.service.IRUserRoleService;
/**
* @author HlQ
* @date 2023/11/28
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.RejectInfoMapper;
import vion.model.RejectInfo;
import vion.service.IRejectInfoService;
/**
* @author HlQ
* @date 2024/1/8
......
......@@ -7,7 +7,7 @@ import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.data.id.IdUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Opt;
......@@ -29,8 +29,8 @@ import vion.vo.UserVO;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -99,7 +99,8 @@ public class RepairRecServiceImpl extends MPJBaseServiceImpl<RepairRecMapper, Re
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName,
TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path =
fileUrl + FileUtil.FILE_SEPARATOR + "repairRec" + FileUtil.FILE_SEPARATOR + id + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
......@@ -152,7 +153,7 @@ public class RepairRecServiceImpl extends MPJBaseServiceImpl<RepairRecMapper, Re
### 发送时间:{}
""", repairRecVO.getProjectName(), Opt.ofBlankAble(repairRecVO.getTrackingNumber()).orElse("暂无"),
deviceNoStr,
Opt.ofBlankAble(DateUtil.formatDate(repairRecVO.getShipDate())).orElse("暂无"), DateUtil.now());
Opt.ofBlankAble(repairRecVO.getShipDate().toString()).orElse("暂无"), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("text", text);
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
......
......@@ -5,7 +5,7 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.tree.MapTree;
......@@ -57,8 +57,8 @@ public class ResourceServiceImpl extends MPJBaseServiceImpl<ResourceMapper, Reso
.put("sortCode", v.getSortCode())
.put("type", v.getType())
.put("remark", v.getRemark())
.put("createTime", DateUtil.formatDateTime(v.getCreateTime()))
.put("updateTime", DateUtil.formatDateTime(v.getUpdateTime()))
.put("createTime", TimeUtil.formatNormal(v.getCreateTime()))
.put("updateTime", TimeUtil.formatNormal(v.getUpdateTime()))
.build();
node.setExtra(map);
nodeList.add(node);
......
package vion.service.impl;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.lang.Opt;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.Db;
......@@ -10,6 +7,9 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.lang.Opt;
import org.springframework.stereotype.Service;
import vion.dto.ServiceOrderDTO;
import vion.mapper.ServiceOrderMapper;
......
package vion.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import org.dromara.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseServiceImpl;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseServiceImpl;
import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -28,8 +28,8 @@ import vion.vo.UserVO;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
......@@ -125,7 +125,7 @@ public class SettlementDiffServiceImpl extends MPJBaseServiceImpl<SettlementDiff
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName, TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = fileUrl + FileUtil.FILE_SEPARATOR + "settlementDiff" + FileUtil.FILE_SEPARATOR + dto.getContractNo() + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
try {
......
......@@ -7,7 +7,7 @@ import io.github.linpeilie.Converter;
import lombok.RequiredArgsConstructor;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.data.id.IdUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Opt;
......@@ -29,8 +29,8 @@ import vion.vo.UserVO;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -94,7 +94,8 @@ public class SparePartServiceImpl extends MPJBaseServiceImpl<SparePartMapper, Sp
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName,
TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = fileUrl + FileUtil.FILE_SEPARATOR + "sparePart" + FileUtil.FILE_SEPARATOR + id + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
try {
......@@ -146,7 +147,7 @@ public class SparePartServiceImpl extends MPJBaseServiceImpl<SparePartMapper, Sp
### 发送时间:{}
""", sparePartVO.getProjectName(), Opt.ofBlankAble(sparePartVO.getTrackingNumber()).orElse("暂无"),
deviceNoStr,
Opt.ofBlankAble(DateUtil.formatDate(sparePartVO.getShipDate())).orElse("暂无"), DateUtil.now());
Opt.ofBlankAble(sparePartVO.getShipDate().toString()).orElse("暂无"), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("text", text);
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.StoreLogMapper;
import vion.model.StoreLog;
import vion.service.IStoreLogService;
/**
* @author HlQ
* @date 2023/12/27
......
......@@ -18,7 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Opt;
......@@ -52,6 +52,8 @@ import vion.vo.UserVO;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.*;
import java.util.function.Function;
......@@ -253,7 +255,7 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName, TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = fileUrl + FileUtil.FILE_SEPARATOR + statusDTO.getStoreId() + FileUtil.FILE_SEPARATOR + statusDTO.getSourceId() + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
try {
......@@ -315,11 +317,11 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
.filter(CollUtil::isNotEmpty)
.map(l -> l.getFirst().getNodeDate())
.ifPresent(masterContract::setFinalDate);
Date finalDate = masterContract.getFinalDate();
LocalDate finalDate = masterContract.getFinalDate();
if (ArrayUtil.isAllNotNull(finalDate, warrantyPeriod)) {
Date finalDateEnd = DateUtil.offsetMonth(finalDate, warrantyPeriod);
boolean isIn = DateUtil.isIn(new Date(), finalDate, finalDateEnd);
LocalDate finalDateEnd = finalDate.plusMonths(warrantyPeriod);
boolean isIn = TimeUtil.isIn(LocalDate.now(), finalDate, finalDateEnd);
if (isIn) {
s.setMaintainStatus("在保");
Store updStore = new Store();
......@@ -339,7 +341,7 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
.filter(contract -> ObjUtil.equals(contract.getType(), 1))
.map(Contract::getMaintainEdate)
.filter(Objects::nonNull)
.forEach(maintainEdate -> maintainStatusSet.add(DateUtil.compare(maintainEdate, new Date()) >= 0));
.forEach(maintainEdate -> maintainStatusSet.add(!maintainEdate.isBefore(LocalDate.now())));
s.setMaintainStatus(CollUtil.isEmpty(maintainStatusSet) ? s.getMaintainStatus() : maintainStatusSet.contains(true) ? "在保" : "脱保");
}
Store updStore = new Store();
......@@ -456,7 +458,7 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
### 提交日期:{}
### 内容:
> {}
""", storeVO.getName(), user.getUsername(), DateUtil.formatDate(storeLog.getLogDate()), logText);
""", storeVO.getName(), user.getUsername(), storeLog.getLogDate(), logText);
var markdown = JsonUtil.createObj()
.put("title", "项目日志提醒")
.put("text", text);
......@@ -476,7 +478,7 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
### 提交日期:{}
### 内容:
> {}
""", atUser, storeVO.getName(), user.getUsername(), DateUtil.formatDate(storeLog.getLogDate()), logText);
""", atUser, storeVO.getName(), user.getUsername(), storeLog.getLogDate(), logText);
markdown.put("text", text);
}
......@@ -653,8 +655,7 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
watermark.setText(user.getUsername() + "-" + user.getPhone());
watermark.setFont(new Font("SimSun", Font.PLAIN, 16));
WatermarkUtil.addWatermark(workbook, watermark);
AttachmentExportUtil.export(workbook, StrUtil.format("项目资料_{}", DateUtil.formatDateTime(new Date())),
response);
AttachmentExportUtil.export(workbook, StrUtil.format("项目资料_{}", TimeUtil.formatNormal(LocalDateTime.now())), response);
} catch (IOException e) {
throw new RuntimeException(e);
}
......@@ -694,7 +695,7 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
.put("title", "项目日志提醒")
.put("text", StrUtil.format("""
#### 项目:[{}]请及时提交日志
#### 发送时间:{}""", storeName, DateUtil.now()));
#### 发送时间:{}""", storeName, TimeUtil.formatNormal(LocalDateTime.now())));
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
jsonObj.set("msg", msg);
......@@ -723,7 +724,7 @@ public class StoreServiceImpl extends MPJBaseServiceImpl<StoreMapper, Store> imp
#### 资料名称:
{}
#### 发送时间:{}""", storeName, contractNo, userVO.getUsername(), sourceName, fileNameStr,
DateUtil.now()));
TimeUtil.formatNormal(LocalDateTime.now())));
var msg = JsonUtil.createObj().put("msgtype", "markdown").set("markdown", content);
jsonObj.set("msg", msg);
......
......@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import vion.mapper.TagMapper;
import vion.model.Tag;
import vion.service.ITagService;
/**
* @author HlQ
* @date 2024/1/30
......
......@@ -13,7 +13,7 @@ import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.collection.set.SetUtil;
import org.dromara.hutool.core.data.MaskingUtil;
import org.dromara.hutool.core.data.id.IdUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Assert;
......@@ -43,6 +43,8 @@ import vion.vo.UserVO;
import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
......@@ -344,7 +346,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
List<WxMpTemplateData> wxMpTemplateDataList = ListUtil.of(
new WxMpTemplateData("character_string21", existTask.getUuid()),
new WxMpTemplateData("thing12", MaskingUtil.chineseName(user.getUsername())),
new WxMpTemplateData("time11", DateUtil.formatDateTime(new Date())),
new WxMpTemplateData("time11", TimeUtil.formatNormal(LocalDateTime.now())),
new WxMpTemplateData("thing20", existTask.getFaultDescription().length() > 20 ? StrUtil.sub(existTask.getFaultDescription(), 0, 17) + "..." : existTask.getFaultDescription()),
new WxMpTemplateData("phrase25", statusMap.get(existTask.getStatus())));
String sentMsg = wechatMod.sendMsg("H3zWJysLWrcxrUlrgqPnjDV7LyWLaml_Ap9WsLuQDCs", openid, wxMpTemplateDataList, null);
......@@ -366,7 +368,8 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName,
TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = fileUrl + FileUtil.FILE_SEPARATOR + task.getStoreId() + FileUtil.FILE_SEPARATOR + task.getId() + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
try {
......@@ -410,7 +413,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
FaultLog faultLog = new FaultLog();
faultLog.setOperator(vo.getActiveUser());
faultLog.setContent("工单正在处理中");
faultLog.setCreateTime(new Date());
faultLog.setCreateTime(LocalDateTime.now());
vo.getFaultLogList().add(faultLog);
}
return vo;
......@@ -442,7 +445,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
}
@Override
public List<Map<String, Object>> peopleAnalysis(Date startDate, Date endDate, Integer source, List<Long> userIds) {
public List<Map<String, Object>> peopleAnalysis(LocalDate startDate, LocalDate endDate, Integer source, List<Long> userIds) {
List<Task> taskList = this.lambdaQuery()
.between(ArrayUtil.isAllNotNull(startDate, endDate), Task::getRepairTime, startDate, endDate)
.isNotNull(ObjUtil.equals(source, 1), Task::getTaskTempId)
......@@ -469,7 +472,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
var hourSum = list.stream().mapToDouble(v -> taskId2HourMap.getOrDefault(v.getId(), 0D)).sum();
var inList = list.stream().filter(v -> v.getStatus().equals(2)).toList();
var expList = inList.stream().filter(v -> v.getExpDate().after(new Date())).toList();
var expList = inList.stream().filter(v -> v.getExpDate().isAfter(LocalDate.now())).toList();
var finishList = taskList.stream().filter(t -> user2TaskIdMap.getOrDefault(p, List.of()).contains(t.getId())).toList();
var storeIdSet = list.stream().map(Task::getStoreId).collect(Collectors.toSet());
var storeNameList = storeList.stream().filter(v -> storeIdSet.contains(v.getId())).distinct().map(Store::getName).collect(Collectors.joining(","));
......@@ -488,7 +491,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
}
@Override
public List<Map<String, Object>> proAnalysis(Date startDate, Date endDate, Integer source, List<Long> userIds) {
public List<Map<String, Object>> proAnalysis(LocalDate startDate, LocalDate endDate, Integer source, List<Long> userIds) {
List<Task> taskList = this.lambdaQuery()
.between(ArrayUtil.isAllNotNull(startDate, endDate), Task::getRepairTime, startDate, endDate)
.isNotNull(ObjUtil.equals(source, 1), Task::getTaskTempId)
......@@ -508,7 +511,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
var hourSum = list.stream().mapToDouble(v -> taskId2HourMap.getOrDefault(v.getId(), 0D)).sum();
var inList = list.stream().filter(v -> v.getStatus().equals(2)).toList();
var expList = inList.stream().filter(v -> v.getExpDate().after(new Date())).toList();
var expList = inList.stream().filter(v -> v.getExpDate().isAfter(LocalDate.now())).toList();
var finishList = list.stream().filter(v -> v.getStatus().equals(3)).toList();
var userSet = list.stream().map(Task::getActiveUser).distinct().map(id2UsernameMap::get).collect(Collectors.joining(","));
Map<String, Object> cntMap = Map.of("name", storeId2NameMap.get(p),
......@@ -525,7 +528,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
}
@Override
public Map<String, Map<String, List<Task>>> summaryAnalysis(Date startDate, Date endDate, Integer source) {
public Map<String, Map<String, List<Task>>> summaryAnalysis(LocalDate startDate, LocalDate endDate, Integer source) {
Map<Long, String> id2UsernameMap = userService.list().stream().collect(Collectors.toMap(User::getId, User::getUsername));
Map<Long, String> id2StoreNameMap = storeService.list().stream().collect(Collectors.toMap(Store::getId, Store::getName));
......@@ -564,7 +567,8 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
storeName, task.getUuid(), task.getRepairPeople(), task.getRepairPhone(), orderStatusMap.get(task.getStatus()), task.getFaultDescription(), DateUtil.now());
storeName, task.getUuid(), task.getRepairPeople(), task.getRepairPhone(),
orderStatusMap.get(task.getStatus()), task.getFaultDescription(), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("markdown", markdown).put("btn_orientation", "1");
var jsonArray = JsonUtil.createArr()
......@@ -593,7 +597,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
storeName, task.getRepairPeople(), task.getRepairPhone(), task.getFaultDescription(), DateUtil.now());
storeName, task.getRepairPeople(), task.getRepairPhone(), task.getFaultDescription(), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("markdown", markdown).put("btn_orientation", "1");
var jsonArray = JsonUtil.createArr()
......@@ -624,7 +628,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
storeName, task.getUuid(), task.getRepairPeople(), task.getRepairPhone(), orderStatusMap.get(task.getStatus()), task.getFaultDescription(), DateUtil.now());
storeName, task.getUuid(), task.getRepairPeople(), task.getRepairPhone(), orderStatusMap.get(task.getStatus()), task.getFaultDescription(), TimeUtil.formatNormal(LocalDateTime.now()));
content.put("markdown", markdown).put("btn_orientation", "1");
var jsonArray = JsonUtil.createArr()
......@@ -657,7 +661,7 @@ public class TaskServiceImpl extends MPJBaseServiceImpl<TaskMapper, Task> implem
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
storeName, task.getUuid(), task.getRepairPeople(), task.getRepairPhone(), orderStatusMap.get(task.getStatus()), remark, DateUtil.now());
storeName, task.getUuid(), task.getRepairPeople(), task.getRepairPhone(), orderStatusMap.get(task.getStatus()), remark, TimeUtil.formatNormal(LocalDateTime.now()));
content.put("markdown", markdown).put("btn_orientation", "1");
var jsonArray = JsonUtil.createArr()
......
......@@ -12,7 +12,7 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.bean.BeanUtil;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.TimeUtil;
import org.dromara.hutool.core.io.file.FileNameUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Opt;
......@@ -35,8 +35,8 @@ import vion.vo.TaskTempVO;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
......@@ -94,7 +94,7 @@ public class TaskTempServiceImpl extends MPJBaseServiceImpl<TaskTempMapper, Task
String orgName = infile.getOriginalFilename();
String mainName = FileNameUtil.mainName(orgName);
String fileExt = FileNameUtil.extName(orgName);
String filename = StrUtil.format("{}_{}.{}", mainName, DateUtil.format(new Date(), "yyyyMMdd_HHmmssSSS"), fileExt);
String filename = StrUtil.format("{}_{}.{}", mainName, TimeUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS"), fileExt);
String path = fileUrl + FileUtil.FILE_SEPARATOR + 0 + FileUtil.FILE_SEPARATOR + taskTemp.getId() + FileUtil.FILE_SEPARATOR + filename;
File file = FileUtil.touch(path);
try {
......@@ -164,7 +164,7 @@ public class TaskTempServiceImpl extends MPJBaseServiceImpl<TaskTempMapper, Task
#### 发送时间:{}
""";
String markdown = StrUtil.format(template,
taskTemp.getStoreName(), taskTemp.getRepairPeople(), taskTemp.getRepairPhone(), taskTemp.getFaultDescription(), DateUtil.now());
taskTemp.getStoreName(), taskTemp.getRepairPeople(), taskTemp.getRepairPhone(), taskTemp.getFaultDescription(), TimeUtil.formatNormal(LocalDateTime.now()));
var content = JsonUtil.createObj()
.put("title", "客户提交工单,请及时处理哦~_~")
.put("markdown", markdown).put("btn_orientation", "1");
......
......@@ -28,6 +28,7 @@ import vion.service.IUserService;
import vion.vo.RoleVO;
import vion.vo.UserVO;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -103,7 +104,7 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
@Override
public void syncUser() {
Opt.ofEmptyAble(this.list())
Opt.ofEmptyAble(this.lambdaQuery().ge(User::getModifyTime, LocalDate.now()).list())
.ifPresent(l -> l.forEach(user -> {
redissonClient.getBucket(RedisKeyEnum.DING_PREFIX.getVal() + RedisKeyEnum.USER_ID.getVal() + user.getId()).set(user);
redissonClient.getBucket(RedisKeyEnum.DING_PREFIX.getVal() + RedisKeyEnum.USER_NAME.getVal() + user.getUsername()).set(user);
......
......@@ -109,8 +109,8 @@ public class DingMod {
jsonNode.path("result").withArray("data_list")
.forEach(v -> userIdList.add(v.asText()));
Long nextCursor = jsonNode.path("result").path("next_cursor").asLong();
if (ObjUtil.isNotNull(nextCursor)) {
long nextCursor = jsonNode.path("result").path("next_cursor").asLong(-1L);
if (nextCursor > 0) {
offset = nextCursor;
} else {
flag = false;
......
......@@ -45,7 +45,7 @@ public class AttachmentExportUtil {
private static void clear(Workbook workbook) {
if (workbook instanceof SXSSFWorkbook) {
((SXSSFWorkbook)workbook).dispose();
((SXSSFWorkbook) workbook).dispose();
}
try {
......
......@@ -4,7 +4,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
public class ConstructionTeamVO {
......@@ -21,8 +22,8 @@ public class ConstructionTeamVO {
private String city;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -5,7 +5,8 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 合同收款方式
......@@ -34,13 +35,13 @@ public class ContractPaymentVO {
* 收款日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date paymentDate;
private LocalDate paymentDate;
/**
* 节点日期,指合同到这一阶段时的时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date nodeDate;
private LocalDate nodeDate;
/**
* 创建者
......@@ -56,11 +57,11 @@ public class ContractPaymentVO {
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
}
\ No newline at end of file
......@@ -10,7 +10,8 @@ import vion.model.ContractPayment;
import vion.model.RContractProduct;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -42,21 +43,21 @@ public class ContractVO {
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ExcelColumn(order = 4, title = "签订日期", format = "yyyy-MM-dd")
private Date signDate;
private LocalDate signDate;
/**
* 合同维保开始日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ExcelColumn(order = 5, title = "维保开始日期", format = "yyyy-MM-dd")
private Date maintainSdate;
private LocalDate maintainSdate;
/**
* 合同维保结束日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ExcelColumn(order = 6, title = "维保结束日期", format = "yyyy-MM-dd")
private Date maintainEdate;
private LocalDate maintainEdate;
/**
* 合同进度:1-签订 2-到货 3-系统验收(初验) 4-项目验收(终验) 5-质保 6-第一笔维保款 7-第二笔维保款 8-第三笔维保款 9-维保进度款 10-维保验收款
......@@ -131,13 +132,13 @@ public class ContractVO {
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
/**
* 合同质保周期(月)
......@@ -148,7 +149,7 @@ public class ContractVO {
* 终验日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date finalDate;
private LocalDate finalDate;
/**
* 财务状态
......@@ -170,7 +171,7 @@ public class ContractVO {
* 录入时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date entryTime;
private LocalDateTime entryTime;
/**
* 合同关联的项目名
......
......@@ -5,7 +5,8 @@ import lombok.Getter;
import lombok.Setter;
import vion.model.RContractUser;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -41,7 +42,7 @@ public class DeliverLogVO {
* 日志日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date logDate;
private LocalDate logDate;
/**
* 干系人
......@@ -68,11 +69,11 @@ public class DeliverLogVO {
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -5,7 +5,8 @@ import lombok.Getter;
import lombok.Setter;
import vion.model.FileInfo;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -48,13 +49,13 @@ public class DeliveryRecordVO {
* 发货日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date shipDate;
private LocalDate shipDate;
/**
* 到货签收日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date signDate;
private LocalDate signDate;
/**
* 快递公司
......@@ -80,13 +81,13 @@ public class DeliveryRecordVO {
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
private List<FileInfo> fileList;
......
......@@ -5,7 +5,8 @@ import lombok.Getter;
import lombok.Setter;
import vion.model.DeviceLog;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -57,7 +58,7 @@ public class DeviceVO {
* 入库日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date recDate;
private LocalDate recDate;
/**
* 备注
......@@ -65,10 +66,10 @@ public class DeviceVO {
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
private List<DeviceLog> logList;
}
\ No newline at end of file
......@@ -5,38 +5,64 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
public class FileInfoVO {
private Long id;
/** 门店id */
/**
* 门店id
*/
private Long storeId;
/** 文件扩展名 */
/**
* 文件扩展名
*/
private String type;
/** 文件来源 */
/**
* 文件来源
*/
private Integer sourceType;
/** 文件来源id */
/**
* 文件来源id
*/
private Long sourceId;
/** 合同id */
/**
* 合同id
*/
private Long contractId;
/** 合同编号 */
/**
* 合同编号
*/
private String contractNo;
/** 合同名称 */
/**
* 合同名称
*/
private String contractName;
/** 文件名称 */
/**
* 文件名称
*/
private String name;
/** 文件地址 */
/**
* 文件地址
*/
@JsonIgnore
private String url;
/** 创建时间 */
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/** 备注 */
private LocalDateTime createTime;
/**
* 备注
*/
private String remark;
/** sha256 */
/**
* sha256
*/
private String sha256;
/** 上传人 */
/**
* 上传人
*/
private String uploader;
}
......@@ -5,7 +5,7 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
/**
* @author HlQ
......@@ -16,13 +16,21 @@ import java.util.Date;
public class FinancialAgeVO {
private String contractNo;
private String contractName;
/** 账款类型 */
/**
* 账款类型
*/
private Integer status;
/** 账款金额 */
/**
* 账款金额
*/
private BigDecimal amount;
/** 应付日期 */
/**
* 应付日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date payableDate;
/** 财龄 */
private LocalDate payableDate;
/**
* 财龄
*/
private Integer age;
}
......@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -44,7 +44,7 @@ public class FormVO {
* 签字时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date signTime;
private LocalDateTime signTime;
/**
* 唯一uuid
......@@ -66,8 +66,8 @@ public class FormVO {
private Long updateUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -4,7 +4,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -15,37 +16,59 @@ public class InspectVO {
private Long storeId;
/** 巡检时间 */
/**
* 巡检时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date inspectDate;
private LocalDate inspectDate;
/** 巡检方式(0远程、1现场) */
/**
* 巡检方式(0远程、1现场)
*/
private Integer type;
/** 状态(0进行中、1待审核、2已完成、3、驳回) */
/**
* 状态(0进行中、1待审核、2已完成、3、驳回)
*/
private Integer status;
/** 巡检人 */
/**
* 巡检人
*/
private Integer inspectUser;
/** 审核人 */
/**
* 审核人
*/
private Integer reviewer;
/** 巡检时间 */
/**
* 巡检时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date finishDate;
private LocalDate finishDate;
/** 审核时间 */
/**
* 审核时间
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date auditDate;
private LocalDate auditDate;
/** 创建时间 */
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 修改时间 */
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
/** 备注 */
private LocalDateTime modifyTime;
/**
* 备注
*/
private String remark;
/** 集团id */
/**
* 集团id
*/
private Long accountId;
private String accountName;
......
......@@ -7,7 +7,8 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Getter
......@@ -27,7 +28,7 @@ public class InvoiceVO {
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ExcelColumn(order = 1, title = "开票时间", format = "yyyy-MM-dd")
private Date invoicingTime;
private LocalDate invoicingTime;
/**
* 发票金额
......@@ -55,8 +56,8 @@ public class InvoiceVO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ExcelColumn(order = 6, title = "录入时间")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -7,7 +7,8 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -32,7 +33,7 @@ public class PaymentVO {
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@ExcelColumn(order = 2, title = "收款时间", format = "yyyy-MM-dd")
private Date collectionTime;
private LocalDate collectionTime;
/**
* 收款金额
......@@ -47,8 +48,8 @@ public class PaymentVO {
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import lombok.Setter;
import vion.model.FileInfo;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -234,18 +234,22 @@ public class PointInfoVO {
*/
private String uuid;
/** 绑定单子的微信昵称列表 */
/**
* 绑定单子的微信昵称列表
*/
private List<String> wxNameList;
/** 单子施工后的设备序列号列表 */
/**
* 单子施工后的设备序列号列表
*/
private List<String> deviceNoList;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
/**
* 客户上传的图纸文件
......
......@@ -5,7 +5,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -16,16 +17,22 @@ public class RContractTeamVO {
* 合同id
*/
private Long contractId;
/** 合同编号 */
/**
* 合同编号
*/
private String contractNo;
/** 合同名称 */
/**
* 合同名称
*/
private String contractName;
/**
* 施工队id
*/
private Long ctId;
/** 施工队名称 */
/**
* 施工队名称
*/
private String teamName;
/**
......@@ -42,13 +49,13 @@ public class RContractTeamVO {
* 分配日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date assignDate;
private LocalDate assignDate;
/**
* 完成日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date finishDate;
private LocalDate finishDate;
/**
* 施工状态
......@@ -72,10 +79,10 @@ public class RContractTeamVO {
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
private Integer contractStatus;
}
\ No newline at end of file
......@@ -5,7 +5,8 @@ import lombok.Getter;
import lombok.Setter;
import vion.model.RRepairDevice;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -102,7 +103,7 @@ public class RepairRecVO {
* 发货日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date shipDate;
private LocalDate shipDate;
/**
* 快递公司
......@@ -132,10 +133,10 @@ public class RepairRecVO {
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
private List<RRepairDevice> repairDeviceList;
......
......@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -55,12 +55,16 @@ public class ResourceVO {
*/
private String remark;
/** 创建时间 */
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
}
\ No newline at end of file
......@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -19,9 +19,9 @@ public class RoleVO {
private Integer status;
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
private Long userId;
}
......@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.time.LocalDateTime;
/**
* @author HlQ
......@@ -15,68 +15,108 @@ import java.util.Date;
public class ServiceOrderVO {
private String projectName;
/** 报修人 */
/**
* 报修人
*/
private String submitter;
/** 报修人手机号码 */
/**
* 报修人手机号码
*/
private String submitPhone;
/** 报修时间 */
/**
* 报修时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitTime;
private LocalDateTime submitTime;
/** 维修人 */
/**
* 维修人
*/
private String repairPeople;
/** 维修人手机号码*/
/**
* 维修人手机号码
*/
private String repairPhone;
/** 部门 */
/**
* 部门
*/
private String dept;
/** 服务方式(1.电话支持 2.远程服务 3.现场服务) */
/**
* 服务方式(1.电话支持 2.远程服务 3.现场服务)
*/
private String serviceType;
/** 耗时 */
/**
* 耗时
*/
private Double time;
/** 故障内容 */
/**
* 故障内容
*/
private String faultContent;
/** 维修结果 */
/**
* 维修结果
*/
private String repairRes;
/** 客户评价 */
/**
* 客户评价
*/
private String review;
/** 工单id */
/**
* 工单id
*/
private Long taskId;
/** 服务单状态 */
/**
* 服务单状态
*/
private Integer state;
/** 创建时间 */
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
/** 更新时间 */
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
/** 五星好评 */
/**
* 五星好评
*/
private Integer stars;
/** 签字图片base64 */
/**
* 签字图片base64
*/
private String signPic;
/** 签字时间 */
/**
* 签字时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date signTime;
private LocalDateTime signTime;
/** 完成时间 */
/**
* 完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date finishTime;
private LocalDateTime finishTime;
/** 唯一id */
/**
* 唯一id
*/
private String unid;
}
......@@ -5,7 +5,7 @@ import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -51,5 +51,5 @@ public class SettlementDiffVO {
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
}
\ No newline at end of file
......@@ -8,7 +8,8 @@ import lombok.Getter;
import lombok.Setter;
import vion.model.RRepairDevice;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -95,7 +96,7 @@ public class SparePartVO {
* 发货日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date shipDate;
private LocalDate shipDate;
/**
* 快递公司
......@@ -127,14 +128,16 @@ public class SparePartVO {
*/
private String uuid;
/** 微信用户id */
/**
* 微信用户id
*/
private String openid;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private LocalDateTime updateTime;
private List<RRepairDevice> repairDeviceList;
......
......@@ -5,7 +5,8 @@ import lombok.Getter;
import lombok.Setter;
import vion.model.StoreLog;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -45,15 +46,15 @@ public class StoreVO {
*/
private Integer modifyUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
/**
* 立项日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date estDate;
private LocalDate estDate;
/**
* 备注
*/
......@@ -89,7 +90,7 @@ public class StoreVO {
* 实际完成日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date finishDate;
private LocalDate finishDate;
/**
* 完成百分比
*/
......@@ -112,7 +113,7 @@ public class StoreVO {
* 计划完成日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date planFinishDate;
private LocalDate planFinishDate;
/**
* 项目规模
......
......@@ -6,7 +6,7 @@ import lombok.Setter;
import vion.model.FileInfo;
import vion.model.Task;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -32,7 +32,7 @@ public class TaskTempVO {
* 报修时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date repairTime;
private LocalDateTime repairTime;
/**
* 故障说明
*/
......@@ -50,9 +50,9 @@ public class TaskTempVO {
*/
private Integer status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
private String remark;
/**
* 工程师姓名
......
......@@ -11,7 +11,8 @@ import vion.model.FaultLog;
import vion.model.FileInfo;
import vion.model.ServiceOrder;
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -41,7 +42,7 @@ public class TaskVO {
*/
@ExcelColumn(order = 5, title = "提交时间", format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date repairTime;
private LocalDateTime repairTime;
/**
* 故障类型
*/
......@@ -71,7 +72,7 @@ public class TaskVO {
* 解决日期
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date solveDate;
private LocalDate solveDate;
/**
* 故障原因
*/
......@@ -98,11 +99,11 @@ public class TaskVO {
*/
@ExcelColumn(order = 8, title = "截止日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date expDate;
private LocalDate expDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
/**
* 备注
*/
......
......@@ -5,7 +5,7 @@ import lombok.Getter;
import lombok.Setter;
import vion.model.Resource;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
@Getter
......@@ -17,15 +17,19 @@ public class UserVO {
private String phone;
private Long deptId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
private LocalDateTime modifyTime;
private String remark;
/** 是否是预工单处理人 0:不是 1:是 */
/**
* 是否是预工单处理人 0:不是 1:是
*/
private Integer preWorkOrder;
/** 员工状态 2:试用期 3:正式 5:待离职 -1:无状态 */
/**
* 员工状态 2:试用期 3:正式 5:待离职 -1:无状态
*/
private Integer employeeStatus;
/* 状态 0:正常 1:禁用 */
......@@ -33,7 +37,9 @@ public class UserVO {
private String token;
/** 权限码列表 */
/**
* 权限码列表
*/
private List<Resource> resourceList;
private List<RoleVO> roleVOList;
......
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8" />
</head>
<title>绑定成功</title>
<style>
.center{
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8"/>
</head>
<title>绑定成功</title>
<style>
.center {
line-height: 200px;
height: 100%;
text-align: center;
}
.center p {
line-height: 1.5;
display: inline-block;
vertical-align: middle;
font-size: 6rem;
}
</style>
<body>
<div class="center">
</style>
<body>
<div class="center">
<p>绑定成功</p>
</div>
</body>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8" />
</head>
<title>绑定失败</title>
<style>
.center{
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8"/>
</head>
<title>绑定失败</title>
<style>
.center {
line-height: 200px;
height: 100%;
text-align: center;
}
.center p {
line-height: 1.5;
display: inline-block;
vertical-align: middle;
font-size: 6rem;
}
</style>
<body>
<div class="center">
</style>
<body>
<div class="center">
<p>绑定失败</p>
</div>
</body>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8" />
</head>
<title>绑定成功</title>
<style>
.center{
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8"/>
</head>
<title>绑定成功</title>
<style>
.center {
/*line-height: 200px;*/
height: auto;
text-align: center;
}
.center p {
line-height: 1.5;
display: inline-block;
vertical-align: middle;
font-size: 3rem;
}
.center img {
width: 30rem;
height: 100%;
}
</style>
<body >
<div class="center">
</style>
<body>
<div class="center">
<p>关注工单失败!<br>请先关注【VION智慧门店】公众号,<br>再扫工单二维码以接收工单信息提醒。</p>
</div>
<div class="center">
<img src="data:image/jpeg;base64,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" alt="VION智慧门店"/>
</div>
<div class="center">
</div>
<div class="center">
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAECAQIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACikzRmgBaKTNGaAFopM0ZFAC0UmaM0ALRSZFGaAFopM0Z4oAWikzRQAtFJketGaAFooooAKKKSgBaKTI9aKAFopKMj1oAWikzRmgBaKTNGaAFooooAKKKKACkPIpaQ9KAPyA/b0/bz+OvwV/ax8deDfBnjn+xvDem/Yfstl/ZFhP5fmWFvK/zywM5y8jnljjOBwAK8A/4ejftO/wDRTP8AygaX/wDI1L/wVH/5Ps+Jv/cM/wDTXaV+6fxS+Kfhj4LeBNT8ZeMtT/sfw3pvlfar37PLP5fmSpEnyRKznLyIOFOM5PAJoA/Cv/h6N+07/wBFM/8AKBpf/wAjUf8AD0b9p3/opn/lA0v/AORq/VY/8FRf2YwcH4lnP/YA1T/5GpP+Hov7Mf8A0Uw/+CDVP/kagD8qv+Ho37Tv/RTP/KBpf/yNX3//AMEpv2ovid+0p/wtH/hY/ib/AISL+xf7L+wf6Ba2vk+d9r8z/URJuz5Uf3s428Yyc+rf8FR/+TE/ib/3DP8A06WlfKn/AAQy4/4XZ/3BP/b+gDlP29P28/jr8Ff2sfHXg3wZ45/sbw3pv2H7LZf2RYT+X5lhbyv88sDOcvI55Y4zgcACvAP+Ho37Tv8A0Uz/AMoGl/8AyNXv/wC3p+wZ8dfjV+1j468ZeDPA39s+G9S+w/Zb3+17CDzPLsLeJ/klnVxh43HKjOMjgg0fsF/sGfHX4K/tY+BfGXjPwN/Y3hvTft32q9/tewn8vzLC4iT5Ip2c5eRBwpxnJ4BNAH0B/wAEpv2ovid+0p/wtH/hY/ib/hIv7F/sv7B/oFra+T532vzP9REm7PlR/ezjbxjJz8//ALen7efx1+Cv7WPjrwb4M8c/2N4b037D9lsv7IsJ/L8ywt5X+eWBnOXkc8scZwOABXV/8FzOf+FJ4/6jf/thXWfsFft5/Ar4LfsneBfBvjPxwdG8Sab9u+1WX9kX8/l+Zf3EqfPFAyHKSIeGOM4PIIoA8o/YL/bz+Ovxq/ax8C+DfGfjn+2fDepfbvtVl/ZFhB5nl2FxKnzxQK4w8aHhhnGDwSK/X/Hy4r8gP2C/2DPjr8Ff2sfAvjLxn4G/sbw3pv277Ve/2vYT+X5lhcRJ8kU7OcvIg4U4zk8Amv1/yAue1AH5Aft6ft5/HX4K/tY+OvBvgzxz/Y3hvTfsP2Wy/siwn8vzLC3lf55YGc5eRzyxxnA4AFfoB+3r8UfE/wAF/wBk7xz4y8G6n/Y3iTTPsP2S9+zxT+X5l/bxP8kqshykjjlTjORyAaX4o/t6fAr4L+OtT8G+MvHB0bxJpvlfarL+yL+fy/MiSVPnigZDlJEPDHGcHBBFfmr+y3+y58Tv2L/jt4Z+Mnxk8M/8Id8N/DX2r+1da+32t99m+0WstrD+5tZZZn3TXESfIhxuycKCQAeU/wDD0X9pwcD4mcf9gDS//kaj/h6N+07/ANFM/wDKBpf/AMjV9Vftz/8AGyf/AIQn/hnH/i4v/CF/bf7e/wCYX9j+1/Z/s3/H95Hmb/stx/q923Z82Ny5+Vf+HXP7Tv8A0TP/AMr+l/8AyTQB+/8ARX4rfst/sufE79i/47eGfjJ8ZPDP/CHfDfw19q/tXWvt9rffZvtFrLaw/ubWWWZ901xEnyIcbsnCgkeqftz/APGyf/hCf+Gcf+Li/wDCF/bf7e/5hf2P7X9n+zf8f3keZv8Astx/q923Z82Ny5AP1Vr5/wD29fij4n+C/wCyd458ZeDdT/sbxJpn2H7Je/Z4p/L8y/t4n+SVWQ5SRxypxnI5ANfkB/w65/ad/wCiZ/8Alf0v/wCSa/X/APb1+F3if40fsneOfBvg3TP7Z8San9h+yWX2iKDzPLv7eV/nlZUGEjc8sM4wOSBQB+QH/D0X9pzGP+FmcdMf2Bpf/wAjV+v/AOwV8UfE/wAaP2TvA3jLxlqf9s+JNT+3fa737PFB5nl39xEnyRKqDCRoOFGcZPJJr8LPjl+y38Tv2bf7EPxG8M/8I6Na8/7B/p9rded5Pl+Z/qJX2482P72M7uM4OP0q/YK/bz+BXwW/ZO8C+DfGfjg6N4k037d9qsv7Iv5/L8y/uJU+eKBkOUkQ8McZweQRQB9U/t6/FHxP8F/2TvHPjLwbqf8AY3iTTPsP2S9+zxT+X5l/bxP8kqshykjjlTjORyAa/ID/AIei/tODgfEzj/sAaX/8jV+qv/BUf/kxP4m/9wz/ANOlpXyp/wAEMjj/AIXYT0H9if8At/QB8q/8PRv2nf8Aopn/AJQNL/8Akaj/AIejftO/9FM/8oGl/wDyNX7AfFH9vT4FfBfx1qfg3xl44OjeJNN8r7VZf2Rfz+X5kSSp88UDIcpIh4Y4zg4IIrlP+Hov7Mf/AEUw/wDgg1T/AORqAPyq/wCHo37Tv/RTP/KBpf8A8jUf8PRv2nf+imf+UDS//kav2p+Bv7Unwx/aT/tsfDjxN/wkX9i+R9v/ANAurXyfO8zyv9fEm7PlSfdzjbzjIz+K/wDwVH/5Ps+Jv/cM/wDTXaUAfv8AUUUUAFFFFABSHpS0h6UAfgF/wVH/AOT7Pib/ANwz/wBNdpX6qf8ABUf/AJMU+Jn/AHDP/TnaV+Vf/BUf/k+z4m/9wz/012lfqp/wVH/5MT+Jv/cM/wDTpaUAfgDmjNFFAH7/AH/BUf8A5MT+Jv8A3DP/AE6WlfKn/BDL/mtn/cE/9v6+q/8AgqP/AMmJ/E3/ALhn/p0tK+VP+CGX/NbP+4J/7f0Aeq/tRf8ABVr/AIZr+Ovib4cf8Ku/4SP+xfsv/Ey/4SD7L53nWsU/+q+yvtx5u37xztzxnA+/+K/AL/gqP/yfZ8Tf+4Z/6a7Sk/4ejftO/wDRTP8AygaX/wDI1AH6qftzfsM/8NonwT/xW3/CHf8ACNfbf+YV9u+0faPs/wD03i2bfs/vnd2xz8rf8OMv+q2f+Wp/9218qf8AD0b9p3/opn/lA0v/AORqP+Ho37Tv/RTP/KBpf/yNQB+/3FB6e1fkB+wX+3n8dfjV+1j4F8G+M/HP9s+G9S+3farL+yLCDzPLsLiVPnigVxh40PDDOMHgkV+v+PlxQB8AftRf8Epv+Gk/jr4m+I//AAtH/hHP7a+zf8Sz/hH/ALV5Pk2sUH+t+1Juz5W77oxuxzjJ+qv2o/gYP2k/gV4m+HP9tjw7/bX2X/iZ/ZPtXk+TdRT/AOq3puz5W37wxuzzjB/NX9vT9vP46/BX9rHx14N8GeOf7G8N6b9h+y2X9kWE/l+ZYW8r/PLAznLyOeWOM4HAAo/YL/bz+Ovxq/ax8C+DfGfjn+2fDepfbvtVl/ZFhB5nl2FxKnzxQK4w8aHhhnGDwSKAOrz/AMOXuT/xeL/hZX/cD/s7+z//AAJ83zPt/wDsbfK/i3fKf8Pzf+qJ/wDl1/8A3FR/wXN4HwT/AO43/wC2FflZQB+qf/Dc/wDw8n/4xx/4Qn/hXX/Caf8AMy/2r/an2P7J/p//AB7eTD5m/wCyeX/rF2793O3afqr9hn9hr/hi/wD4TY/8Jt/wmP8Awkv2H/mFfYfs/wBn+0f9N5d+77R7Y2988fhb8Lfil4n+C3jvTPGXg3U/7G8Sab5v2W98iKfy/MieJ/klVkOUkccqcZyOQDXvw/4Ki/tOAYHxMwP+wBpf/wAjUAfv9x7V+Vf/AA/N/wCqJ/8Al1//AHFXyr/w9G/ad/6KZ/5QNL/+Rq+VqAPqr9ub9ub/AIbQ/wCEJx4J/wCEO/4Rr7b/AMxX7d9p+0fZ/wDpjFs2/Z/fO7tjn5VzRRQB+/3/AAVH/wCTE/ib/wBwz/06WlfKn/BDL/mtn/cE/wDb+vqv/gqP/wAmJ/E3/uGf+nS0r5U/4IZf81s/7gn/ALf0AfK3/BUbj9uv4mf9wz/02WlfKua+qv8AgqP/AMn2fE3/ALhn/prtK+VaAP1T/wCCGX/NbP8AuCf+39fK3/BUf/k+z4m/9wz/ANNdpX1T/wAEMv8Amtn/AHBP/b+vlb/gqP8A8n2fE3/uGf8AprtKAP3+ooooAKKKKACkPSlpD0oA/AL/AIKj/wDJ9nxN/wC4Z/6a7Sv1U/4ei/sx/wDRTD/4INU/+Rq8p/ai/wCCUv8Aw0p8dfE3xH/4Wj/wjn9tfZf+Jb/wj/2ryfJtYoP9b9qTdnyt33RjdjnGT5X/AMOMv+q2f+Wp/wDdtAH1V/w9F/Zj/wCimH/wQap/8jUf8PRf2Y/+imH/AMEGqf8AyNXyof8Aghnj/mtn/lqf/dtL/wAOMv8Aqtn/AJan/wB20AdX+3r+3n8CvjT+yd468G+DPHB1nxJqX2H7LZf2RfweZ5d/byv88sCoMJG55YZxgckCuU/4IZjH/C7P+4J/7f0f8OMv+q2f+Wp/9219U/sMfsM/8MXnxt/xW3/CY/8ACS/Yv+YT9h+z/Z/tH/TeXfu8/wBsbe+eAD8rP+Co/wDyfZ8Tf+4Z/wCmu0r1X9lv9lz4nfsX/Hbwz8ZPjJ4Z/wCEO+G/hr7V/autfb7W++zfaLWW1h/c2sssz7priJPkQ43ZOFBI+qf2ov8AglL/AMNKfHXxN8R/+Fo/8I5/bX2X/iW/8I/9q8nybWKD/W/ak3Z8rd90Y3Y5xk+rf8FRh/xgp8TP+4Z/6c7SgD5U/bo/42TDwT/wzl/xcT/hC/t39vf8wv7H9r+z/Zv+P3yfM3/ZLj/V7tuz5sblz+a/xS+Fvif4LeO9T8G+MtM/sbxJpvlfarLz4p/L8yJJU+eJmQ5SRDwxxnB5BFfpT/wQz/5rZn/qCf8At/Xyp/wVG/5Pr+Jv/cM/9NlpQB+6nxS+Kfhj4LeBNT8ZeMtT/sfw3pvlfar37PLP5fmSpEnyRKznLyIOFOM5PAJr81v26B/w8mPgn/hnL/i4h8F/bv7e/wCYX9j+1/Z/s3/H95Pmb/slx/q923Z82Ny5+qv+Co3/ACYp8TP+4Z/6c7Svyr/YZ/bl/wCGL/8AhNs+Cf8AhMf+El+xf8xX7D9m+z/aP+mMu/d9o9sbe+eAD7//AGW/2o/hj+xf8CfDPwb+Mnib/hDviR4a+1f2rov9n3V99m+0XUt1D++tYpYX3Q3ET/I5xuwcMCB+avxR/YL+OvwW8C6n4y8Z+Bxo3hvTfK+1Xv8Aa9hP5fmSpEnyRTs5y8iDhTjOTgAmuV/aj+Of/DSfx18TfEf+xP8AhHP7a+y/8Sz7X9q8nybWKD/W7E3Z8rd90Y3Y5xk/VX7UX/BVoftJ/ArxN8OP+FXf8I5/bX2X/iZ/8JB9q8nybqKf/VfZU3Z8rb94Y3Z5xggHyr8Dv2W/if8AtI/23/wrnwz/AMJD/Yvk/b839ra+T53meX/r5U3Z8qT7ucbecZGeV+KXwt8T/Bbx3qfg3xlpn9jeJNN8r7VZefFP5fmRJKnzxMyHKSIeGOM4PIIr9KP+CGmP+L2Z/wCoJ/7f18rf8FRh/wAZ1/EzH/UM/wDTZaUAeq/st/sufE79i/47eGfjJ8ZPDP8Awh3w38Nfav7V1r7fa332b7Ray2sP7m1llmfdNcRJ8iHG7JwoJH6p/A39qT4YftJDW/8AhXPib/hIv7F8j7f/AKBdWvk+d5nl/wCviTdnypPu5xt5xkZX9qP4Gf8ADSfwK8TfDn+2v+Ed/tr7L/xM/sn2ryfJuop/9VvTdnytv3hjdnnGD8AH/jS/1/4vF/wsn/uB/wBnf2f/AOBPm+Z9v/2NvlfxbvlAPtX4o/t6fAr4L+OtT8G+MvHB0bxJpvlfarL+yL+fy/MiSVPnigZDlJEPDHGcHBBFcp/wVH/5MT+Jv/cM/wDTpaV+K37Ufxz/AOGk/jr4m+I40Q+Hf7a+y/8AEs+1/avJ8m1ig/1uxN2fK3fdGN2OcZP7U/8ABUbn9hT4mf8AcM/9OdpQB+K3wN/Zc+J37SQ1s/Dnwz/wkQ0XyPt+b+1tfJ87zPL/ANfKm7PlSfdzjbzjIzyvxS+Fvif4LeO9T8G+MtM/sbxJpvlfarLz4p/L8yJJU+eJmQ5SRDwxxnB5BFfpR/wQz/5rZn/qCf8At/Xqv7UX/BKX/hpT46+JviP/AMLR/wCEc/tr7N/xLf8AhH/tXk+TaxQf637Um7PlbvujG7HOMkA9W/4Kj/8AJifxN/7hn/p0tK+AP+CUv7UXwx/Zr/4Wj/wsfxN/wjv9tf2X9g/0C6uvO8n7X5v+oifbjzY/vYzu4zg4/VT9qP4Gf8NJ/ArxN8OP7b/4R3+2vsv/ABMvsn2ryfJuop/9VvTdnytv3hjdnnGD+f8A/wAOM8cf8Lsx/wByp/8AdtAH1X/w9F/Zj/6KYf8AwQap/wDI1H/D0X9mP/oph/8ABBqn/wAjV8q/8OMv+q2f+Wp/920f8OM/+q2f+Wp/920AfVX/AA9F/ZjPA+JZz/2ANU/+Rq/ID9vX4o+GPjR+1j458ZeDdT/tjw3qf2H7Je/Z5YPM8uwt4n+SVVcYeNxyozjI4INfan/DjP8A6rZ/5an/AN20f8OMv+q2f+Wp/wDdtAH6q0UUUAFFFFABRRSE4BJ6CgBaK8A+KP7enwK+C/jrU/BvjLxwdG8Sab5X2qy/si/n8vzIklT54oGQ5SRDwxxnBwQRXKf8PRf2Y/8Aoph/8EGqf/I1AHlP/BVv9qL4nfs2f8KvHw58Tf8ACOjWv7U+3/6Ba3XneT9k8v8A18T7cebJ93Gd3OcDH0B+wV8UfE/xo/ZO8DeMvGWp/wBs+JNT+3fa737PFB5nl39xEnyRKqDCRoOFGcZPJJr81v8Agq3+1F8Mf2lP+FXf8K48Tf8ACRf2L/an2/8A0C6tfJ877J5X+viTdnypPu5xt5xkZ+AKAP6KP29fij4n+C/7J3jnxl4N1P8AsbxJpn2H7Je/Z4p/L8y/t4n+SVWQ5SRxypxnI5ANfP8A/wAEpP2ovid+0n/wtAfEbxN/wkQ0X+y/sH+gWtr5Pnfa/M/1ESbs+VH97ONvGMnP2r8Uvin4Y+C3gTU/GXjLU/7H8N6b5X2q9+zyz+X5kqRJ8kSs5y8iDhTjOTwCa5T4HftSfDH9pH+2/wDhXPib/hIf7F8n7fmwurXyfN8zy/8AXxJuz5Un3c4284yMgHq1cp8UvhZ4Y+NPgTU/BvjLTP7Y8N6l5X2qy+0SweZ5cqSp88TK4w8aHhhnGDwSK8r+KP7enwK+C/jrU/BvjLxwdG8Sab5X2qy/si/n8vzIklT54oGQ5SRDwxxnBwQRXKf8FR/+TE/ib/3DP/TpaUAeqfA39lz4Y/s2nWz8OfDP/COnWvJ+35v7q687yfM8v/Xyvtx5sn3cZ3c5wMfiv/wVH/5Ps+Jv/cM/9NdpX1T/AMEMjj/hdhPQf2J/7f19rfFH9vT4FfBfx1qfg3xl44OjeJNN8r7VZf2Rfz+X5kSSp88UDIcpIh4Y4zg4IIoA/FX4o/t6fHX40+BdT8G+M/HA1nw3qXlfarL+yLCDzPLlSVPnigVxh40PDDOMHIJFfQH/AASl/Ze+GX7Sh+KJ+I/hn/hIjov9lmwP2+6tfJ877X5n+olTdnyo/vZxt4xk5/amvz//AOCrf7LvxO/aT/4Vefhz4Z/4SIaL/an2/wD0+1tfJ877J5f+vlTdnypPu5xt5xkZAPzW/b1+F3hj4L/tY+OfBvg3TP7H8N6Z9h+yWX2iWfy/MsLeV/nlZnOXkc8scZwOABXgFdX8Uvhb4n+C3jvU/BvjLTP7G8Sab5X2qy8+Kfy/MiSVPniZkOUkQ8McZweQRX37+wX+wZ8dfgr+1j4F8ZeM/A39jeG9N+3far3+17Cfy/MsLiJPkinZzl5EHCnGcngE0AfFnwM/ak+J37Ng1sfDjxN/wjv9teR9v/0C1uvO8nzPK/18T7cebJ93Gd3OcDH6qfst/sufDH9tD4E+GfjJ8ZPDP/CY/EjxL9q/tXWv7QurH7T9nupbWH9zayxQptht4k+RBnbk5Yklv/BVr9l34nftJj4XH4ceGf8AhIhov9qfb/8AT7W18nzvsnl/6+VN2fKk+7nG3nGRn8g/il8LfE/wW8d6n4N8ZaZ/Y3iTTfK+1WXnxT+X5kSSp88TMhykiHhjjODyCKAP6fa8p+Of7Lfwx/aTOiH4j+Gf+Ei/sXz/ALB/p91a+T53l+b/AKiVN2fKj+9nG3jGTn81f2C/2DPjr8Ff2sfAvjLxn4G/sbw3pv277Ve/2vYT+X5lhcRJ8kU7OcvIg4U4zk8Amv0q+OX7Ufwx/Zt/sQfEbxN/wjp1rz/sH+gXV153k+X5n+oifbjzY/vYzu4zg4APK/8Ah11+zH/0TM/+D/VP/kmvyA+KP7enx1+NPgXU/BvjPxwNZ8N6l5X2qy/siwg8zy5UlT54oFcYeNDwwzjByCRR+3r8UfDHxo/ax8c+MvBup/2x4b1P7D9kvfs8sHmeXYW8T/JKquMPG45UZxkcEGuq/wCHXP7Tv/RM/wDyv6X/APJNAHlfwN/ak+J/7N39t/8ACufE3/CO/wBteT9v/wBAtbrzvJ8zy/8AXxPtx5sn3cZ3c5wMfun+wV8UfE/xo/ZO8DeMvGWp/wBs+JNT+3fa737PFB5nl39xEnyRKqDCRoOFGcZPJJr5/wD+CUv7LvxO/Zq/4WifiP4Z/wCEcGtf2X9g/wBPtbrzvJ+1+b/qJX2482P72M7uM4OPoH4o/t6fAr4L+OtT8G+MvHB0bxJpvlfarL+yL+fy/MiSVPnigZDlJEPDHGcHBBFAHv8AX5//APBVv9qP4nfs1n4Xf8K48Tf8I7/bX9qfb/8AQLW687yfsnlf6+J9uPNk+7jO7nOBj7V+KXxT8MfBbwJqfjLxlqf9j+G9N8r7Ve/Z5Z/L8yVIk+SJWc5eRBwpxnJ4BNeAn/gqL+zGDg/Es5/7AGqf/I1AH5U/8PRv2nf+imf+UDS//kavf/2C/wBvP46/Gr9rHwL4N8Z+Of7Z8N6l9u+1WX9kWEHmeXYXEqfPFArjDxoeGGcYPBIr7W/4ei/sx/8ARTD/AOCDVP8A5Gr8gPij+wX8dfgt4F1Pxl4z8DjRvDem+V9qvf7XsJ/L8yVIk+SKdnOXkQcKcZycAE0AfpT/AMFWf2ovid+zX/wq7/hXHib/AIR3+2v7U+3/AOgWt153k/ZPL/18T7cebJ93Gd3OcDHwB/w9G/ad/wCimf8AlA0v/wCRq8r+B37LfxP/AGkf7b/4Vz4Z/wCEh/sXyft+b+1tfJ87zPL/ANfKm7PlSfdzjbzjIzyvxS+Fvif4LeO9T8G+MtM/sbxJpvlfarLz4p/L8yJJU+eJmQ5SRDwxxnB5BFAH9PtFFFABRRRQAUh6UtIelAH4Bf8ABUbj9uv4mf8AcM/9NlpXyrmvqr/gqP8A8n2fE3/uGf8AprtK+VaAPqr9hn9hr/htEeNv+K2/4Q7/AIRr7D/zCvt32n7R9o/6bRbNvke+d3bHPlX7UfwM/wCGbPjr4m+HA1r/AISL+xfsv/Ez+yfZfO861in/ANVvfbjzdv3jnbnjOB9/f8EMhkfGwHp/xJP/AG/r7W+KP7BfwK+NHjrU/GXjLwOdZ8Sal5X2q9/te/g8zy4kiT5Ip1QYSNBwozjJySTQB1P7UnwM/wCGk/gV4m+HP9t/8I7/AG19l/4mf2T7V5Pk3UU/+q3puz5W37wxuzzjB+AM/wDDl/8A6rF/wsn/ALgf9nf2f/4E+b5n2/8A2Nvlfxbvl+1f29fij4n+C/7J3jnxl4N1P+xvEmmfYfsl79nin8vzL+3if5JVZDlJHHKnGcjkA1+Fnxz/AGo/id+0kNEHxG8Tf8JENF8/7B/oFra+T53l+Z/qIk3Z8qP72cbeMZOQA/aj+Of/AA0n8dfE3xHGi/8ACO/219l/4ln2v7V5Pk2sUH+t2Juz5W77oxuxzjJ+q/2ov+CrX/DSnwK8TfDg/C7/AIRz+2vsv/Ey/wCEg+1eT5N1FP8A6r7Km7PlbfvDG7POMH8/6/f7/h11+zH/ANEzP/g/1T/5JoA+VP8Aghnx/wALs/7gn/t/Xqv7UX/BKb/hpP46+JviP/wtH/hHP7a+zf8AEs/4R/7V5Pk2sUH+t+1Juz5W77oxuxzjJ+qvgb+y38MP2bP7b/4Vz4Z/4R3+2vI+3/6fdXXneT5nlf6+V9uPNk+7jO7nOBj81f29P28/jr8Ff2sfHXg3wZ45/sbw3pv2H7LZf2RYT+X5lhbyv88sDOcvI55Y4zgcACgD9K/2o/jn/wAM2fArxN8Rv7F/4SL+xfsv/Es+1/ZfO866ig/1ux9uPN3fdOduOM5H5/n/AILl54PwT5/7Gv8A+4q8r/Zb/aj+J37aHx28M/Bv4yeJv+Ex+G/iX7V/aui/YLWx+0/Z7WW6h/fWsUUybZreJ/kcZ24OVJB+/wAf8Euv2Y+D/wAK0Of+w/qn/wAk0AfKv/DC/wDw8n/4yO/4Tb/hXX/Caf8AMtf2V/an2P7J/oH/AB8+dD5m/wCyeZ/q1279vO3cfVP2Xf8Agqz/AMNJ/HXwz8OP+FXf8I5/bX2n/iZ/8JB9q8nybWWf/VfZU3Z8rb94Y3Z5xg/avwt+Fnhj4LeBNM8G+DdM/sfw3pvm/ZbL7RLP5fmSvK/zysznLyOeWOM4HAAr4r/ak/Zc+GP7F/wJ8TfGT4N+Gf8AhDviR4a+y/2VrX9oXV99m+0XUVrN+5upZYX3Q3EqfOhxuyMMAQAffvGPWvgH9qL/AIJS/wDDSnx18TfEf/haP/COf219l/4lv/CP/avJ8m1ig/1v2pN2fK3fdGN2OcZJ/wAEpv2ovid+0p/wtH/hY/ib/hIv7F/sv7B/oFra+T532vzP9REm7PlR/ezjbxjJz8//ALen7efx1+Cv7WPjrwb4M8c/2N4b037D9lsv7IsJ/L8ywt5X+eWBnOXkc8scZwOABQB+lX7Ufxy/4Zs+BXib4j/2J/wkX9i/Zf8AiW/a/svneddRQf63Y+3Hm7vunO3HGcj4AB/4fQj/AKI7/wAK2/7jn9o/2h/4DeV5f2D/AG93m/w7fm+q/wDgqP8A8mJ/E3/uGf8Ap0tK+VP+CGQz/wALsB6H+xP/AG/oA+Af2o/gZ/wzb8dfE3w5/tv/AISL+xfsv/Ez+yfZfO861in/ANVvfbjzdv3jnbnjOB+qf7Lv/BVr/hpT46+Gfhx/wq7/AIRz+2vtX/Ey/wCEg+1eT5NrLP8A6r7Km7PlbfvDG7POMH6B+KP7BfwK+NHjrU/GXjLwOdZ8Sal5X2q9/te/g8zy4kiT5Ip1QYSNBwozjJySTX5Af8EuP+T7Phl/3E//AE13dAH6pftzfty/8MXf8IT/AMUT/wAJj/wkv27/AJi32H7P9n+z/wDTCXfu8/2xt754+V/+GGP+Hk//ABkd/wAJt/wrr/hNP+Za/sr+1Psf2T/QP+PnzofM3/ZPM/1a7d+3nbuKf8Fzf+aJ/wDcb/8AbCvqv/glx/yYn8Mv+4n/AOnS7oA9U/ak+Bn/AA0n8CvE3w5/tv8A4R3+2vsv/Ez+yfavJ8m6in/1W9N2fK2/eGN2ecYP4r/tzfsNf8MX/wDCE/8AFbf8Jj/wkv23/mFfYfs32f7P/wBN5d+7z/bG3vnj9fv29fij4n+C/wCyd458ZeDdT/sbxJpn2H7Je/Z4p/L8y/t4n+SVWQ5SRxypxnI5ANfhZ8cv2o/id+0kNEHxG8Tf8JENF8/7B/oFra+T53l+Z/qIk3Z8qP72cbeMZOQD6r/Zd/4JS/8ADSnwK8M/EcfFH/hHP7a+1f8AEt/4R/7V5Pk3UsH+t+1Juz5W77oxuxzjJ/VL9qP4GD9pP4FeJvhx/bY8O/219l/4mf2T7V5Pk3UU/wDqt6bs+Vt+8Mbs84wfK/8Aglx/yYn8Mv8AuJ/+nS7r8qv+Ho37Tv8A0Uz/AMoGl/8AyNQB+qf7DP7DP/DF/wDwm3/Fbf8ACY/8JJ9i/wCYT9h+zfZ/tH/TeXfu8/2xt754/Kz/AIKjf8n1/E3/ALhn/pstK+//APglL+1H8Tv2lP8AhaP/AAsfxN/wkX9i/wBl/YP9AtbXyfO+1+b/AKiJN2fKj+9nG3jGTn4B/wCCo/8AyfZ8Tf8AuGf+mu0oA/f6iiigAooooAKQ9KWkPSgD8Av+Co//ACfZ8Tf+4Z/6a7Sv1+/b1+F3if40fsneOfBvg3TP7Z8San9h+yWX2iKDzPLv7eV/nlZUGEjc8sM4wOSBX5A/8FRuf26/iZ/3DP8A02WlftR+1H8c/wDhm34FeJviN/Yn/CRf2L9l/wCJZ9r+y+d511FB/rdj7cebu+6c7ccZyAD8Vv8Ah11+04eR8M+P+w/pf/yTR/w65/ad/wCiZ/8Alf0v/wCSa+qv+H5nb/hSf/l1/wD3FX3/APsufHMftJ/Arwz8R/7EHh3+2vtX/Es+1/avJ8m6lg/1uxN2fK3fdGN2OcZIB+Fn7BXxR8MfBf8Aax8DeMvGWp/2P4b0z7d9rvfs8s/l+ZYXESfJErOcvIg4U4zk8Amv1/8A+Hov7MY4PxLOf+wBqn/yNXyr/wAOMsf81s/8tT/7tpP+HGf/AFW3/wAtT/7toA+q/wDh6L+zH/0Uw/8Agg1T/wCRq/Kv/glx/wAn2fDL/uJ/+mu7r6q/4cZ/9Vs/8tT/AO7aP+GGP+Ha/wDxkd/wm3/Cxf8AhC/+Za/sn+y/tn2z/QP+PnzpvL2fa/M/1bbtm3jduAB6p/wVa/Zc+J37Sn/Crv8AhXHhn/hIv7F/tT7f/p9ra+T532Tyv9fKm7PlSfdzjbzjIyv7Lf7Ufwx/Yv8AgT4Z+Dfxk8Tf8Id8SPDX2r+1dF/s+6vvs32i6luof31rFLC+6G4if5HON2DhgQPU/wBhn9uX/htH/hNv+KJ/4Q//AIRr7F/zFvt32n7R9o/6YxbNvke+d3bHP5W/8FRuP26/iZ/3DP8A02WlAFvR/wDglb+0tqOqW1rceA7bSoJpAj3t3rtg0MAJ5dxFM7kD/ZVj6A19Nt/wR28DeF9DW68V/Gma1liwlzPFpkcNvHIf4QXlb1xyQTjoM4H6c+N/EFt4X8J6vq15K1vaWVu880qfeRAPmI98ZxX5U/E/4ua18WPFFxquqTstsGK2dgrfurSLPyoq+uOp6k19lw3w3Vz+rK0uWnDd779EfK59nsMmpxfLzTlsv1Z9wfs36/8ACf8AZw+DHh74dWHxIsdatdG+0bL24KxvJ5tzLOcquQMGUj6CvTR+0V8Nj08ZaWf+2v8A9avyshnz1NX4J+gJr9HfhzhF/wAv5fcj84nx/jI7UI/ez6w/bL+E/wAIf2yf+EPOq/FaLw5/wjn2zyvscSzed9o8jO7djGPIGMf3jXpn7N+qfC39nH4L+Hfh3YfEK01m00b7RsvrnEcknm3Es5yoyBgykfhXwlBN71eimDDFZy8O8Kv+X8vuRyS8RcbH/lxH72fqJoPxQ8KeJ0lbSddtNR8kbpPs77yg9WA6D3Nfm7/wW/0+51LQ/gxrNrC9xpUUuqwSXsY3RLJKtm8Slhxl1ikI9QjHtWfo+sXugajb6hp11LZ3kDB45oG2sp9jXuP7R3im1+MX/BPf4n3l9Ekl3aW0M08e35IrqOeJt8fpuwrcd3f1OfheIeFqmSwjXpz56bdtrNM+34Z4uhntR4erDkqJX01TXU/ML4XfsF/HX40+BdM8ZeDPA41nw3qXm/Zb3+17CDzPLleJ/klnVxh43HKjOMjIINH7BXxR8MfBf9rHwN4y8Zan/Y/hvTPt32u9+zyz+X5lhcRJ8kSs5y8iDhTjOTwCa/X/AP4Jdf8AJivwzz/1E/8A053dfgDzXwh+in6qftzj/h5MfBI/Zy/4uIfBf27+3v8AmF/Y/tf2f7N/x++T5m/7Jcf6vdt2fNjcufVf2W/2o/hj+xf8CfDPwb+Mnib/AIQ74keGvtX9q6L/AGfdX32b7RdS3UP761ilhfdDcRP8jnG7BwwIHwB+wz+3L/wxePG2fBP/AAmP/CS/Yv8AmLfYfs32f7R/0xl37vtHtjb3zx9Vf8MMf8PJ/wDjI7/hNv8AhXX/AAmn/Mtf2V/an2P7J/oH/Hz50Pmb/snmf6tdu/bzjcQDq/29f28/gV8af2TvHXg3wZ44Os+JNS+w/ZbL+yL+DzPLv7eV/nlgVBhI3PLDOMDkgV8//wDBKX9qL4Y/s1n4o/8ACx/E3/CO/wBtf2X9g/0C6uvO8n7X5n+oifbjzY/vYzu4zg49V/4cZf8AVbP/AC1P/u2vlb9ub9hn/hi//hCf+K2/4TH/AISX7b/zCfsP2f7P9n/6by7932j2xt754AP1T/4ei/sx/wDRTD/4INU/+Rq+AP2W/wBlz4nfsX/Hbwz8ZPjJ4Z/4Q74b+GvtX9q619vtb77N9otZbWH9zayyzPumuIk+RDjdk4UEhf2Xf+CUv/DSnwK8M/Ef/haP/COf219q/wCJZ/wj/wBq8nybqWD/AFv2pN2fK3fdGN2OcZP6pftR/Az/AIaT+BXib4c/22PDv9tfZf8AiZ/ZPtXk+TdRT/6rem7PlbfvDG7POMEA+AP26P8AjZMPBP8Awzl/xcT/AIQv7d/b3/ML+x/a/s/2b/j98nzN/wBkuP8AV7tuz5sblz+a/wAUvhb4n+C3jvU/BvjLTP7G8Sab5X2qy8+Kfy/MiSVPniZkOUkQ8McZweQRX6Uf8oYP+qxH4k/9wP8As7+z/wDwJ83zPt/+xt8r+Ld8q/8ADC//AA8n/wCMjv8AhNv+Fdf8Jp/zLX9lf2p9j+yf6B/x8+dD5m/7J5n+rXbv287dxAP1UooooAKKKKACkIyCD0NLSE4BJ6CgDwH4o/sF/Ar40eOtT8ZeMvA51nxJqXlfar3+17+DzPLiSJPkinVBhI0HCjOMnJJNfir8Uf29Pjr8afAup+DfGfjgaz4b1LyvtVl/ZFhB5nlypKnzxQK4w8aHhhnGDkEiv2q+KP7enwK+C/jrU/BvjLxwdG8Sab5X2qy/si/n8vzIklT54oGQ5SRDwxxnBwQRX5q/st/sufE79i/47eGfjJ8ZPDP/AAh3w38Nfav7V1r7fa332b7Ray2sP7m1llmfdNcRJ8iHG7JwoJAB8A7ju3d85r374Xft6fHX4LeBdM8G+DPHA0bw3pvm/ZbL+yLCfy/MleV/nlgZzl5HPLHGcDAAFfun8DP2o/hj+0n/AG2Phz4m/wCEi/sXyPt/+gXVr5PneZ5X+viTdnypPu5xt5xkZ/Ff/gqP/wAn2fE3/uGf+mu0oA/X79vX4o+J/gv+yd458ZeDdT/sbxJpn2H7Je/Z4p/L8y/t4n+SVWQ5SRxypxnI5ANfP3/BKX9qL4nftJj4oj4j+Jv+EiGi/wBl/YP9AtbXyfO+1+Z/qIk3Z8qP72cbeMZOftb4pfFPwx8FvAmp+MvGWp/2P4b03yvtV79nln8vzJUiT5IlZzl5EHCnGcngE14Cf+Cov7MYOD8Szn/sAap/8jUAfFH7en7efx1+Cv7WPjrwb4M8c/2N4b037D9lsv7IsJ/L8ywt5X+eWBnOXkc8scZwOABX2t/wVH/5MT+Jv/cM/wDTpaUf8PRf2Y/+imH/AMEGqf8AyNXgH7ev7efwK+NP7J3jrwb4M8cHWfEmpfYfstl/ZF/B5nl39vK/zywKgwkbnlhnGByQKAOT/wCCGX/NbP8AuCf+39fK3/BUf/k+z4m/9wz/ANNdpXlXwN/Zb+J/7SX9t/8ACufDP/CRf2L5H2//AE+1tfJ87zPK/wBfKm7PlSfdzjbzjIz+qn7Lf7Ufwx/Yv+BPhn4N/GTxN/wh3xI8Nfav7V0X+z7q++zfaLqW6h/fWsUsL7obiJ/kc43YOGBAAPqv9ppinwF8ekdtLkr8o7W2klgSbeqqzBFBJyTX6wftJoJPgV47RujaXID+Vfk7LcfZ57G0Ug+WVLe5Jr988OHbB4i38y/I/JeM6fPiKT8v1Ox8C/DnxD8Qtf8A7H8P6fLqN4AC5jGEjB6FmPCj3NfUHg39gHVZ0gl8S+Jrexzy9rp8JmYe3mMVAP8AwE19A/CDwboPwJ+D1tdXqxWDi0W/1W8f7zylQWBPcD7oH07mvF/F3xt8d/Hnw74gj8B6EtjoelTRTz3sl0Uu2VH8wbQrDBOw5UZ44znivOxfE2a5tWnDLmqVGLSc3bq7bvv0S1M6XD+WZfSjPHJ1KkldQX37L82djb/sI+BYYcSarr0rf3hPEP08uvmT4+/DC1+D3xAOh2N5NeWclrHdRPcAb1DFl2kjg8oTkAda+kfgf+2TaeO/EkfhvxLZQ6TqM7LHa3UDEwTOR9xgeUY9uSD7cVyP7fHhiG3v/DHiVMiedZLCX3C/On5bn/Sscjx2cYTO4YLNZytNOyeqel00zmz3LcpxWTzxeWU0nBq9tGu9z5fhm3cV6brjEfsB/HrB6QIR+cdeRwze9fav7Drb/Anin/r/AI//AEAV9TxzG2Ty/wAUfzPjeBoNZ5B/3ZfkfkB8L/29Pjr8FvAumeDfBvjkaN4b03zfstl/ZFhP5fmSvK/zywM5y8jnljjOBwAK/X7/AIddfsx/9EzP/g/1T/5Jr4o/bx/YL+Ovxp/au8ceMvBngcaz4b1L7B9lvf7XsIPM8uwt4n+SWdXGHjccqM4yOCDX2v8A8FR/+TE/ib/3DP8A06Wlfzif0yfAH/BVr9l34Y/s1/8ACrv+FceGf+Ed/tr+1Pt/+n3V153k/ZPK/wBfK+3HmyfdxndznAx9/wD/AAS4/wCTE/hl/wBxP/06XdfKn/BDL/mtn/cE/wDb+vlb/gqP/wAn2fE3/uGf+mu0oAT/AIejftO/9FM/8oGl/wDyNX1X+wuf+Hk58bH9o3/i4h8F/Yf7B/5hf2P7X9o+0/8AHj5Hmb/slv8A6zdt2fLjc2fyrr9U/wDghlwPjZ/3BP8A2/oA/Sr4W/Czwx8FvAmmeDfBumf2P4b03zfstl9oln8vzJXlf55WZzl5HPLHGcDgAV+Ff/D0b9p3/opn/lA0v/5Gr3/9vT9gz46/Gr9rHx14y8GeBv7Z8N6l9h+y3v8Aa9hB5nl2FvE/ySzq4w8bjlRnGRwQa/NegD9VP2Fz/wAPJz42P7Rv/FxD4L+w/wBg/wDML+x/a/tH2n/jx8jzN/2S3/1m7bs+XG5s/pT8LfhZ4Y+C3gTTPBvg3TP7H8N6b5v2Wy+0Sz+X5kryv88rM5y8jnljjOBwAK/IH/glJ+1F8Mf2bP8AhaP/AAsbxN/wjv8AbX9l/YP9AurrzvJ+1+Z/qIn2482P72M7uM4OPn/9vX4o+GPjR+1j458ZeDdT/tjw3qf2H7Je/Z5YPM8uwt4n+SVVcYeNxyozjI4INAH9FNFFFABRRRQAUh6UtIeRQB8AftRf8Epv+Gk/jr4m+I//AAtH/hHP7a+zf8Sz/hH/ALV5Pk2sUH+t+1Juz5W77oxuxzjJ+Vv2ov8Agqz/AMNJ/ArxN8OP+FXf8I5/bX2X/iZ/8JB9q8nybqKf/VfZU3Z8rb94Y3Z5xg9T+3p+3n8dfgr+1j468G+DPHP9jeG9N+w/ZbL+yLCfy/MsLeV/nlgZzl5HPLHGcDgAV9rf8Ouv2Y/+iZn/AMH+qf8AyTQB+Vn7DX7c3/DF/wDwm3/FE/8ACY/8JL9i/wCYt9h+zfZ/tH/TCXfu+0e2NvfPH1Sf2GP+Hk5/4aO/4Tb/AIV1/wAJp/zLX9lf2p9j+yf6B/x8+dD5m/7J5n+rXbv287dx8q/4KtfsvfDH9mo/C4/Djwz/AMI6da/tT7f/AKfdXXneT9k8r/Xyvtx5sn3cZ3c5wMfP/wALv29Pjr8FvAumeDfBnjgaN4b03zfstl/ZFhP5fmSvK/zywM5y8jnljjOBgACgD90/2pPgZ/w0n8CvE3w5/tv/AIR3+2vsv/Ez+yfavJ8m6in/ANVvTdnytv3hjdnnGD+K/wC3L+w1/wAMX/8ACE/8Vt/wmP8Awkv23/mFfYfs32f7P/03l37vP9sbe+eP1+/b1+KPif4L/sneOfGXg3U/7G8SaZ9h+yXv2eKfy/Mv7eJ/klVkOUkccqcZyOQDX4WfHL9qT4n/ALSP9if8LG8Tf8JF/YvnfYP9AtbXyfO8vzP9REm7PlR/ezjbxjJyAfVX7Lv/AASl/wCGk/gV4Z+I/wDwtH/hHP7a+1f8Sz/hH/tXk+TdSwf637Um7PlbvujG7HOMn5V/Zc+Bn/DSfx18M/Dg62fDv9tfav8AiZfZPtXk+Tayz/6rem7PlbfvDG7POMHqvhd+3p8dfgt4F0zwb4M8cDRvDem+b9lsv7IsJ/L8yV5X+eWBnOXkc8scZwMAAV+1Xwu/YL+BXwX8daZ4y8G+Bzo3iTTfN+y3v9r38/l+ZE8T/JLOyHKSOOVOM5GCAaAPik/8aX/+qxf8LK/7gf8AZ39n/wDgT5vmfb/9jb5X8W75fgH9qP45/wDDSfx18TfEcaIfDv8AbX2X/iWfa/tXk+TaxQf63Ym7PlbvujG7HOMn7+/4LmfL/wAKSx2/tv8A9sK6z9gr9gz4FfGn9k7wL4y8Z+BzrPiTUvt32q9/te/g8zy7+4iT5Ip1QYSNBwozjJ5JNAHd+B/2zf8Ahsf9lb40awPCH/CIf2JafZfJ/tP7b52+Mtuz5Me3GMYwa+G9PK3M8cbPsDnbu9K9L/4J2nH7Ff7SR9ov/RD15Bb3JVlIOCOa/oTw0ipYHEr+8v8A0k/L+LY3xFJ+X6n6AftOfEHxR4r+AXhKKLSAnhfUrexnuteS5Vg84jctAYR8ww6A7s4yAK5H9lPwNqXivSNfsNJ8Ral4ettQ0ue31P7VBiB5SWELRMGByEOSDg43YODx237Hmv6V8a/g9q/w41do5brTJUvrRZAGCoXDr8ueQsoO4dCJAO9H7RXibxv4Z+IWleI/Evw+tb3wvptvNYRRpcNcWjtMDH5rEKNpYso2svTjJOCPnlOrh1W4epxUJqUpXbSvs46S3b+VrXLq0Y1HTzWbco2Ssr6dHqtl+Z4f8aNCs9L8WSzeGvDF/wCGLLSo4oZRKJGV5gTiZXOQA3y4wcHGe9fW3xL+Gvif9ob4Kabcappn/CP+K9P/ANJtrU3CypcgxruzgfKW5wD0IGeCaxf2a/h/8R7zwTdeGfG2nW9t4Mnk8yKK/wBxvDHkHyVTd+7TcoPzDIycdQR778XNRu9B+GHie+sLs6fd2unTSw3CgExsqEgjP0ryc1zmr9aw2FocrqUZWU1Jyve2/rrda26G+Ayin9XxFetfkqR1jZLa/wDSeh+XNxpr2T3MZZhPbOUmiddrIwJBB9xg8V9KfBn4nf8ACif2X/if47Gm/wBu/wBitHefYPtH2fzuEXb5m19v3s52npXzE+oMrXt1c3n2y8umZmkLbmdmJJZj6knNfXn7LHgnw/8AFb4G+OfC3iSzGq6DqU8VveWgmeLzE2Kdu+NlYcgdCK+942c/7FfP/NE+E4PpwjnMXFdJHzkP+C5e0Y/4Unn3/wCEr/8AuKvv/wDak+Bn/DSfwJ8TfDj+2/8AhHf7a+y/8TL7J9q8nybqKf8A1W9N2fK2/eGN2ecYPlSf8Euv2Yygz8NCeP8AoP6n/wDJNdX+3r8UfE/wX/ZO8c+MvBup/wBjeJNM+w/ZL37PFP5fmX9vE/ySqyHKSOOVOM5HIBr+dT+gTlP2GP2Gf+GLv+E2/wCK2/4TH/hJfsP/ADCvsP2f7P8AaP8ApvLv3ef7Y2988eVftRf8Epf+GlPjr4m+I/8AwtH/AIRz+2vsv/Et/wCEf+1eT5NrFB/rftSbs+Vu+6Mbsc4yfgD/AIei/tODgfEzj/sAaX/8jUf8PRv2nf8Aopn/AJQNL/8AkagDyv8AZc+Bf/DSfx18M/Dj+2/+Ed/tr7V/xM/sn2ryfJtZZ/8AVb03Z8rb94Y3Z5xg/fwx/wAEXv8AqsX/AAsn/uB/2d/Z/wD4E+b5n2//AGNvlfxbvl9W/ak/Zc+GP7F/wJ8TfGT4N+Gf+EO+JHhr7L/ZWtf2hdX32b7RdRWs37m6llhfdDcSp86HG7IwwBH5V/HP9qT4nftJjRR8R/E3/CRf2L5/2D/QLW18nzvL83/URJuz5Uf3s428YycgH39/w/N/6on/AOXX/wDcVeV/tRf8EpP+Ga/gV4m+I/8AwtH/AISP+xfsv/Es/wCEf+y+d511FB/rftT7cebu+6c7ccZyPgCv6ffil8LPDHxp8Can4N8ZaZ/bHhvUvK+1WX2iWDzPLlSVPniZXGHjQ8MM4weCRQB+Fn7DP7DX/DZ//Cbf8Vt/whv/AAjX2L/mE/bvtH2j7R/03i2bfs/vnd2xz5V+1H8DP+GbPjr4m+HH9t/8JH/Yv2X/AImf2T7L53nWsU/+q3vtx5u37xztzxnA+/8A9ug/8O2T4J/4Zy/4t2fGn27+3v8AmKfbPsn2f7N/x/ed5ez7Xcf6vbu3/NnauPVf2W/2XPhj+2h8CfDPxk+Mnhn/AITH4keJftX9q61/aF1Y/afs91Law/ubWWKFNsNvEnyIM7cnLEkgH3/RRRQAUUUUAFIelLSHpQB+AX/BUf8A5Ps+Jv8A3DP/AE12lfv9X5//ALUX/BKX/hpT46+JviP/AMLR/wCEc/tr7L/xLf8AhH/tXk+TaxQf637Um7PlbvujG7HOMk/Zd/4Ktf8ADSnx18M/Dj/hV3/COf219q/4mX/CQfavJ8m1ln/1X2VN2fK2/eGN2ecYIB9V/HL9qP4Y/s2nRB8RvE3/AAjp1rz/ALBiwurrzvJ8vzP9RE+3Hmx/exndxnBx1Xwt+Kfhj40+BNM8ZeDdT/tjw3qXm/Zb37PLB5nlyvE/ySqrjDxuOVGcZHBBr81v+C5n/NE/+43/AO2FeV/su/8ABVr/AIZr+BXhn4cf8Ku/4SP+xftX/Ez/AOEg+y+d511LP/qvsr7cebt+8c7c8ZwAD5+/YK+KPhj4L/tY+BvGXjLU/wCx/Demfbvtd79nln8vzLC4iT5IlZzl5EHCnGcngE1+6fwM/aj+GP7SR1sfDnxN/wAJEdF8j7f/AKBdWvk+d5nl/wCviTdnypPu5xt5xkZ/AL9lz4Gf8NJ/HXwz8OP7b/4Rz+2vtX/Ez+yfavJ8m1ln/wBVvTdnytv3hjdnnGD9/Z/4cv8A/VYv+Fk/9wP+zv7P/wDAnzfM+3/7G3yv4t3ygH6q1+P/AOwX+wZ8dfgr+1j4F8ZeM/A39jeG9N+3far3+17Cfy/MsLiJPkinZzl5EHCnGcngE11n/D87/qif/l1//cVfqnigDyr44/tSfDH9m3+xB8RvE3/COnWvP+wYsLq687yfL8z/AFET7cebH97Gd3GcHHV/C34p+GPjT4E0zxl4N1P+2PDepeb9lvfs8sHmeXK8T/JKquMPG45UZxkcEGvzW/4Lmdfgnj/qN/8AthX1V/wS5/5MU+Gf/cT/APTnd0Ae5/GHwp/wnXwy8V+HvOW2/tKwktRO/wB2MsCA59h1/CvxW8Q+H9R8J69f6RqtrJZajYzNBPbyKQyMpwR/9fvkV+5+psYFL+UZoiCHjGDuH418p/tY+H/2eruTTpvib4og8IatfB1sdSKvHcusW3emQpDhfMX74YjcMGv0bg/iiHD9SdLERbpTte26a626nzGdZTLMYxlSfvR/E+X/APgn7fXEX7SeixQuyxzWl2kyg8MnkswB/wCBKp/AV+pet6Bp3iTT2stUsrfULRmVzBcxLIhZWDKSrAjggEfSvz5+B/in9lf4EeOh4o0n462mo3i20lskV/GxRQ+Mt8sYOcDHXua+1fGHxq8I/D7w5d694i8U2Gk6PabPPvLi3kCR7nVFzg92ZR+NcHF+b4bOMzWLwd+VRSu1Z3TZtkuBq4LCujXWrb8zR+JXxR8OfCHwy2t+Jb4WNkHESBVLSTSEEhEUck4BP0BPQV8kftO/tYeCPit8I30Tw5eakNSuLqJ2gltzENiHJDnOCOnAJ5A9Ks/Hn9oL9mv4/wCi6Zpmr/G7TNNhsbk3KPYxSbmYqVwdykdDWL4N/ZK+Dfj7w3aa94d+KOoato13v8i8t4FMcm12RsZTsysPwrbh6pkGFVPFY+c/bRldJL3dNumpw5xTzXE8+HwsY+zkrXb1Pk6Gb3x9a/Rz9jbwHeeCfhNdSaihivNVmS9MDLhoUIAQMOxKgN9HFeK/ArTv2W5fG9hYeHviZaeNPE1wWaytLqNpNrIpkZkjCBSQqM3zbhx0r7O0maK5KW9jHJ9lDb5bmVcPO/HzHp6Dt6AAAAV7HFvFtHOKKweDi+S923pe2ySPJ4c4aq5ZWeKxLXNayS8z8Kv+Cog/4zp+Jf00z/02Wler/st/sufE79i/47eGfjJ8ZPDP/CHfDfw19q/tXWvt9rffZvtFrLaw/ubWWWZ901xEnyIcbsnCgkfVH7UP/BKX/hpP46eJfiMfij/wjn9s/Zf+JZ/wj/2ryfJtYoP9b9qTdnyt33RjdjnGT5YP25/+Hk5/4Zx/4Qn/AIV1/wAJp/zMv9q/2p9j+yf6f/x7eTD5m/7J5f8ArF2793ONp/Kj9FPv74G/tSfDD9pIa3/wrnxN/wAJF/Yvkfb/APQLq18nzvM8v/XxJuz5Un3c4284yM8t8Uf29PgV8F/HWp+DfGXjg6N4k03yvtVl/ZF/P5fmRJKnzxQMhykiHhjjODggiuS/Ya/Ya/4Yv/4TbPjb/hMf+El+xf8AMJ+w/Zvs/wBo/wCm0u/d9o9sbe+ePyt/4Kjf8n1/EzHT/iWf+my0oA5T9gr4o+GPgv8AtY+BvGXjLU/7H8N6Z9u+13v2eWfy/MsLiJPkiVnOXkQcKcZyeATX6/8A/D0X9mMcH4lnP/YA1T/5Gr4A/ai/4JS/8M1/ArxN8R/+Fo/8JH/Yv2b/AIln/CP/AGXzvOuooP8AW/an2483d905244zkeVfsM/sM/8ADaH/AAm3/Fbf8Id/wjf2L/mFfbvtP2j7R/03i2bfI987u2OQD9VP+Hov7Mf/AEUw/wDgg1T/AORq8A/b1/bz+BXxp/ZO8deDfBnjg6z4k1L7D9lsv7Iv4PM8u/t5X+eWBUGEjc8sM4wOSBX5q/tR/A3/AIZs+Ovib4cf23/wkX9i/Zf+Jl9k+y+d51rFP/qt77cebt+8c7c8ZwPv/wD4cZf9Vs/8tT/7toA8q/4JS/tQ/DH9mw/FEfEfxN/wjp1r+y/sH+gXV153k/a/M/1ET7cebH97Gd3GcHHz/wDt6/FHwx8aP2sfHPjLwbqf9seG9T+w/ZL37PLB5nl2FvE/ySqrjDxuOVGcZHBBrrP25v2Gv+GLv+EK/wCK2/4TH/hJPtv/ADCfsP2b7P8AZ/8AptLv3ef7Y2988eqfsu/8Epf+GlPgV4Z+I/8AwtH/AIRz+2vtX/Et/wCEf+1eT5N1LB/rftSbs+Vu+6Mbsc4yQD9qaKKKACiiigApDyKWkJwCT0FAH5Aft6ft5/HX4K/tY+OvBvgzxz/Y3hvTfsP2Wy/siwn8vzLC3lf55YGc5eRzyxxnA4AFeA/8EuP+T7Phl/3E/wD013dfr/8AFH9vT4FfBfx1qfg3xl44OjeJNN8r7VZf2Rfz+X5kSSp88UDIcpIh4Y4zg4IIr81f2W/2XPid+xf8dvDPxk+Mnhn/AIQ74b+GvtX9q619vtb77N9otZbWH9zayyzPumuIk+RDjdk4UEgA/VP45fst/DH9pP8AsQ/Efwz/AMJF/Yvn/YP9PurXyfO8vzf9RKm7PlR/ezjbxjJz5X/w66/Zj/6Jmf8Awf6p/wDJNfAH/BVr9qL4Y/tJ/wDCrv8AhXHib/hIv7F/tT7f/oF1a+T532Tyv9fEm7PlSfdzjbzjIz8AUAftT+1J+y58Mf2L/gT4m+Mnwb8M/wDCHfEjw19l/srWv7Qur77N9ouorWb9zdSywvuhuJU+dDjdkYYAj8q/jn+1J8Tv2kxoo+I/ib/hIv7F8/7B/oFra+T53l+b/qIk3Z8qP72cbeMZOf6KPil8U/DHwW8Can4y8Zan/Y/hvTfK+1Xv2eWfy/MlSJPkiVnOXkQcKcZyeATX5rft0D/h5MfBP/DOX/FxD4L+3f29/wAwv7H9r+z/AGb/AI/vJ8zf9kuP9Xu27PmxuXIB+Vdf1UV8Afst/tR/DH9i/wCBPhn4N/GTxN/wh3xI8Nfav7V0X+z7q++zfaLqW6h/fWsUsL7obiJ/kc43YOGBA+Vf2W/2XPid+xf8dvDPxk+Mnhn/AIQ74b+GvtX9q619vtb77N9otZbWH9zayyzPumuIk+RDjdk4UEgA/VT45fsufDH9pI6IfiN4Z/4SI6L5/wBgxf3Vr5PneX5n+olTdnyo/vZxt4xk56r4W/Czwx8FvAmmeDfBumf2P4b03zfstl9oln8vzJXlf55WZzl5HPLHGcDgAV+av7dH/GyYeCf+Gcv+Lif8IX9u/t7/AJhf2P7X9n+zf8fvk+Zv+yXH+r3bdnzY3Ln81/il8LfE/wAFvHep+DfGWmf2N4k03yvtVl58U/l+ZEkqfPEzIcpIh4Y4zg8gigD+ntkDjBGRX5T/APBcW1jtX+CzRqFL/wBtbvfH2Cvyxr9U/wDghkcD42E9P+JJ/wC39AHVfsGfsE/Av41fsn+BvGfjLwS2r+JNT+3fa7wavfQeZ5d/cRJ8kUyoMJGg4AzjJ5JNfOX7Kn7Q/wAQf2xvj34X+EHxd19fFfw88R/av7U0hbC2sTcfZ7Wa6h/fW0ccqbZoIm+Vxnbg5BIP6c/FH9vT4FfBfx1qfg3xl44OjeJNN8r7VZf2Rfz+X5kSSp88UDIcpIh4Y4zg4IIr8Afhb8LfE/xp8d6Z4N8G6Z/bPiTUvN+y2XnxQeZ5cTyv88rKgwkbnlhnGByQKAP3RH/BLf8AZlyD/wAK4f8A8H2pf/JNe4fDf4HeC/hH4L07wn4T0caV4f0/zPs1oZ5JynmSNK/zysznLux5JxnAwABX5zfsLn/h2z/wmx/aN/4t2PGn2H+wf+Yp9s+yfaPtP/Hj5/l7Ptdv/rNu7f8ALna2Pqv/AIei/sx/9FMP/gg1T/5GoA/Cj4Z/EzxH8H/G2neLvCWoDSvEGn+Z9muzbxT+X5kbRP8AJKrIco7DkHGcjBANe/Q/8FPf2l7cYj+JIQeg0DTP/kavWv2W/wBlz4nfsX/Hbwz8ZPjJ4Z/4Q74b+GvtX9q619vtb77N9otZbWH9zayyzPumuIk+RDjdk4UEj1T9uj/jZMPBP/DOX/FxP+EL+3f29/zC/sf2v7P9m/4/fJ8zf9kuP9Xu27PmxuXIB8q/8PRv2nf+imf+UDS//kal/wCCXH/J9nwy/wC4n/6a7uvAPil8LfE/wW8d6n4N8ZaZ/Y3iTTfK+1WXnxT+X5kSSp88TMhykiHhjjODyCK/dP8A4Kj/APJifxN/7hn/AKdLSgDyn/gq1+1H8Tv2a/8AhV3/AArjxN/wjv8AbX9qfb/9AtbrzvJ+yeV/r4n2482T7uM7uc4GF/Zb/Zc+GP7aHwJ8M/GT4yeGf+Ex+JHiX7V/autf2hdWP2n7PdS2sP7m1lihTbDbxJ8iDO3JyxJPlP8AwQy4/wCF2f8AcE/9v65T9vT9gz46/Gr9rHx14y8GeBv7Z8N6l9h+y3v9r2EHmeXYW8T/ACSzq4w8bjlRnGRwQaAPlb4o/t6fHX40+BdT8G+M/HA1nw3qXlfarL+yLCDzPLlSVPnigVxh40PDDOMHIJFcr8Dv2pPif+zd/bf/AArnxN/wj39teT9vzYWt153k+Z5f+vifbjzZPu4zu5zgY/dT4Xft6fAr40eOtM8G+DfHB1nxJqXm/ZbL+yL+DzPLieV/nlgVBhI3PLDOMDJIFfP3/BVn9l34nftK/wDCrj8OPDP/AAkY0X+1Pt/+n2tr5PnfZPK/18qbs+VJ93ONvOMjIB+QXxS+KXif40+O9T8ZeMtT/tnxJqXlfar3yIoPM8uJIk+SJVQYSNBwozjJ5JNe/f8AD0b9p3/opn/lA0v/AORq/QD9lv8Aaj+GP7F/wJ8M/Bv4yeJv+EO+JHhr7V/aui/2fdX32b7RdS3UP761ilhfdDcRP8jnG7BwwIHv/wC3r8LvE/xo/ZO8c+DfBumf2z4k1P7D9ksvtEUHmeXf28r/ADysqDCRueWGcYHJAoA/Cz45/tSfE/8AaT/sT/hY/ib/AISL+xfP+wf6Ba2vk+d5fm/6iJN2fKj+9nG3jGTn9qf+CXH/ACYn8Mv+4n/6dLuvKf8AglL+y78Tv2bB8UT8RvDP/COjWv7L+wf6fa3XneT9r8z/AFEr7cebH97Gd3GcHHwD/wAFR/8Ak+z4m/8AcM/9NdpQB+/1FFFABRRRQAUh6UtIeRQB8AftRf8ABKb/AIaT+Ovib4j/APC0f+Ec/tr7N/xLP+Ef+1eT5NrFB/rftSbs+Vu+6Mbsc4yflb9qL/gq0P2lPgV4m+HH/Crv+Ec/tr7N/wATP/hIPtXk+TdRT/6r7Km7PlbfvDG7POMHqf29P28/jr8Ff2sfHXg3wZ45/sbw3pv2H7LZf2RYT+X5lhbyv88sDOcvI55Y4zgcACvlb9gr4XeGPjR+1j4G8G+MtM/tjw3qf277XZfaJYPM8uwuJU+eJlcYeNDwwzjB4JFAHgPJPrX39+y7/wAEpR+0n8CvDPxH/wCFo/8ACOf219q/4ln/AAj/ANq8nybqWD/W/ak3Z8rd90Y3Y5xk/f8A/wAOuv2Yzz/wrQ5/7D+qf/JNfAH7Un7UfxO/Yv8Ajt4m+Dfwb8Tf8Id8N/DX2X+ytF+wWt99m+0WsV1N++uopZn3TXEr/O5xuwMKAAAeq/8ADc//AA8n/wCMcf8AhCf+Fdf8Jp/zMv8Aav8Aan2P7J/p3/Ht5MPmb/snl/6xdu/dzt2lOP8AgjB/1WL/AIWT/wBwP+zv7P8A/AnzfM+3/wCxt8r+Ld8vq37Un7Lnwx/Yv+BPib4yfBvwz/wh3xI8NfZf7K1r+0Lq++zfaLqK1m/c3UssL7obiVPnQ43ZGGAI8q/YY/42Tnxt/wANHf8AFxf+EL+w/wBg/wDML+x/a/tH2n/jx8nzN/2S3/1m7bs+XG5sgHwB+1H8c/8AhpP46+JviP8A2IfDv9tfZf8AiWfa/tXk+TaxQf63Ym7PlbvujG7HOMn9/v2o/gZ/w0n8CvE3w5/tr/hHf7a+y/8AEz+yfavJ8m6in/1W9N2fK2/eGN2ecYPlX/Drr9mP/omZ/wDB/qn/AMk19VUAfKf7DX7DX/DF/wDwm2fG3/CY/wDCS/Yv+YT9h+z/AGf7R/02l37vtHtjb3zx+Vn/AAVG/wCT6/ib/wBwz/02Wlff/wDwVb/ai+J37Nn/AAq8fDnxN/wjo1r+1Pt/+gWt153k/ZPL/wBfE+3HmyfdxndznAx+QXxS+KXif40+O9T8ZeMtT/tnxJqXlfar3yIoPM8uJIk+SJVQYSNBwozjJ5JNAH2p+1F/wSk/4Zr+BXib4j/8LR/4SP8AsX7L/wASz/hH/svneddRQf637U+3Hm7vunO3HGcj1T/ghnx/wuz/ALgn/t/X6VfFL4WeGPjT4E1Pwb4y0z+2PDepeV9qsvtEsHmeXKkqfPEyuMPGh4YZxg8EiuU+B37Lfwx/Zt/ts/Dnwz/wjp1ryPt+b+6uvO8nzPL/ANfK+3HmyfdxndznAwAfKv7UX/BKb/hpP46+JviP/wALR/4Rz+2vs3/Es/4R/wC1eT5NrFB/rftSbs+Vu+6Mbsc4yT9l3/glL/wzX8dfDPxH/wCFo/8ACR/2L9q/4lv/AAj/ANl87zrWWD/W/an2483d905244zkfP8A+3p+3n8dfgr+1j468G+DPHP9jeG9N+w/ZbL+yLCfy/MsLeV/nlgZzl5HPLHGcDgAUfsF/t5/HX41ftY+BfBvjPxz/bPhvUvt32qy/siwg8zy7C4lT54oFcYeNDwwzjB4JFAHV/8ABcv/AJongf8AQb/9sK8r/Zd/4JTf8NJ/Arwz8R/+Fo/8I5/bX2r/AIln/CP/AGryfJupYP8AW/ak3Z8rd90Y3Y5xk/qn8cv2W/hh+0kNE/4WN4Z/4SL+xfP+wf6fdWvk+d5fm/6iVN2fKj+9nG3jGTn8rP2pP2o/id+xf8dvE3wb+Dfib/hDvhv4a+y/2Vov2C1vvs32i1iupv311FLM+6a4lf53ON2BhQAAD9U/2o/gZ/w0l8CvE3w5/tv/AIR3+2vsv/Ez+yfavJ8m6in/ANVvTdnytv3hjdnnGD5V+w1+wz/wxf8A8JsT42/4TH/hJfsX/MK+w/Z/s/2j/pvLv3faPbG3vnjq/wBvX4o+J/gv+yd458ZeDdT/ALG8SaZ9h+yXv2eKfy/Mv7eJ/klVkOUkccqcZyOQDX5Af8PRf2nMY/4WWMdMf2Bpf/yNQAf8FRv+T6/ib/3DP/TZaV6v+1F/wVa/4aU+BXib4cH4Xf8ACOf219l/4mX/AAkH2ryfJuop/wDVfZU3Z8rb94Y3Z5xg/FXxS+KXif40+O9T8ZeMtT/tnxJqXlfar3yIoPM8uJIk+SJVQYSNBwozjJ5JNfun/wAOuv2Y/wDomZ/8H+qf/JNAHyp/wQz4/wCF2f8AcE/9v69V/ai/4Ktf8M1/HXxN8OP+FXf8JH/Yv2X/AImX/CQfZfO861in/wBV9lfbjzdv3jnbnjOB5V+3QP8Ah2z/AMISP2cv+Ldjxp9u/t7/AJin2z7J9n+zf8f3n+Xs+13H+r27t/zZ2rj81/il8UvE/wAafHep+MvGWp/2z4k1LyvtV75EUHmeXEkSfJEqoMJGg4UZxk8kmgDqv2XPjn/wzZ8dfDPxHOi/8JF/Yv2r/iWfa/svnedaywf63Y+3Hm7vunO3HGcj7+/4fmA8f8KT/wDLr/8AuKvysoBwQR1FAH6qf8MMf8PJ/wDjI3/hNv8AhXX/AAmn/Mtf2V/an2P7J/oH/Hz50Pmb/snmf6tdu/bzt3H9U+K/nX+F37enx1+C3gXTPBvgzxwNG8N6b5v2Wy/siwn8vzJXlf55YGc5eRzyxxnAwABXVf8AD0b9p3/opn/lA0v/AORqAP39OAD2r8A/+Co3P7dfxM/7hn/pstKT/h6N+07/ANFM/wDKBpf/AMjV+gH7Lf7Lnwx/bQ+BPhn4yfGTwz/wmPxI8S/av7V1r+0Lqx+0/Z7qW1h/c2ssUKbYbeJPkQZ25OWJJAPv+iiigAooooAKQnAJPQUtIelAHgPxR/b0+BXwX8dan4N8ZeODo3iTTfK+1WX9kX8/l+ZEkqfPFAyHKSIeGOM4OCCK5T/h6L+zH/0Uw/8Agg1T/wCRq/Kv/gqNx+3X8TP+4Z/6bLSvqr/hxl/1Wz/y1P8A7toA+qv+Hov7Mf8A0Uw/+CDVP/kaj/h6L+zH/wBFMP8A4INU/wDkavlX/hxn/wBVt/8ALU/+7aP+HGX/AFWz/wAtT/7toA+qv+Hov7Mf/RTD/wCCDVP/AJGr1T4G/tSfDD9pP+2/+Fc+Jv8AhIv7F8j7f/oF1a+T53meV/r4k3Z8qT7ucbecZGfyt/ai/wCCUv8AwzX8CvE3xHPxR/4SP+xfsv8AxLf+Ef8AsvneddRQf637U+3Hm7vunO3HGcj1T/ghlyfjZ/3BP/b+gDk/29P2DPjr8av2sfHXjLwZ4G/tnw3qX2H7Le/2vYQeZ5dhbxP8ks6uMPG45UZxkcEGv1V+KXxT8MfBbwJqfjLxlqf9j+G9N8r7Ve/Z5Z/L8yVIk+SJWc5eRBwpxnJ4BNdVivlb/gqP/wAmKfEz/uGf+nO0oA9U+B37Unwx/aS/tsfDnxN/wkR0XyPt+bC6tfJ87zPL/wBfEm7PlSfdzjbzjIz+av7en7Bnx1+NX7WPjrxl4M8Df2z4b1L7D9lvf7XsIPM8uwt4n+SWdXGHjccqM4yOCDXgP7DP7c//AAxf/wAJt/xRP/CY/wDCS/Yv+Yr9h+zfZ/tH/TGXfu+0e2NvfPH1V/w/N/6on/5df/3FQB8q/wDBLj/k+z4Zf9xP/wBNd3X7+5wuT0FfAH7Lv/BKX/hmv46+GfiP/wALR/4SP+xftX/Et/4R/wCy+d51rLB/rftT7cebu+6c7ccZyPv7IxQB4F8Uf29PgV8F/HWp+DfGXjg6N4k03yvtVl/ZF/P5fmRJKnzxQMhykiHhjjODggivz+/YL/YM+OvwV/ax8C+MvGfgb+xvDem/bvtV7/a9hP5fmWFxEnyRTs5y8iDhTjOTwCa8B/4KjH/jOv4mY/6hn/pstK/f3igDyr44/tSfDH9m3+xB8RvE3/COnWvP+wYsLq687yfL8z/URPtx5sf3sZ3cZwcdX8Lfin4Y+NPgTTPGXg3U/wC2PDepeb9lvfs8sHmeXK8T/JKquMPG45UZxkcEGvn/APbm/Ya/4bQ/4QnHjb/hDv8AhGvtv/MJ+3faftH2f/pvFs2/Z/fO7tjn1X9lz4G/8M2fArwz8OP7b/4SL+xftX/Ey+yfZfO866ln/wBVvfbjzdv3jnbnjOAAfit/w65/ad/6Jn/5X9L/APkmj/h1z+07/wBEz/8AK/pf/wAk19V/8Pzf+qJ/+XX/APcVH/D8z/qif/l1/wD3FQB8qf8ADrn9p3/omf8A5X9L/wDkmv1//b1+F3if40fsneOfBvg3TP7Z8San9h+yWX2iKDzPLv7eV/nlZUGEjc8sM4wOSBXVfsufHMftJ/Arwz8R/wCxB4d/tr7V/wASz7X9q8nybqWD/W7E3Z8rd90Y3Y5xkn7Ufxz/AOGbfgV4m+I39if8JF/Yv2X/AIln2v7L53nXUUH+t2Ptx5u77pztxxnIAPxW/wCHXX7TmM/8K0GOuf7f0v8A+Sa8B+KXwt8T/Bbx3qfg3xlpn9jeJNN8r7VZefFP5fmRJKnzxMyHKSIeGOM4PIIr90v2Gf25f+G0P+E2H/CE/wDCHf8ACNfYv+Yr9u+0/aPtH/TCLZt+z++d3bHP5V/8FRv+T6/ib/3DP/TZaUAfup8Uvin4Y+C3gTU/GXjLU/7H8N6b5X2q9+zyz+X5kqRJ8kSs5y8iDhTjOTwCa5T4G/tR/DH9pI62Phz4m/4SI6L5P2/NhdWvk+d5nl/6+JN2fKk+7nG3nGRk/aj+Bv8Aw0n8CvE3w4/tv/hHf7a+y/8AEy+yfavJ8m6in/1W9N2fK2/eGN2ecYPlX7DP7DP/AAxf/wAJt/xW3/CY/wDCS/Yv+YV9h+zfZ/tH/TeXfu+0e2NvfPAB+Vn/AAVH/wCT7Pib/wBwz/012lfun8Uvin4Y+C3gTU/GXjLU/wCx/Dem+V9qvfs8s/l+ZKkSfJErOcvIg4U4zk8Amvwr/wCCo3/J9fxN/wC4Z/6bLSv1V/4KjH/jBT4mf9wz/wBOdpQB8Af8FW/2ovhj+0mfhf8A8K58Tf8ACRf2L/an2/NhdWvk+d9k8v8A18Sbs+VJ93ONvOMjPwBX1V+w1+wz/wANof8ACbZ8bf8ACHf8I19i/wCYV9u+0/aPtH/TaLZt+z++d3bHP1T/AMOMv+q2f+Wp/wDdtAH6q0UUUAFFFFABSHpS0h6UAfgF/wAFR/8Ak+z4m/8AcM/9NdpX6/ft6/FHxP8ABf8AZO8c+MvBup/2N4k0z7D9kvfs8U/l+Zf28T/JKrIcpI45U4zkcgGvyB/4Kj/8n2fE3/uGf+mu0r9VP+Co/wDyYn8Tf+4Z/wCnS0oA/Kr/AIei/tODgfEzj/sAaX/8jUf8PRv2nf8Aopn/AJQNL/8AkavlaigD9/v+Co//ACYn8Tf+4Z/6dLSvlX/ghj1+Nn/cE/8Ab+vqr/gqP/yYn8Tf+4Z/6dLSvlT/AIIZcf8AC7P+4J/7f0AfqrXyr/wVH/5MT+Jv/cM/9OlpXxT+3p+wZ8dfjV+1j468ZeDPA39s+G9S+w/Zb3+17CDzPLsLeJ/klnVxh43HKjOMjgg1+qvxS+Kfhj4LeBNT8ZeMtT/sfw3pvlfar37PLP5fmSpEnyRKznLyIOFOM5PAJoA/mCBwa/X/APYK/YM+BXxp/ZO8C+MvGfgc6z4k1L7d9qvf7Xv4PM8u/uIk+SKdUGEjQcKM4yeSTX2p8Df2o/hj+0kdbHw58Tf8JEdF8j7fmwurXyfO8zy/9fEm7PlSfdzjbzjIz6rQB+P/AOwX+3n8dfjV+1j4F8G+M/HP9s+G9S+3farL+yLCDzPLsLiVPnigVxh40PDDOMHgkV7/AP8ABVr9qL4nfs2D4XD4ceJv+EdGtf2p9v8A9AtbrzvJ+yeX/r4n2482T7uM7uc4GPV/+Hov7Mf/AEUw/wDgg1T/AORq9U+Bv7Uvww/aS/tv/hXPib/hIv7F8j7f/oF1a+T53meX/r4k3Z8qT7ucbecZGQD+dj4pfFLxP8afHep+MvGWp/2z4k1LyvtV75EUHmeXEkSfJEqoMJGg4UZxk8kmvv39gv8Abz+Ovxq/ax8C+DfGfjn+2fDepfbvtVl/ZFhB5nl2FxKnzxQK4w8aHhhnGDwSK/QH4o/t6fAr4L+OtT8G+MvHB0bxJpvlfarL+yL+fy/MiSVPnigZDlJEPDHGcHBBFfj/AP8ADrn9p3/omf8A5X9L/wDkmgD7/wD+CrP7UXxO/Zr/AOFXf8K48Tf8I7/bX9qfb/8AQLW687yfsnl/6+J9uPNk+7jO7nOBj4A/4ejftO/9FM/8oGl//I1fVX7DH/Gtj/hNv+Gjv+Ldf8Jp9i/sH/mKfbPsn2j7T/x4+f5ez7Vb/wCs27t/y52tjyv9qT9lz4nftofHbxN8ZPg34Z/4TH4b+Jfsv9la19vtbH7T9ntYrWb9zdSxTJtmt5U+dBnbkZUgkA+//wDh11+zH/0TM/8Ag/1T/wCSa+AP+CrX7L3wx/ZqPwuPw48M/wDCOnWv7U+3/wCn3V153k/ZPK/18r7cebJ93Gd3OcDHz/8AsFfFHwx8F/2sfA3jLxlqf9j+G9M+3fa737PLP5fmWFxEnyRKznLyIOFOM5PAJr7V/bnH/DyY+CR+zl/xcQ+C/t39vf8AML+x/a/s/wBm/wCP3yfM3/ZLj/V7tuz5sblyAfFXwu/b0+OvwW8C6Z4N8GeOBo3hvTfN+y2X9kWE/l+ZK8r/ADywM5y8jnljjOBgACvoD9lv9qP4nftofHbwz8G/jJ4m/wCEx+G/iX7V/aui/YLWx+0/Z7WW6h/fWsUUybZreJ/kcZ24OVJB+qv2W/2o/hj+xf8AAnwz8G/jJ4m/4Q74keGvtX9q6L/Z91ffZvtF1LdQ/vrWKWF90NxE/wAjnG7BwwIHwB/wS4/5Ps+GX/cT/wDTXd0AftR8DP2XPhj+zZ/bZ+HPhn/hHf7a8j7f/p91ded5PmeV/r5X2482T7uM7uc4GPxX/wCCo/8AyfZ8Tf8AuGf+mu0r6q/4LmDJ+CQHf+2//bCvir4XfsF/HX40+BdM8ZeDPA41nw3qXm/Zb3+17CDzPLleJ/klnVxh43HKjOMjIINAHVf8PRv2nf8Aopn/AJQNL/8Akag/8FRf2nCMH4mZH/YA0v8A+Rq9/wD2C/2DPjr8Ff2sfAvjLxn4G/sbw3pv277Ve/2vYT+X5lhcRJ8kU7OcvIg4U4zk8Amv1/yAue1AH8wfxS+KXif40+O9T8ZeMtT/ALZ8Sal5X2q98iKDzPLiSJPkiVUGEjQcKM4yeSTX2p+y3+1H8Tv20Pjt4Z+Dfxk8Tf8ACY/DfxL9q/tXRfsFrY/afs9rLdQ/vrWKKZNs1vE/yOM7cHKkg/pV8Uf29PgV8F/HWp+DfGXjg6N4k03yvtVl/ZF/P5fmRJKnzxQMhykiHhjjODggiuU/4Kj/APJifxN/7hn/AKdLSgD5U/bn/wCNbI8E/wDDOX/Fu/8AhNPt39vf8xT7Z9k+z/Zv+P7zvL2fa7j/AFe3dv8AmztXH2r+wV8UfE/xo/ZO8DeMvGWp/wBs+JNT+3fa737PFB5nl39xEnyRKqDCRoOFGcZPJJr8LPgb+y58Tv2khrZ+HPhn/hIhovkfb839ra+T53meX/r5U3Z8qT7ucbecZGeV+KXwt8T/AAW8d6n4N8ZaZ/Y3iTTfK+1WXnxT+X5kSSp88TMhykiHhjjODyCKAP6faKKKACiiigApD0paQ9KAPwC/4Kj/APJ9nxN/7hn/AKa7Sv2o/aj+Bv8Aw0n8CvE3w4/tv/hHf7a+y/8AEy+yfavJ8m6in/1W9N2fK2/eGN2ecYP4r/8ABUf/AJPs+Jv/AHDP/TXaUn/D0b9p3/opn/lA0v8A+RqAPqr/AIcZf9Vs/wDLU/8Au2j/AIcZf9Vs/wDLU/8Au2vlX/h6N+07/wBFM/8AKBpf/wAjUf8AD0b9p3/opn/lA0v/AORqAP1V/wCCo3P7CnxM/wC4Z/6c7SvlT/ghl1+Nn/cE/wDb+viv4o/t6fHX40+BdT8G+M/HA1nw3qXlfarL+yLCDzPLlSVPnigVxh40PDDOMHIJFfav/BDI5PxsJ/6gn/t/QB+qeK/Ff9qL/gq3/wANKfArxN8OP+FXf8I5/bX2X/iZ/wDCQfavJ8m6in/1X2VN2fK2/eGN2ecYP7U1/KvQB+qf/BDM/wDJbOf+gJ/7f16r+1F/wVb/AOGbPjr4m+HH/Cr/APhI/wCxfsv/ABMv+Eg+y+d51rFP/qvsr7cebt+8c7c8ZwPys+Bv7UfxO/ZtGtj4c+Jv+EdGteR9v/0C1uvO8nzPL/18T7cebJ93Gd3OcDHK/FL4peJ/jT471Pxl4y1P+2fEmpeV9qvfIig8zy4kiT5IlVBhI0HCjOMnkk0AdV+y58DP+Gk/jr4Z+HH9tnw7/bX2r/iZ/ZPtXk+Tayz/AOq3puz5W37wxuzzjB/af9hn9hofsXjxt/xW3/CYjxL9i/5hX2H7N9n+0f8ATeXfu+0e2NvfPHln7Un7Lnwx/Yv+BPib4yfBvwz/AMId8SPDX2X+yta/tC6vvs32i6itZv3N1LLC+6G4lT50ON2RhgCPz/8A+Ho37Tn/AEUz/wAoOmf/ACNQAv8AwVG/5Pr+JmOn/Es/9NlpX1T/AMPzf+qJ/wDl1/8A3FXq37Lf7Lnwx/bQ+BPhn4yfGTwz/wAJj8SPEv2r+1da/tC6sftP2e6ltYf3NrLFCm2G3iT5EGduTliSfzV/YK+F3hj40ftY+BvBvjLTP7Y8N6n9u+12X2iWDzPLsLiVPniZXGHjQ8MM4weCRQB1n7cv7c3/AA2gfBP/ABRP/CHf8I19t/5iv277R9o+z/8ATCLZt+z++d3bHPqn7Lv/AAVZ/wCGbPgV4Z+HH/Crv+Ej/sX7V/xM/wDhIPsvneddSz/6r7K+3Hm7fvHO3PGcD7//AOHXX7MZ5Pw0Of8AsP6p/wDJNH/Drr9mP/omZ/8AB/qn/wAk0Afit+y58DP+Gk/jr4Z+HH9t/wDCOf219q/4mf2T7V5Pk2ss/wDqt6bs+Vt+8Mbs84wfv7j/AIIv/wDVYv8AhZP/AHA/7O/s/wD8CfN8z7f/ALG3yv4t3y+rftSfsufDH9i/4E+JvjJ8G/DP/CHfEjw19l/srWv7Qur77N9ouorWb9zdSywvuhuJU+dDjdkYYAjyr9hj/jZOfG3/AA0d/wAXF/4Qv7D/AGD/AMwv7H9r+0faf+PHyfM3/ZLf/Wbtuz5cbmyAfAH7Ufxz/wCGk/jr4m+I/wDYh8O/219l/wCJZ9r+1eT5NrFB/rdibs+Vu+6Mbsc4yfVf+CXH/J9nwy/7if8A6a7uv1U/4ddfsx/9EzP/AIP9U/8Akmvyr/4Jcf8AJ9nwy/7if/pru6APqr/guZz/AMKT/wC43/7YV5V+y7/wVa/4Zr+BXhn4cf8ACrv+Ej/sX7T/AMTP/hIPsvneddSz/wCq+yvtx5u37xztzxnA/VP45fsufDH9pL+xD8RvDP8AwkR0Xz/sH+n3Vr5PneX5n+olTdnyo/vZxt4xk5/Cz9vX4XeGPgv+1j458G+DdM/sfw3pn2H7JZfaJZ/L8ywt5X+eVmc5eRzyxxnA4AFAH9FHFfKv7c37c3/DF/8AwhI/4Qn/AITEeJftv/MW+w/Zvs/2f/phLv3faPbG3vnj8q/+Ho37Tv8A0Uz/AMoGl/8AyNX1V+wuf+Hkx8bH9o3/AIuIfBf2H+wf+YX9j+1/aPtP/Hj5Hmb/ALJb/wCs3bdny43NkA+Af2o/jn/w0l8dfE3xG/sT/hHf7a+y/wDEs+1/avJ8m1ig/wBbsTdnyt33RjdjnGT9/wD/AA3P/wAPJ/8AjHH/AIQn/hXX/Caf8zL/AGr/AGp9j+yf6f8A8e3kw+Zv+yeX/rF2793O3afir9vX4XeGPgv+1j458G+DdM/sfw3pn2H7JZfaJZ/L8ywt5X+eVmc5eRzyxxnA4AFftV8Lv2C/gV8F/HWmeMvBvgc6N4k03zfst7/a9/P5fmRPE/ySzshykjjlTjORggGgDkv2Gf2GR+xf/wAJt/xW3/CY/wDCS/Yv+YT9h+z/AGf7R/02l37vP9sbe+ePK/2ov+CUv/DSfx18TfEf/haP/COf219l/wCJb/wj/wBq8nybWKD/AFv2pN2fK3fdGN2OcZJ/wVa/ai+J37NX/Crh8OPE3/CODWv7U+3/AOgWt153k/ZPK/18T7cebJ93Gd3OcDHwB/w9G/ad/wCimf8AlA0v/wCRqAP3/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Z"
alt="VION智慧门店"/>
</div>
<div class="center">
<p>长按或扫码关注</p>
</div>
</body>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8" />
</head>
<title>扫码成功</title>
<style>
.center{
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8"/>
</head>
<title>扫码成功</title>
<style>
.center {
line-height: 200px;
height: 100%;
text-align: center;
}
.center p {
line-height: 1.5;
display: inline-block;
vertical-align: middle;
font-size: 6rem;
}
</style>
<body>
<div class="center">
</style>
<body>
<div class="center">
<p>扫码成功</p>
</div>
</body>
</div>
</body>
</html>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!