From 9775f35b3956f3861580148d81f7c7dc2ecb9fe6 Mon Sep 17 00:00:00 2001 From: mashuai Date: Sat, 14 Sep 2024 18:23:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bonus/base/config/Constants.java | 4 +- .../base/controller/TbBdRecordController.java | 20 +- .../base/controller/TbDeviceController.java | 2 +- .../base/controller/TbPeopleController.java | 2 +- .../base/controller/TbProPowerController.java | 1 - .../base/controller/TbTeamController.java | 11 + .../controller/TbWarnConfigController.java | 12 +- .../com/bonus/base/domain/TbBdRecord.java | 14 +- .../com/bonus/base/domain/TbProPower.java | 9 +- .../com/bonus/base/domain/TbWarnConfig.java | 24 ++ .../base/mapper/TbBdDeviceRecordMapper.java | 3 + .../bonus/base/mapper/TbBdRecordMapper.java | 4 + .../com/bonus/base/mapper/TbDeviceMapper.java | 7 + .../com/bonus/base/mapper/TbPeopleMapper.java | 6 - .../bonus/base/mapper/TbWarnConfigMapper.java | 7 + .../bonus/base/service/TbBdRecordService.java | 29 ++- .../bonus/base/service/TbDeviceService.java | 6 +- .../bonus/base/service/TbPeopleService.java | 2 +- .../com/bonus/base/service/TbTeamService.java | 8 + .../base/service/TbWarnConfigService.java | 7 +- .../service/impl/TbBdRecordServiceImpl.java | 154 ++++++++++++- .../service/impl/TbDeviceServiceImpl.java | 15 +- .../service/impl/TbPeopleServiceImpl.java | 212 ++++++++++++++---- .../service/impl/TbProPowerServiceImpl.java | 32 ++- .../base/service/impl/TbTeamServiceImpl.java | 80 ++++++- .../service/impl/TbWarnConfigServiceImpl.java | 76 ++++++- .../mapper/TbBdDeviceRecordMapper.xml | 30 ++- .../resources/mapper/TbBdRecordMapper.xml | 84 ++++--- .../main/resources/mapper/TbDeviceMapper.xml | 9 +- .../main/resources/mapper/TbPeopleMapper.xml | 34 --- .../resources/mapper/TbProDepartMapper.xml | 3 + .../resources/mapper/TbProPowerMapper.xml | 6 +- .../resources/mapper/TbWarnConfigMapper.xml | 108 +++++---- .../resources/template/TbPeopleTemplate.xlsx | Bin 10579 -> 10579 bytes .../template/TbProPowerTemplate.xlsx | Bin 10443 -> 10495 bytes 35 files changed, 778 insertions(+), 243 deletions(-) diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/config/Constants.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/config/Constants.java index 0470333..14a79be 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/config/Constants.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/config/Constants.java @@ -58,9 +58,9 @@ public class Constants { public static final Integer FAIL = 500; /** - * 登录成功状态 + * 身份证正则表达式 */ - public static final String LOGIN_SUCCESS_STATUS = "0"; + public static final String CREDENTIALS_CODE_PATTERN = "^[1-9]\\d{5}[1-9]\\d{3}((0[1-9])|(1[0-2]))(0[1-9]|([1|2][0-9])|3[0-1])((\\d{4})|\\d{3}X)$"; /** * 登录失败状态 diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbBdRecordController.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbBdRecordController.java index 34e272a..6be35c0 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbBdRecordController.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbBdRecordController.java @@ -16,7 +16,7 @@ import java.util.List; * @author syruan */ @RestController -@RequestMapping("/tb_bd_record") +@RequestMapping("/tbBdRecord") public class TbBdRecordController extends BaseController { /** @@ -28,7 +28,7 @@ public class TbBdRecordController extends BaseController { /** * 通过主键查询单条数据 */ - @GetMapping("{/id}") + @GetMapping("/{id}") public AjaxResult selectById(@PathVariable("id") Long id) { return success(tbBdRecordService.selectByPrimaryKey(id)); } @@ -49,7 +49,7 @@ public class TbBdRecordController extends BaseController { */ @PostMapping public AjaxResult add(@RequestBody @NotNull(message = "参数不能为空") @Valid TbBdRecord tbBdRecord) { - return toAjax(tbBdRecordService.insertSelective(tbBdRecord)); + return tbBdRecordService.insertSelective(tbBdRecord); } @@ -61,7 +61,7 @@ public class TbBdRecordController extends BaseController { */ @PutMapping public AjaxResult edit(@RequestBody @NotNull(message = "参数不能为空") @Valid TbBdRecord tbBdRecord) { - return toAjax(tbBdRecordService.updateByPrimaryKeySelective(tbBdRecord)); + return tbBdRecordService.updateByPrimaryKeySelective(tbBdRecord); } @@ -73,7 +73,17 @@ public class TbBdRecordController extends BaseController { */ @DeleteMapping("/{id}") public AjaxResult deleteById(@PathVariable("id") Long id) { - return toAjax(tbBdRecordService.deleteByPrimaryKey(id)); + return tbBdRecordService.deleteByPrimaryKey(id); + } + + /** + * 审核 + * @param tbBdRecord + * @return + */ + @PostMapping("/approve") + public AjaxResult approve(@RequestBody @NotNull(message = "参数不能为空") @Valid TbBdRecord tbBdRecord) { + return tbBdRecordService.approve(tbBdRecord); } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbDeviceController.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbDeviceController.java index c10e85f..d8fea76 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbDeviceController.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbDeviceController.java @@ -51,7 +51,7 @@ public class TbDeviceController extends BaseController { */ @PostMapping public AjaxResult add(@RequestBody TbDevice tbDevice) { - return toAjax(tbDeviceService.insertSelective(tbDevice)); + return tbDeviceService.insertSelective(tbDevice); } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbPeopleController.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbPeopleController.java index 3b1f053..d97023b 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbPeopleController.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbPeopleController.java @@ -144,7 +144,7 @@ public class TbPeopleController extends BaseController { @PostMapping("/importData") public AjaxResult importData(MultipartFile file) { - return tbPeopleService.importTbProPower(file); + return tbPeopleService.importTbPeople(file); } /** diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProPowerController.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProPowerController.java index 972d193..f9f6309 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProPowerController.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbProPowerController.java @@ -1,6 +1,5 @@ package com.bonus.base.controller; -import com.bonus.base.domain.TbProDepart; import com.bonus.base.domain.TbProPower; import com.bonus.base.service.TbProPowerService; import com.bonus.common.core.utils.poi.ExcelUtil; diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbTeamController.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbTeamController.java index 2f6627f..500396b 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbTeamController.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbTeamController.java @@ -1,5 +1,6 @@ package com.bonus.base.controller; +import com.bonus.base.domain.TbPeople; import com.bonus.base.domain.TbTeam; import com.bonus.base.service.TbTeamService; import com.bonus.base.vo.TbDeviceVo; @@ -125,5 +126,15 @@ public class TbTeamController extends BaseController { public AjaxResult queryByPage(TbDeviceVo tbDeviceVo) { return AjaxResult.success(tbTeamService.selectDeviceList(tbDeviceVo)); } + + /** + * 从北京电科院数据库获取班组列表 + * @return 查询结果 + */ + @GetMapping("/getList") + public AjaxResult queryByPage() { + List list = tbTeamService.getList(); + return AjaxResult.success(list); + } } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbWarnConfigController.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbWarnConfigController.java index 831f61e..619a9eb 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbWarnConfigController.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/controller/TbWarnConfigController.java @@ -1,4 +1,5 @@ package com.bonus.base.controller; + import com.bonus.base.domain.TbWarnConfig; import com.bonus.base.service.TbWarnConfigService; import com.bonus.common.core.web.controller.BaseController; @@ -34,6 +35,11 @@ public class TbWarnConfigController extends BaseController { return success(tbWarnConfigService.selectByPrimaryKey(id)); } + /** + * 分页查询所有数据 + * @param tbWarnConfig + * @return + */ @GetMapping("/list") public AjaxResult queryByPage(TbWarnConfig tbWarnConfig) { startPage(); @@ -50,7 +56,7 @@ public class TbWarnConfigController extends BaseController { */ @PostMapping public AjaxResult add(@RequestBody @Valid TbWarnConfig tbWarnConfig) { - return toAjax(tbWarnConfigService.insertSelective(tbWarnConfig)); + return tbWarnConfigService.insertSelective(tbWarnConfig); } @@ -62,7 +68,7 @@ public class TbWarnConfigController extends BaseController { */ @PutMapping public AjaxResult edit(@RequestBody @Valid TbWarnConfig tbWarnConfig) { - return toAjax(tbWarnConfigService.updateByPrimaryKeySelective(tbWarnConfig)); + return tbWarnConfigService.updateByPrimaryKeySelective(tbWarnConfig); } @@ -74,7 +80,7 @@ public class TbWarnConfigController extends BaseController { */ @DeleteMapping("/{id}") public AjaxResult deleteById(@PathVariable("id") Long id) { - return toAjax(tbWarnConfigService.deleteByPrimaryKey(id)); + return tbWarnConfigService.deleteByPrimaryKey(id); } } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbBdRecord.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbBdRecord.java index 6fb5d31..f7c6e5c 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbBdRecord.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbBdRecord.java @@ -1,9 +1,11 @@ package com.bonus.base.domain; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.util.Date; +import java.util.List; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import lombok.Data; @@ -25,7 +27,6 @@ public class TbBdRecord implements Serializable { * 主键 */ @ApiModelProperty(value="主键") - @NotNull(message = "主键不能为null") private Long id; /** @@ -91,6 +92,7 @@ public class TbBdRecord implements Serializable { * 创建时间-申请时间 */ @ApiModelProperty(value="创建时间-申请时间") + @JsonFormat(pattern = "yyyy-MM-dd") private Date createTime; /** @@ -123,5 +125,15 @@ public class TbBdRecord implements Serializable { @ApiModelProperty(value="审核时间") private Date auditTime; + /** + * 申请接入边带数量 + */ + private Integer bdTotal; + + /** + * 边带设备记录 + */ + private List recordList; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbProPower.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbProPower.java index b8bd2f2..3ddde0a 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbProPower.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbProPower.java @@ -27,16 +27,19 @@ public class TbProPower implements Serializable { * 工程id */ private Long proId; + /** * 经度 */ @Excel(name = "杆塔经度") - private String lat; + private String lon; + /** - * 维度 + * 纬度 */ @Excel(name = "杆塔纬度") - private String lon; + private String lat; + /** * 是否删除 */ diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbWarnConfig.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbWarnConfig.java index 22ce796..f3076d1 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbWarnConfig.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/domain/TbWarnConfig.java @@ -31,6 +31,12 @@ public class TbWarnConfig implements Serializable { @ApiModelProperty(value="类型(来源码表-设备类型)") private Integer configuType; + /** + * 类型(来源码表-设备类型) + */ + @ApiModelProperty(value="类型(来源码表-设备类型)") + private String typeName; + /** * 配置名称 */ @@ -50,6 +56,9 @@ public class TbWarnConfig implements Serializable { @ApiModelProperty(value="阈值1-min") private BigDecimal configVal1Min; + @ApiModelProperty(value="阈值1组合") + private String configVal1Str; + /** * 阈值2-max */ @@ -62,6 +71,9 @@ public class TbWarnConfig implements Serializable { @ApiModelProperty(value="阈值2-min") private BigDecimal configVal2Min; + @ApiModelProperty(value="阈值2组合") + private String configVal2Str; + /** * 阈值3-max */ @@ -74,6 +86,9 @@ public class TbWarnConfig implements Serializable { @ApiModelProperty(value="阈值3-min") private BigDecimal configVal3Min; + @ApiModelProperty(value="阈值3组合") + private String configVal3Str; + /** * 阈值4-max */ @@ -86,6 +101,9 @@ public class TbWarnConfig implements Serializable { @ApiModelProperty(value="阈值4-min") private BigDecimal configVal4Min; + @ApiModelProperty(value="阈值4组合") + private String configVal4Str; + /** * 阈值5-max */ @@ -98,6 +116,9 @@ public class TbWarnConfig implements Serializable { @ApiModelProperty(value="阈值5-min") private BigDecimal configVal5Min; + @ApiModelProperty(value="阈值5组合") + private String configVal5Str; + /** * 阈值6-max */ @@ -110,6 +131,9 @@ public class TbWarnConfig implements Serializable { @ApiModelProperty(value="阈值6-min") private BigDecimal configVal6Min; + @ApiModelProperty(value="阈值6组合") + private String configVal6Str; + /** * 删除状态 */ diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdDeviceRecordMapper.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdDeviceRecordMapper.java index 341027e..e0dcc80 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdDeviceRecordMapper.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdDeviceRecordMapper.java @@ -31,4 +31,7 @@ public interface TbBdDeviceRecordMapper { List getAll(TbBdDeviceRecord record); + int updateById(Long id); + + TbBdDeviceRecord selectByName(TbBdDeviceRecord deviceRecord); } \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdRecordMapper.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdRecordMapper.java index 8e31571..40b81bf 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdRecordMapper.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbBdRecordMapper.java @@ -1,7 +1,10 @@ package com.bonus.base.mapper; +import com.bonus.base.domain.TbBdDeviceRecord; import com.bonus.base.domain.TbBdRecord; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @@ -32,4 +35,5 @@ public interface TbBdRecordMapper { List getAll(TbBdRecord record); + TbBdRecord selectByName(TbBdRecord record); } \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbDeviceMapper.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbDeviceMapper.java index 1cb101b..b5b4758 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbDeviceMapper.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbDeviceMapper.java @@ -29,4 +29,11 @@ public interface TbDeviceMapper { List getAll(TbDevice record); int updateBatch(List list); + + /** + * 根据设备编码查询设备信息 + * @param record + * @return + */ + TbDevice selectByDevCode(TbDevice record); } \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbPeopleMapper.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbPeopleMapper.java index 51fc1d5..0e0cad0 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbPeopleMapper.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbPeopleMapper.java @@ -59,11 +59,5 @@ public interface TbPeopleMapper { */ TbPeople queryByName(TbPeople tbPeople); - /** - * 批量新增或按主键更新数据 - * @param tbPeople - * @return - */ - int insertOrUpdate(TbPeople tbPeople); } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbWarnConfigMapper.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbWarnConfigMapper.java index dc06d5c..017b408 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbWarnConfigMapper.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/mapper/TbWarnConfigMapper.java @@ -33,4 +33,11 @@ public interface TbWarnConfigMapper { int updateByPrimaryKey(TbWarnConfig record); int updateBatch(List list); + + /** + * 根据配置名称查询 + * @param record + * @return + */ + TbWarnConfig selectByName(TbWarnConfig record); } \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbBdRecordService.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbBdRecordService.java index 76ce0a8..6e8662a 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbBdRecordService.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbBdRecordService.java @@ -1,6 +1,8 @@ package com.bonus.base.service; import com.bonus.base.domain.TbBdRecord; +import com.bonus.common.core.web.domain.AjaxResult; + import java.util.List; /** *@PackagePath: com.bonus.base.service @@ -11,22 +13,29 @@ import java.util.List; */ public interface TbBdRecordService{ - int deleteByPrimaryKey(Long id); + AjaxResult deleteByPrimaryKey(Long id); - int deleteByPrimaryKeyIn(List list); + int deleteByPrimaryKeyIn(List list); - int insert(TbBdRecord record); + int insert(TbBdRecord record); - int insertSelective(TbBdRecord record); + AjaxResult insertSelective(TbBdRecord record); - TbBdRecord selectByPrimaryKey(Long id); + TbBdRecord selectByPrimaryKey(Long id); - int updateByPrimaryKeySelective(TbBdRecord record); + AjaxResult updateByPrimaryKeySelective(TbBdRecord record); - int updateByPrimaryKey(TbBdRecord record); + int updateByPrimaryKey(TbBdRecord record); - int updateBatch(List list); + int updateBatch(List list); - List getAll(TbBdRecord record); + List getAll(TbBdRecord record); -} + /** + * 审核 + * + * @param tbBdRecord + * @return + */ + AjaxResult approve(TbBdRecord tbBdRecord); + } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbDeviceService.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbDeviceService.java index e21126a..7953ca7 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbDeviceService.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbDeviceService.java @@ -2,7 +2,9 @@ package com.bonus.base.service; import java.util.List; import com.bonus.base.domain.TbDevice; - /** +import com.bonus.common.core.web.domain.AjaxResult; + +/** *@PackagePath: com.bonus.base.service *@author : 阮世耀 *@version : 1.0 @@ -15,7 +17,7 @@ public interface TbDeviceService{ int insert(TbDevice record); - int insertSelective(TbDevice record); + AjaxResult insertSelective(TbDevice record); TbDevice selectByPrimaryKey(Long id); diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbPeopleService.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbPeopleService.java index 39cc81a..4b616e7 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbPeopleService.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbPeopleService.java @@ -74,5 +74,5 @@ public interface TbPeopleService { * @param file * @return */ - AjaxResult importTbProPower(MultipartFile file); + AjaxResult importTbPeople(MultipartFile file); } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbTeamService.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbTeamService.java index abc5636..62ac121 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbTeamService.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbTeamService.java @@ -80,7 +80,15 @@ public interface TbTeamService { /** * 智能安全帽列表查询 + * @param tbDeviceVo * @return */ List selectDeviceList(TbDeviceVo tbDeviceVo); + + /** + * 从北京电科院数据库获取班组列表 + * @return + */ + List getList(); + } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbWarnConfigService.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbWarnConfigService.java index bb9399d..58d3199 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbWarnConfigService.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/TbWarnConfigService.java @@ -1,6 +1,7 @@ package com.bonus.base.service; import com.bonus.base.domain.TbWarnConfig; +import com.bonus.common.core.web.domain.AjaxResult; import java.util.List; @@ -10,17 +11,17 @@ import java.util.List; */ public interface TbWarnConfigService{ - int deleteByPrimaryKey(Long id); + AjaxResult deleteByPrimaryKey(Long id); int deleteByPrimaryKeyIn(List list); int insert(TbWarnConfig record); - int insertSelective(TbWarnConfig record); + AjaxResult insertSelective(TbWarnConfig record); TbWarnConfig selectByPrimaryKey(Long id); - int updateByPrimaryKeySelective(TbWarnConfig record); + AjaxResult updateByPrimaryKeySelective(TbWarnConfig record); int updateByPrimaryKey(TbWarnConfig record); diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbBdRecordServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbBdRecordServiceImpl.java index 3908345..661c0a2 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbBdRecordServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbBdRecordServiceImpl.java @@ -1,13 +1,27 @@ package com.bonus.base.service.impl; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.bonus.base.config.ExceptionEnum; +import com.bonus.base.domain.TbBdDeviceRecord; +import com.bonus.base.mapper.TbBdDeviceRecordMapper; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.utils.encryption.Sm4Utils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; import com.bonus.base.domain.TbBdRecord; + +import java.util.Date; import java.util.List; +import java.util.stream.Collectors; + import com.bonus.base.mapper.TbBdRecordMapper; import com.bonus.base.service.TbBdRecordService; +import org.springframework.transaction.annotation.Transactional; + /** *@PackagePath: com.bonus.base.service.impl *@author : 阮世耀 @@ -21,9 +35,21 @@ public class TbBdRecordServiceImpl implements TbBdRecordService{ @Autowired private TbBdRecordMapper tbBdRecordMapper; + @Autowired + private TbBdDeviceRecordMapper tbBdDeviceRecordMapper; + @Override - public int deleteByPrimaryKey(Long id) { - return tbBdRecordMapper.deleteByPrimaryKey(id); + @Transactional(rollbackFor = Exception.class) + public AjaxResult deleteByPrimaryKey(Long id) { + //先清除设备绑定记录id,在进行删除 + int result = 0; + //根据前端传入的id,删除设备绑定记录 + result += tbBdDeviceRecordMapper.updateById(id); + result += tbBdRecordMapper.deleteByPrimaryKey(id); + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error(ExceptionEnum.DELETE_TO_DATABASE.getCode(), ExceptionEnum.DELETE_TO_DATABASE.getMsg()); } @Override @@ -37,18 +63,103 @@ public class TbBdRecordServiceImpl implements TbBdRecordService{ } @Override - public int insertSelective(TbBdRecord record) { - return tbBdRecordMapper.insertSelective(record); + @Transactional(rollbackFor = Exception.class) + public AjaxResult insertSelective(TbBdRecord record) { + //根据项目部和工程判断,同项目部和工程只可接入一次申请 + TbBdRecord tbBdRecord = tbBdRecordMapper.selectByName(record); + if (tbBdRecord != null){ + return AjaxResult.error("该项目部和工程已申请,请勿重复申请"); + } + int result = 0; + //返回主键id + //插入前对手机号进行sm4加密 + record.setRelPhone(Sm4Utils.encode(record.getRelPhone())); + //初始状态赋值待审核 + record.setAuditStatus(0); + record.setCreateUser(SecurityUtils.getUserId()); + result += tbBdRecordMapper.insertSelective(record); + //插入设备记录 + if (record.getRecordList() != null && record.getRecordList().size() > 0) { + for (TbBdDeviceRecord deviceRecord : record.getRecordList()) { + deviceRecord.setRecordId(record.getId()); + if (StringUtils.isNotBlank(deviceRecord.getDevUserPhone())) { + deviceRecord.setDevUserPhone(Sm4Utils.encode(deviceRecord.getDevUserPhone())); + } + //根据设备名称或编码唯一校验 + TbBdDeviceRecord tbBdDeviceRecord = tbBdDeviceRecordMapper.selectByName(deviceRecord); + if (tbBdDeviceRecord != null) { + return AjaxResult.error(tbBdDeviceRecord.getDevName() + "设备名称或编码重复,请勿重复添加"); + } + result += tbBdDeviceRecordMapper.insert(deviceRecord); + } + } + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error(ExceptionEnum.SAVE_TO_DATABASE.getCode(), ExceptionEnum.SAVE_TO_DATABASE.getMsg()); } @Override public TbBdRecord selectByPrimaryKey(Long id) { - return tbBdRecordMapper.selectByPrimaryKey(id); + TbBdRecord tbBdRecord = tbBdRecordMapper.selectByPrimaryKey(id); + if (tbBdRecord != null) { + //对外层手机号进行解密处理 + tbBdRecord.setRelPhone(Sm4Utils.decode(tbBdRecord.getRelPhone())); + //查询设备绑定记录 + TbBdDeviceRecord record = new TbBdDeviceRecord(); + record.setRecordId(id); + List list = tbBdDeviceRecordMapper.getAll(record); + if (CollectionUtils.isNotEmpty(list)) { + for (TbBdDeviceRecord deviceRecord : list) { + //对内层手机号进行解密处理 + deviceRecord.setDevUserPhone(Sm4Utils.decode(deviceRecord.getDevUserPhone())); + } + tbBdRecord.setRecordList(list); + } + } + return tbBdRecord; } @Override - public int updateByPrimaryKeySelective(TbBdRecord record) { - return tbBdRecordMapper.updateByPrimaryKeySelective(record); + @Transactional(rollbackFor = Exception.class) + public AjaxResult updateByPrimaryKeySelective(TbBdRecord record) { + //根据项目部和工程判断,同项目部和工程只可接入一次申请 + TbBdRecord tbBdRecord = tbBdRecordMapper.selectByName(record); + if(tbBdRecord != null && !tbBdRecord.getId().equals(record.getId())){ + return AjaxResult.error("该项目部和工程已申请,请勿重复申请"); + } + //校验内层设备名称或编码重复性 + if (record.getRecordList() != null && record.getRecordList().size() > 0) { + for (TbBdDeviceRecord deviceRecord : record.getRecordList()) { + TbBdDeviceRecord tbBdDeviceRecord = tbBdDeviceRecordMapper.selectByName(deviceRecord); + if (tbBdDeviceRecord != null && !tbBdDeviceRecord.getRecordId().equals(deviceRecord.getId())) { + return AjaxResult.error(tbBdDeviceRecord.getDevName() + "设备名称或编码重复,请勿重复添加"); + } + } + } + int result = 0; + //根据前端传入的id,删除设备绑定记录 + result += tbBdDeviceRecordMapper.updateById(record.getId()); + //插入前对手机号进行sm4加密 + record.setRelPhone(Sm4Utils.encode(record.getRelPhone())); + //初始状态赋值待审核 + record.setAuditStatus(0); + record.setUpdateUser(SecurityUtils.getUserId()); + result += tbBdRecordMapper.updateByPrimaryKeySelective(record); + //插入设备记录 + if (record.getRecordList() != null && record.getRecordList().size() > 0) { + for (TbBdDeviceRecord deviceRecord : record.getRecordList()) { + deviceRecord.setRecordId(record.getId()); + if (StringUtils.isNotBlank(deviceRecord.getDevUserPhone())) { + deviceRecord.setDevUserPhone(Sm4Utils.encode(deviceRecord.getDevUserPhone())); + } + result += tbBdDeviceRecordMapper.insert(deviceRecord); + } + } + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error(ExceptionEnum.UPDATE_TO_DATABASE.getCode(), ExceptionEnum.UPDATE_TO_DATABASE.getMsg()); } @Override @@ -61,11 +172,34 @@ public class TbBdRecordServiceImpl implements TbBdRecordService{ return tbBdRecordMapper.updateBatch(list); } + @Override public List getAll(TbBdRecord record){ - return tbBdRecordMapper.getAll(record); - } - + List list = tbBdRecordMapper.getAll(record); + if (list != null && list.size() > 0) { + List recordList = list.stream().filter(tbBdRecord -> tbBdRecord.getDepartName() != null).collect(Collectors.toList()); + for (TbBdRecord tbBdRecord : recordList) { + //对手机号进行解密处理 + tbBdRecord.setRelPhone(Sm4Utils.decode(tbBdRecord.getRelPhone())); + } + } + return list; + } + /** + * 审核 + * @param tbBdRecord + * @return + */ + @Override + public AjaxResult approve(TbBdRecord tbBdRecord) { + tbBdRecord.setAuditUser(SecurityUtils.getUserId()); + tbBdRecord.setAuditTime(new Date()); + int result = tbBdRecordMapper.updateByPrimaryKeySelective(tbBdRecord); + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error("审核失败,请联系管理员"); + } } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbDeviceServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbDeviceServiceImpl.java index 8702a92..c51ed4c 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbDeviceServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbDeviceServiceImpl.java @@ -1,5 +1,7 @@ package com.bonus.base.service.impl; +import com.bonus.base.config.ExceptionEnum; +import com.bonus.common.core.web.domain.AjaxResult; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; @@ -35,8 +37,17 @@ public class TbDeviceServiceImpl implements TbDeviceService{ } @Override - public int insertSelective(TbDevice record) { - return tbDeviceMapper.insertSelective(record); + public AjaxResult insertSelective(TbDevice record) { + //根据传入的devCode判重,确保唯一性 + TbDevice tbDevice = tbDeviceMapper.selectByDevCode(record); + if (tbDevice != null) { + return AjaxResult.error(ExceptionEnum.NAME_DUPLICATE.getCode(), ExceptionEnum.NAME_DUPLICATE.getMsg()); + } + int result = tbDeviceMapper.insertSelective(record); + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error(ExceptionEnum.SAVE_TO_DATABASE.getCode(), ExceptionEnum.SAVE_TO_DATABASE.getMsg()); } @Override diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbPeopleServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbPeopleServiceImpl.java index a8496d4..cd02c0b 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbPeopleServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbPeopleServiceImpl.java @@ -5,7 +5,6 @@ import com.alibaba.nacos.common.utils.CollectionUtils; import com.bonus.base.config.Constants; import com.bonus.base.config.ExceptionEnum; import com.bonus.base.domain.TbPeople; -import com.bonus.base.domain.TbProPower; import com.bonus.base.mapper.TbPeopleMapper; import com.bonus.base.service.TbPeopleService; import com.bonus.common.core.utils.StringUtils; @@ -15,12 +14,8 @@ import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -29,7 +24,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.security.Security; import java.sql.*; import java.util.ArrayList; import java.util.List; @@ -80,11 +74,6 @@ public class TbPeopleServiceImpl implements TbPeopleService { return peopleList; } - public static void main(String[] args) { - - System.out.println(Sm4Utils.decode("495d83e0f1f5c928669e1d18bc0f889d806e129ca685d1140c26a10c3e938299")); - - } /** * 新增数据 * @@ -101,9 +90,8 @@ public class TbPeopleServiceImpl implements TbPeopleService { return AjaxResult.error(ExceptionEnum.INVALID_PHONE_NUMBER_FORMAT.getCode(), ExceptionEnum.INVALID_PHONE_NUMBER_FORMAT.getMsg()); } //校验前端传入的身份证号 - String CREDENTIALS_CODE_PATTERN = "^[1-9]\\d{5}[1-9]\\d{3}((0[1-9])|(1[0-2]))(0[1-9]|([1|2][0-9])|3[0-1])((\\d{4})|\\d{3}X)$"; if (StringUtils.isNotBlank(tbPeople.getIdCard())) { - if (!Pattern.matches(CREDENTIALS_CODE_PATTERN, tbPeople.getIdCard())) { + if (!Pattern.matches(Constants.CREDENTIALS_CODE_PATTERN, tbPeople.getIdCard())) { return AjaxResult.error(ExceptionEnum.INVALID_ID_CARD_FORMAT.getCode(), ExceptionEnum.INVALID_ID_CARD_FORMAT.getMsg()); } } @@ -151,9 +139,8 @@ public class TbPeopleServiceImpl implements TbPeopleService { return AjaxResult.error(ExceptionEnum.INVALID_PHONE_NUMBER_FORMAT.getCode(), ExceptionEnum.INVALID_PHONE_NUMBER_FORMAT.getMsg()); } //校验前端传入的身份证号 - String CREDENTIALS_CODE_PATTERN = "^[1-9]\\d{5}[1-9]\\d{3}((0[1-9])|(1[0-2]))(0[1-9]|([1|2][0-9])|3[0-1])((\\d{4})|\\d{3}X)$"; if (StringUtils.isNotBlank(tbPeople.getIdCard())) { - if (!Pattern.matches(CREDENTIALS_CODE_PATTERN, tbPeople.getIdCard())) { + if (!Pattern.matches(Constants.CREDENTIALS_CODE_PATTERN, tbPeople.getIdCard())) { return AjaxResult.error(ExceptionEnum.INVALID_ID_CARD_FORMAT.getCode(), ExceptionEnum.INVALID_ID_CARD_FORMAT.getMsg()); } } @@ -282,7 +269,7 @@ public class TbPeopleServiceImpl implements TbPeopleService { * @return */ @Override - public AjaxResult importTbProPower(MultipartFile file) { + public AjaxResult importTbPeople(MultipartFile file) { String fileName = file.getOriginalFilename(); if (fileName != null) { String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1); @@ -294,18 +281,15 @@ public class TbPeopleServiceImpl implements TbPeopleService { try { InputStream inputStream = file.getInputStream(); Workbook workbook = new XSSFWorkbook(inputStream); - Sheet sheet = workbook.getSheetAt(0); // 得到Excel的行数 int totalRows = sheet.getPhysicalNumberOfRows(); - // 检查是否有行数 - if (totalRows <= 0) { + if (totalRows <= 1) { throw new IllegalArgumentException("Excel文件中没有数据,请检查后重新导入"); } // 读取第一行表头 Row headerRow = sheet.getRow(0); - if (headerRow == null) { throw new IllegalArgumentException("文件中没有表头"); } @@ -316,37 +300,25 @@ public class TbPeopleServiceImpl implements TbPeopleService { throw new IllegalArgumentException("表头列数与预期不符,请检查导入模板"); } // 读取表头内容并验证每一列 - for (int cellNum = 0; cellNum < totalCells; cellNum++) { - Cell cell = headerRow.getCell(cellNum); - // 获取单元格内容并去除首尾空格 - String headerValue = cell.getStringCellValue().trim(); - // 根据列索引进行验证 - switch (cellNum) { - case 0: - if (!"杆塔名称".equals(headerValue)) { - throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); - } - break; - case 1: - if (!"杆塔经度".equals(headerValue)) { - throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); - } - break; - case 2: - if (!"杆塔纬度".equals(headerValue)) { - throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); - } - break; - default: - break; - } - } + extracted(headerRow, totalCells); + //读取Excel表格数据,做非空及格式判断 + extractedCell(sheet, totalRows, totalCells); ExcelUtil util = new ExcelUtil<>(TbPeople.class); - List tbPeopleList = util.importExcel(file.getInputStream()); + List tbPeopleList = util.importExcel(inputStream); int result = 0; for (TbPeople tbPeople : tbPeopleList) { - tbPeople.setCreateUser(SecurityUtils.getUserId()); - result += tbPeopleDao.insertOrUpdate(tbPeople); + TbPeople people = tbPeopleDao.queryByName(tbPeople); + if (people != null) { + //进行更新操作 + tbPeople.setId(people.getId()); + tbPeople.setUpdateUser(SecurityUtils.getUserId()); + tbPeople.setDelFlag(0); + result += tbPeopleDao.update(tbPeople); + } else { + //新增操作 + tbPeople.setCreateUser(SecurityUtils.getUserId()); + result += tbPeopleDao.insert(tbPeople); + } } if (result > 0) { return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); @@ -356,4 +328,146 @@ public class TbPeopleServiceImpl implements TbPeopleService { } return AjaxResult.error(ExceptionEnum.SAVE_TO_DATABASE.getCode(), ExceptionEnum.SAVE_TO_DATABASE.getMsg()); } + + /** + * 读取Excel表格数据,做非空判断 + * @param sheet + * @param totalRows + * @param totalCells + */ + private void extractedCell(Sheet sheet, int totalRows, int totalCells) { + //读取Excel表格数据,做非空判断 + // 循环Excel行数 + DataFormatter dataFormatter = new DataFormatter(); + for (int r = 1; r < totalRows; r++) { + Row row = sheet.getRow(r); + // 循环Excel列数 + for (int c = 0; c < totalCells; c++) { + Cell cell = row.getCell(c); + String cellValue = dataFormatter.formatCellValue(row.getCell(c)); + switch (c) { + case 0: + case 2: + checkBlank(cell, r, c); + break; + case 1: + checkBlank(cell, r, c); + checkGender(cellValue, r, c); + break; + case 3: + checkBlank(cell, r, c); + checkCredentialsCode(cellValue, r, c); + break; + case 4: + checkBlank(cell, r, c); + checkPhone(cellValue, r, c); + break; + default: + throw new IllegalArgumentException( + String.format("第 %d 行,第 %d 列超出范围,请检查后重新导入", r + 1, c + 1)); + } + } + } + } + + /** + * 读取Excel表头模板方法抽取 + * @param headerRow + * @param totalCells + */ + private void extracted(Row headerRow, int totalCells) { + for (int cellNum = 0; cellNum < totalCells; cellNum++) { + Cell cell = headerRow.getCell(cellNum); + // 获取单元格内容并去除首尾空格 + String headerValue = cell.getStringCellValue().trim(); + // 根据列索引进行验证 + switch (cellNum) { + case 0: + if (!"姓名".equals(headerValue)) { + throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); + } + break; + case 1: + if (!"性别(0 女 1 男)".equals(headerValue)) { + throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); + } + break; + case 2: + if (!"岗位工种".equals(headerValue)) { + throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); + } + break; + case 3: + if (!"身份证号码".equals(headerValue)) { + throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); + } + break; + case 4: + if (!"电话".equals(headerValue)) { + throw new IllegalArgumentException("第 " + (cellNum + 1) + " 列表头列名与预期不符,请检查导入模板"); + } + break; + default: + break; + } + } + } + + /** + * 检查数据是否为空 + * @param cell + * @param rowIndex + * @param colIndex + */ + private void checkBlank(Cell cell, int rowIndex, int colIndex) { + if (cell == null) { + throw new IllegalArgumentException( + String.format("第 %d 行,第 %d 列数据为空,请检查后重新导入", rowIndex + 1, colIndex + 1)); + } + } + + /** + * 检查性别是否合法 + * @param cellValue + * @param rowIndex + * @param colIndex + */ + private void checkGender(String cellValue, int rowIndex, int colIndex) { + try { + Integer gender = Integer.parseInt(cellValue); + if (gender != 0 && gender != 1) { + throw new IllegalArgumentException( + String.format("第 %d 行,第 %d 列性别格式不正确,请检查后重新导入", rowIndex + 1, colIndex + 1)); + } + } catch (NumberFormatException e) { + throw new IllegalArgumentException( + String.format("第 %d 行,第 %d 列性别格式不正确,请检查后重新导入", rowIndex + 1, colIndex + 1)); + } + } + + /** + * 检查身份证号码格式 + * @param cellValue + * @param rowIndex + * @param colIndex + */ + private void checkCredentialsCode(String cellValue, int rowIndex, int colIndex) { + if (!Pattern.matches(Constants.CREDENTIALS_CODE_PATTERN, cellValue)) { + throw new IllegalArgumentException( + String.format("第 %d 行,第 %d 列身份证号码格式不正确,请检查后重新导入", rowIndex + 1, colIndex + 1)); + } + } + + /** + * 检查电话号码格式 + * @param cellValue + * @param rowIndex + * @param colIndex + */ + private void checkPhone(String cellValue, int rowIndex, int colIndex) { + if (!PhoneUtil.isMobile(cellValue)) { + throw new IllegalArgumentException( + String.format("第 %d 行,第 %d 列电话号码格式不正确,请检查后重新导入", rowIndex + 1, colIndex + 1)); + } + } } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbProPowerServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbProPowerServiceImpl.java index ea2186e..2384d38 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbProPowerServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbProPowerServiceImpl.java @@ -12,10 +12,7 @@ import com.bonus.common.core.utils.poi.ExcelUtil; import com.bonus.common.core.web.domain.AjaxResult; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -149,7 +146,7 @@ public class TbProPowerServiceImpl implements TbProPowerService { int totalRows = sheet.getPhysicalNumberOfRows(); // 检查是否有行数 - if (totalRows <= 0) { + if (totalRows <= 1) { throw new IllegalArgumentException("Excel文件中没有数据,请检查后重新导入"); } // 读取第一行表头 @@ -164,7 +161,7 @@ public class TbProPowerServiceImpl implements TbProPowerService { if (totalCells != 3) { throw new IllegalArgumentException("表头列数与预期不符,请检查导入模板"); } - // 读取表头内容并验证每一列 + // 读取表头内容并验证每一列,看是否符合模版要求 for (int cellNum = 0; cellNum < totalCells; cellNum++) { Cell cell = headerRow.getCell(cellNum); // 获取单元格内容并去除首尾空格 @@ -190,6 +187,16 @@ public class TbProPowerServiceImpl implements TbProPowerService { break; } } + //读取Excel表格数据,做非空判断 + // 循环Excel行数 + for (int r = 1; r < totalRows; r++) { + Row row = sheet.getRow(r); + // 循环Excel列数 + for (int c = 0; c < totalCells; c++) { + Cell cell = row.getCell(c); + checkCellNotEmpty(cell, r + 1, c + 1); + } + } ExcelUtil util = new ExcelUtil<>(TbProPower.class); List tbProPowerList = util.importExcel(file.getInputStream()); int result = 0; @@ -200,6 +207,7 @@ public class TbProPowerServiceImpl implements TbProPowerService { if (power != null) { //进行更新操作 tbProPower.setId(power.getId()); + tbProPower.setDelFlag(0); result += tbProPowerDao.update(tbProPower); } else { result += tbProPowerDao.insert(tbProPower); @@ -214,6 +222,18 @@ public class TbProPowerServiceImpl implements TbProPowerService { return AjaxResult.error(ExceptionEnum.SAVE_TO_DATABASE.getCode(), ExceptionEnum.SAVE_TO_DATABASE.getMsg()); } + /** + * 提取方法用于检查单元格内容是否为空,并抛出异常 + * @param cell + * @param rowNum + * @param colNum + */ + private void checkCellNotEmpty(Cell cell, int rowNum, int colNum) { + if (cell == null) { + throw new IllegalArgumentException("Excel中第 " + rowNum + " 行第 " + colNum + " 列数据为空,请检查后重新导入"); + } + } + /** * 导入模版下载 * @param response diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbTeamServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbTeamServiceImpl.java index 118d12c..f6aa4b2 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbTeamServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbTeamServiceImpl.java @@ -1,12 +1,17 @@ package com.bonus.base.service.impl; import com.alibaba.nacos.common.utils.CollectionUtils; +import com.bonus.base.config.Constants; import com.bonus.base.config.ExceptionEnum; import com.bonus.base.domain.TbPeople; +import com.bonus.base.domain.TbProject; import com.bonus.base.domain.TbTeam; +import com.bonus.base.mapper.TbPeopleMapper; +import com.bonus.base.mapper.TbProjectMapper; import com.bonus.base.mapper.TbTeamMapper; import com.bonus.base.service.TbTeamService; import com.bonus.base.vo.TbDeviceVo; +import com.bonus.base.vo.TbProjectVo; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.common.core.web.domain.AjaxResult; @@ -15,6 +20,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.sql.*; +import java.util.ArrayList; import java.util.List; /** @@ -28,6 +35,12 @@ public class TbTeamServiceImpl implements TbTeamService { @Resource private TbTeamMapper tbTeamDao; + @Resource + private TbPeopleMapper tbPeopleMapper; + + @Resource + private TbProjectMapper tbProjectMapper; + /** * 通过ID查询单条数据 * @@ -36,7 +49,6 @@ public class TbTeamServiceImpl implements TbTeamService { */ @Override public List queryById(Long id) { - //TbTeam tbTeam = tbTeamDao.queryById(id); List list = tbTeamDao.selectList(id); if (CollectionUtils.isNotEmpty(list)) { list.forEach(tbPeople -> { @@ -219,4 +231,70 @@ public class TbTeamServiceImpl implements TbTeamService { public List selectDeviceList(TbDeviceVo tbDeviceVo) { return tbTeamDao.selectDeviceList(tbDeviceVo); } + + /** + * 从北京电科院数据库获取班组列表 + * @return + */ + @Override + public List getList() { + String sourceUrl = Constants.SOURCEURL; + String sourceUser = Constants.SOURCEUSER; + String sourcePassword = Constants.SOURCEPASSWORD; + List list = new ArrayList<>(); + try (Connection sourceConn = DriverManager.getConnection(sourceUrl, sourceUser, sourcePassword); + Statement selectStmt = sourceConn.createStatement()) { + + String selectQuery = "SELECT t1.working_team_name as teamName,t3.gender as sex,t3.id_card as idCard, " + + "t3.real_name as relName,t3.mobile as relPhone,t4.single_project_name as proName " + + "FROM dky_get_working_team t1 " + + "LEFT JOIN dky_get_working_team_member t2 ON t1.id = t2.team_id " + + "and t2.delete_flag = 0 and t2.position_code = 0900101 " + + "LEFT JOIN dky_get_personnel t3 ON t2.personnel_id = t3.id and t3.delete_flag = 0 " + + "LEFT JOIN dky_get_single_project t4 ON t1.single_project_code = t4.single_project_code and t4.delete_flag = 0 " + + "WHERE t1.delete_flag = 0"; + + try (ResultSet rs = selectStmt.executeQuery(selectQuery)) { + while (rs.next()) { + String teamName = rs.getString("teamName"); + String sex = rs.getString("sex"); + String relName = rs.getString("relName"); + String relPhone = rs.getString("relPhone"); + String proName = rs.getString("proName"); + String idCard = rs.getString("idCard"); + TbTeam tbTeam = new TbTeam(); + if (StringUtils.isBlank(teamName)) { + if (StringUtils.isNotBlank(relName)) { + //根据姓名去我们数据库查询,看是否存在此人员信息 + TbPeople people = new TbPeople(); + people.setRelName(relName); + people.setIdCard(idCard); + TbPeople tbPeople = tbPeopleMapper.queryByName(people); + if (tbPeople != null) { + tbTeam.setRelId(tbPeople.getId()); + tbTeam.setRelName(relName); + tbTeam.setRelPhone(tbPeople.getRelPhone()); + } + } + if (StringUtils.isNotBlank(proName)) { + //根据名称去查询 + TbProject tbProject = new TbProject(); + tbProject.setProName(proName); + TbProjectVo tbProjectVo = tbProjectMapper.selectByName(tbProject); + if (tbProjectVo != null) { + tbTeam.setProId(String.valueOf(tbProjectVo.getId())); + tbTeam.setProName(tbProjectVo.getProName()); + } + } + list.add(tbTeam); + } + } + } catch (SQLException e) { + throw new RuntimeException("Failed to execute SQL query", e); + } + } catch (SQLException e) { + throw new RuntimeException("Failed to connect to database", e); + } + return list; + } } diff --git a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbWarnConfigServiceImpl.java b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbWarnConfigServiceImpl.java index 53d210b..93e856f 100644 --- a/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbWarnConfigServiceImpl.java +++ b/bonus-modules/bonus-base/src/main/java/com/bonus/base/service/impl/TbWarnConfigServiceImpl.java @@ -1,6 +1,9 @@ package com.bonus.base.service.impl; +import com.bonus.base.config.ExceptionEnum; import com.bonus.base.domain.TbWarnConfig; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; @@ -22,8 +25,12 @@ public class TbWarnConfigServiceImpl implements TbWarnConfigService{ private TbWarnConfigMapper tbWarnConfigMapper; @Override - public int deleteByPrimaryKey(Long id) { - return tbWarnConfigMapper.deleteByPrimaryKey(id); + public AjaxResult deleteByPrimaryKey(Long id) { + int result = tbWarnConfigMapper.deleteByPrimaryKey(id); + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error(ExceptionEnum.DELETE_TO_DATABASE.getCode(), ExceptionEnum.DELETE_TO_DATABASE.getMsg()); } @Override @@ -37,8 +44,21 @@ public class TbWarnConfigServiceImpl implements TbWarnConfigService{ } @Override - public int insertSelective(TbWarnConfig record) { - return tbWarnConfigMapper.insertSelective(record); + public AjaxResult insertSelective(TbWarnConfig record) { + if (record == null || record.getConfigName() == null || record.getConfiguType() == null) { + return AjaxResult.error(ExceptionEnum.TO_PARAM_NULL.getCode(), ExceptionEnum.TO_PARAM_NULL.getMsg()); + } + //根据同类型,同名称规则判重 + TbWarnConfig tbWarnConfig = tbWarnConfigMapper.selectByName(record); + if (tbWarnConfig != null) { + return AjaxResult.error(ExceptionEnum.NAME_DUPLICATE.getCode(), ExceptionEnum.NAME_DUPLICATE.getMsg()); + } + record.setCreateUser(SecurityUtils.getUserId().intValue()); + int result = tbWarnConfigMapper.insertSelective(record); + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error(ExceptionEnum.SAVE_TO_DATABASE.getCode(), ExceptionEnum.SAVE_TO_DATABASE.getMsg()); } @Override @@ -47,8 +67,21 @@ public class TbWarnConfigServiceImpl implements TbWarnConfigService{ } @Override - public int updateByPrimaryKeySelective(TbWarnConfig record) { - return tbWarnConfigMapper.updateByPrimaryKeySelective(record); + public AjaxResult updateByPrimaryKeySelective(TbWarnConfig record) { + if (record == null || record.getConfigName() == null || record.getConfiguType() == null) { + return AjaxResult.error(ExceptionEnum.TO_PARAM_NULL.getCode(), ExceptionEnum.TO_PARAM_NULL.getMsg()); + } + //根据同类型,同名称规则判重 + TbWarnConfig tbWarnConfig = tbWarnConfigMapper.selectByName(record); + if (tbWarnConfig != null && !tbWarnConfig.getId().equals(record.getId())) { + return AjaxResult.error(ExceptionEnum.NAME_DUPLICATE.getCode(), ExceptionEnum.NAME_DUPLICATE.getMsg()); + } + record.setUpdateUser(SecurityUtils.getUserId().intValue()); + int result = tbWarnConfigMapper.updateByPrimaryKeySelective(record); + if (result > 0) { + return AjaxResult.success(ExceptionEnum.SUCCESS.getMsg(), result); + } + return AjaxResult.error(ExceptionEnum.UPDATE_TO_DATABASE.getCode(), ExceptionEnum.UPDATE_TO_DATABASE.getMsg()); } @Override @@ -63,10 +96,29 @@ public class TbWarnConfigServiceImpl implements TbWarnConfigService{ @Override public List getAll(TbWarnConfig record){ - return tbWarnConfigMapper.getAll(record); - } - - - - + List list = tbWarnConfigMapper.getAll(record); + if (list != null && list.size() > 0) { + for (TbWarnConfig tbWarnConfig : list) { + if (tbWarnConfig.getConfigVal1Min() != null && tbWarnConfig.getConfigVal1Max() != null) { + tbWarnConfig.setConfigVal1Str(tbWarnConfig.getConfigVal1Min() + "~" + tbWarnConfig.getConfigVal1Max()); + } + if (tbWarnConfig.getConfigVal2Min() != null && tbWarnConfig.getConfigVal2Max() != null) { + tbWarnConfig.setConfigVal2Str(tbWarnConfig.getConfigVal2Min() + "~" + tbWarnConfig.getConfigVal2Max()); + } + if (tbWarnConfig.getConfigVal3Min() != null && tbWarnConfig.getConfigVal3Max() != null) { + tbWarnConfig.setConfigVal3Str(tbWarnConfig.getConfigVal3Min() + "~" + tbWarnConfig.getConfigVal3Max()); + } + if (tbWarnConfig.getConfigVal4Min() != null && tbWarnConfig.getConfigVal4Max() != null) { + tbWarnConfig.setConfigVal4Str(tbWarnConfig.getConfigVal4Min() + "~" + tbWarnConfig.getConfigVal4Max()); + } + if (tbWarnConfig.getConfigVal5Min() != null && tbWarnConfig.getConfigVal5Max() != null) { + tbWarnConfig.setConfigVal5Str(tbWarnConfig.getConfigVal5Min() + "~" + tbWarnConfig.getConfigVal5Max()); + } + if (tbWarnConfig.getConfigVal6Min() != null && tbWarnConfig.getConfigVal6Max() != null) { + tbWarnConfig.setConfigVal6Str(tbWarnConfig.getConfigVal6Min() + "~" + tbWarnConfig.getConfigVal6Max()); + } + } + } + return list; + } } diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/TbBdDeviceRecordMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/TbBdDeviceRecordMapper.xml index 4dad0f1..aabe091 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/TbBdDeviceRecordMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/TbBdDeviceRecordMapper.xml @@ -24,17 +24,19 @@ from tb_bd_device_record where id = #{id,jdbcType=BIGINT} + delete from tb_bd_device_record where id = #{id,jdbcType=BIGINT} + - insert into tb_bd_device_record (id, record_id, dev_name, + insert into tb_bd_device_record (record_id, dev_name, dev_code, unit_name, area_name, dev_user, dev_user_phone) - values (#{id,jdbcType=BIGINT}, #{recordId,jdbcType=BIGINT}, #{devName,jdbcType=VARCHAR}, + values (#{recordId,jdbcType=BIGINT}, #{devName,jdbcType=VARCHAR}, #{devCode,jdbcType=VARCHAR}, #{unitName,jdbcType=VARCHAR}, #{areaName,jdbcType=VARCHAR}, #{devUser,jdbcType=VARCHAR}, #{devUserPhone,jdbcType=VARCHAR}) @@ -179,6 +181,12 @@ #{item.id,jdbcType=BIGINT} + + + update tb_bd_device_record + set record_id = null + where record_id = #{id} + delete from tb_bd_device_record where id in @@ -192,5 +200,23 @@ select from tb_bd_device_record + + + and record_id = #{recordId} + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/TbBdRecordMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/TbBdRecordMapper.xml index b7bf0c8..794330c 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/TbBdRecordMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/TbBdRecordMapper.xml @@ -33,11 +33,53 @@ from tb_bd_record where id = #{id,jdbcType=BIGINT} + + + + + - delete from tb_bd_record - where id = #{id,jdbcType=BIGINT} + update tb_bd_record + set del_flag = 1 + where id = #{id} + insert into tb_bd_record (id, depart_id, depart_name, @@ -53,13 +95,10 @@ #{updateTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=BIGINT}, #{auditUser,jdbcType=BIGINT}, #{auditTime,jdbcType=TIMESTAMP}) - + insert into tb_bd_record - - id, - depart_id, @@ -78,18 +117,14 @@ rel_phone, - del_flag, - audit_status, remarks, - create_time, - create_user, @@ -107,9 +142,6 @@ - - #{id,jdbcType=BIGINT}, - #{departId,jdbcType=BIGINT}, @@ -128,18 +160,14 @@ #{relPhone,jdbcType=VARCHAR}, - - #{delFlag,jdbcType=INTEGER}, - + 0, #{auditStatus,jdbcType=INTEGER}, #{remarks,jdbcType=VARCHAR}, - - #{createTime,jdbcType=TIMESTAMP}, - + NOW(), #{createUser,jdbcType=BIGINT}, @@ -157,6 +185,7 @@ + update tb_bd_record @@ -188,15 +217,7 @@ remarks = #{remarks,jdbcType=VARCHAR}, - - create_time = #{createTime,jdbcType=TIMESTAMP}, - - - create_user = #{createUser,jdbcType=BIGINT}, - - - update_time = #{updateTime,jdbcType=TIMESTAMP}, - + update_time = NOW(), update_user = #{updateUser,jdbcType=BIGINT}, @@ -322,10 +343,5 @@ - - + \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/TbDeviceMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/TbDeviceMapper.xml index bed6bd8..1183e30 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/TbDeviceMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/TbDeviceMapper.xml @@ -70,9 +70,7 @@ dev_warn, - del_flag, - logo_url, @@ -102,9 +100,7 @@ #{devWarn,jdbcType=INTEGER}, - - #{delFlag,jdbcType=INTEGER}, - + 0, #{logoUrl,jdbcType=VARCHAR}, @@ -165,6 +161,9 @@ from tb_device where del_flag = 0 + update tb_device diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/TbPeopleMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/TbPeopleMapper.xml index eb84824..87551e7 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/TbPeopleMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/TbPeopleMapper.xml @@ -99,40 +99,6 @@ - - INSERT INTO tb_people - - team_id, - rel_name, - rel_phone, - id_card, - post_code, - sex, - create_user, - create_time, - del_flag - - - #{teamId}, - #{relName}, - #{relPhone}, - #{idCard}, - #{postCode}, - #{sex}, - #{createUser}, - NOW(), - 0 - - ON DUPLICATE KEY UPDATE - team_id = VALUES(team_id), - rel_phone = VALUES(rel_phone), - post_code = VALUES(post_code), - sex = VALUES(sex), - create_user = VALUES(create_user), - create_time = NOW(), - del_flag = 0 - - update tb_people diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/TbProDepartMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/TbProDepartMapper.xml index c679f24..0fdf823 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/TbProDepartMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/TbProDepartMapper.xml @@ -53,6 +53,7 @@ where del_flag = '0' and tpd.id = #{id} + + + + + - INSERT INTO tb_pro_power diff --git a/bonus-modules/bonus-base/src/main/resources/mapper/TbWarnConfigMapper.xml b/bonus-modules/bonus-base/src/main/resources/mapper/TbWarnConfigMapper.xml index c0f7c2f..7bfcda8 100644 --- a/bonus-modules/bonus-base/src/main/resources/mapper/TbWarnConfigMapper.xml +++ b/bonus-modules/bonus-base/src/main/resources/mapper/TbWarnConfigMapper.xml @@ -25,19 +25,37 @@ + - id, configu_type, config_name, config_val1_max, config_val1_min, config_val2_max, - config_val2_min, config_val3_max, config_val3_min, config_val4_max, config_val4_min, - config_val5_max, config_val5_min, config_val6_max, config_val6_min, del_flag, create_time, - create_user, update_time, update_user + twc.id, + twc.configu_type, + sda.dict_label as typeName, + twc.config_name, + twc.config_val1_max, + twc.config_val1_min, + twc.config_val2_max, + twc.config_val2_min, + twc.config_val3_max, + twc.config_val3_min, + twc.config_val4_max, + twc.config_val4_min, + twc.config_val5_max, + twc.config_val5_min, + twc.config_val6_max, + twc.config_val6_min + @@ -66,9 +84,6 @@ insert into tb_warn_config - - id, - configu_type, @@ -111,26 +126,13 @@ config_val6_min, - del_flag, - - create_time, - create_user, - - update_time, - - - update_user, - - - #{id,jdbcType=BIGINT}, - #{configuType,jdbcType=INTEGER}, @@ -173,21 +175,11 @@ #{configVal6Min,jdbcType=DECIMAL}, - - #{delFlag,jdbcType=INTEGER}, - - - #{createTime,jdbcType=TIMESTAMP}, - + 0, + NOW(), #{createUser,jdbcType=INTEGER}, - - #{updateTime,jdbcType=TIMESTAMP}, - - - #{updateUser,jdbcType=INTEGER}, - @@ -239,21 +231,14 @@ del_flag = #{delFlag,jdbcType=INTEGER}, - - create_time = #{createTime,jdbcType=TIMESTAMP}, - - - create_user = #{createUser,jdbcType=INTEGER}, - - - update_time = #{updateTime,jdbcType=TIMESTAMP}, - + update_time = NOW(), update_user = #{updateUser,jdbcType=INTEGER}, where id = #{id,jdbcType=BIGINT} + update tb_warn_config @@ -394,10 +379,37 @@ - + select * from tb_warn_config where config_name = #{configName} and del_flag = 0 and configu_type = #{configuType} + + + \ No newline at end of file diff --git a/bonus-modules/bonus-base/src/main/resources/template/TbPeopleTemplate.xlsx b/bonus-modules/bonus-base/src/main/resources/template/TbPeopleTemplate.xlsx index e18c37f7353d2a0f81d6414bda793f49679477b4..9e5035bcf6748d742f428c2be9ad38cef670357a 100644 GIT binary patch delta 1372 zcmV-i1*7`YQqxkfo&f}TCS7Zjq5(F4SY_gkgyd{1wrNPB+uq)+>*_?o%kY2s@}HAz zc4+G06O64|l_MGv6o3+~tkgC~&*eOvqQE+?B(GZqIXZ$xv*Pw96Pk(Ez|yoDjH|!~ z-lQxOI!8O_G{e}69W>lVo=`sAw5H+CAI%nPF5dYTa7@S@ZoqNL9mgkOs0Sl|>XlLq zO8sH#P9Oz_8X8c}Vj5BW%{nlR{qsVXT#-%Xj@r-E*S&U2aSjLiV51z1? z6u&HvexJ1eVEMhdK%fmGR2{6^q;0Ck zF3-j}0jo}&*@m?J^*eShfT*fQQ5@Uf`TU)m=eJL#BnQw&s4Amz5K#gZSGlOR8U6k1 z{_2JjV_B6msVd0mGZ=ci`1oPoDE(-50G1#_Wiq<6ww{Hd;X5dq2~-Ug?i5Ow%;JAk zZ$ndSV7WIcWjKnWX;?B*(UxJR-@~DbLU33qzAvG&Er|xnEb2EqQJbFaDSsDVu33Y= z_IgevuG*b}FHSD>m4a(!RAB?I%CMDo>17(GXMUFag6NfCl}tbG>nkL#(YcL~!ajR< zdqH52JWbOCO>F{Rbt+B*6kms6mwSI>Rk>o8(Z$?n;6aCrc`h)DF7-r1kRZ#IDkZhj3(|Nt|YSJmz2V_0VO4S@?+C7#^c~RiH@&pif8XQCEUlh zJKBeDAR2X(odz6#bl1CqV`n~^1V>|JdDDE-nd8`>eiNkEqvP|MdDzC%XU^5zVy;y~ zuop3?J`Ka6Lt-$PHFH-;Jey!~aEHD_IIdveFm(o34~u9X9S?LHBiA zkgx1mRXdAo4EaV`?AU&`!;2FzEKz{|7E0NEg2n63T!Y=$q-HhfwRpjX#1>Fm;1%g_ z#*EfVTg`-Z)!vfbdluJa!&Scc53`X6=L!kct=CfV0000klYtT)e@{xoKp4gMf_E6c zy`5B0L}sQ7!4v2KhGc94nVFbxBD%A?x+n@3TnTPU7F`q+3DovB9g|(JV5AhGF5mC{ zfya8cIwdzM$HW>A-A({Rnb1aw>2tWeI6pW6f=-%9rq(D9cM72=_V*Z~BW>3phuFF7 zlu`_1r6qQ3rcCQxf7x71*UG$4G0T;VFjmUxlpY4bG1W3LKtfv>$KeP_VUp`Yoo%&X zmh*2jP{UsaveP8J zvY8G1V^zNmcB}RHvzfjAQQH0$KTt~p1QY-O00;nwPU1jGvzZe_5(IfBU2C)9B`g6O z)vec3@c;k-E&%`l6aWAK000000RSKX003u`C?|XYf|I2uHUX)V+$Wz2i-<`YvjPAB e50iu_R|1X)lfeWPlkzAp0*DEd!2}hPI4K)z$%cXe delta 1387 zcmV-x1(f>JQqxkfo&f}*{tqUTq5(F4*kt03gyd{1Hfc$s-QM1;>*_?o%kY2s@}HAz zc2HID3C5PS&Jm3W3P6immU@??=k+|CqQE+?C9i4?IXZ$xv*Pw96Acr!fu*S%Fs=j} zc$2nFG&$Nk*D#E&*n{FW@`U!`wl<18e>6MXaPiJ}fMY`LumZ;=cO0LDVKW$iQLmI@ zP&OZ?>I70?s6c^s7So90Z`OfP_RkAlaz(1r9UDJWU-#NA#W@`4gDnTJZQH0#x*EPe z#V?DeRX1u_>eH?SpyITjid(nvtK60#?~lc1xq74H385)T$27ygiA;*FBNGO=0~z>N z*}3B-*(48->p3c75|2WXgfU$wla!4ojF8t1U#R|mF$h&(<6mPM(qv7hY?Ls1ZM+DI zuJ_NMFTMb?{Q|ZD3L1pFi?#v)01*b0pa~g&F)ny*Y>iagZrd;neIKxY5cFPO5+|*L zI7OGN*nn*)mR+6|nNEbtmM1B3+pixbUy>k2QNyq->G1H7A~nB#DkV99HbPYyjf031 zsJO~Swaw`7U-wrxlo-pZoJmzdMxVjZ+r`HZ^G4}MvjeaM87h;}owfBW3=Q8w$xNVs zYN&9hP`YFmr+OQjS_8|yQ7OYw6ivgDiHf!iGyNV8RTP55O7VROm2F8hNM=#L*@@cp zY)|>S_;Sq}jJ4NuB5~F34195Np|2ENE29bdFg=U2`9{vy3k0{sbO$xR~bxv*?bV zXecsz7tcP&6xTiCkATLU{1eMIYmmS#y07 z9o<(njGO{bRDf3ND^7uSO(ITUO!?NZ4~zaqE0 zjHa|-`>C2QAhtV;a*`mSMD48<6?}sONHoZ3;v8`$krltB6s{2{DcO@Bo0c&i2iHk- zd|g{S`_L)jKD(W3pTL0#Bl44)1{{A3*L%mYGapTYqcO6)X+G)9aqPX{1nKqY_`GHw zwz>2t=PGV7*Qz1djhIw_41?3*U@)0AbC*awn_zixhrUBNu3+Nu=nSqN7STLBU>)!d z@u@{%3I;@cj##z`41Yk3&Jn9i#P}S69pQAGawG#H#L)W6Y-6q27QQpR6_r^b5(@Mi z1=BPgN0a`+@O4{|uk2V=JBw>f`9@jn*?zXes}nFSQGoFlO4)vb#p`^o!R~8Pvl{eT zykJXW3n(q{lJs|DMr)<5X2QB^Z^`aGi|exCGGF`$vyKPn3JGU*ZrSbt001kKei9vj z&q~8E9LMj1?+|i#=>$b2$qs@~pbrq*xCWYEYJaKdO>grs6dZW+IC|J&ph&@OZ?o9m z_6k-+gn9gazJK7$2iG`+p+Nayk3n% zJ#DIg6Ya-ry;!yLyYNtN_nOIjJAe73tUD{e08mQ<1QY-O00;nwPU1jGxkE~`oD)G3 z1fl*9CbQusECCy5b#B@20000h0RR9L000000000103ZMW0BVycCwu{glcgs%0j!hU tC!Yx#gu9Ej0ssIJlY}T&0+9!k!2}hPzXt`A_b4g?iwTp#1QnAwDI1U;hM52W diff --git a/bonus-modules/bonus-base/src/main/resources/template/TbProPowerTemplate.xlsx b/bonus-modules/bonus-base/src/main/resources/template/TbProPowerTemplate.xlsx index 7208abc33fef05e227015778bfe9cfcb9c791e76..d4e1f3a306e2fd2c6ae32492d134bc29a185d053 100644 GIT binary patch delta 3952 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 delta 3873 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 Oa7}>WIv3C1X8!`lNK4-U