From 92f51eb9c0f76b8447d30687e8a7799009ad6158 Mon Sep 17 00:00:00 2001 From: mashuai Date: Wed, 12 Mar 2025 14:52:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=85=AC=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/common/biz/enums/NoticeSmsEnum.java | 26 +++ .../controller/LargeScreenController.java | 8 +- .../notice/controller/NoticeController.java | 60 +++++- .../bonus/material/notice/entity/Notice.java | 55 ++++- .../material/notice/mapper/NoticeMapper.java | 36 +++- .../notice/service/NoticeService.java | 31 ++- .../service/impl/NoticeServiceImpl.java | 198 +++++++++++++++++- .../mapper/material/device/DevInfoMapper.xml | 4 +- .../mapper/material/notice/ReplyMapper.xml | 110 ++++++++-- 9 files changed, 500 insertions(+), 28 deletions(-) create mode 100644 bonus-common-biz/src/main/java/com/bonus/common/biz/enums/NoticeSmsEnum.java diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/NoticeSmsEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/NoticeSmsEnum.java new file mode 100644 index 0000000..e3b473a --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/NoticeSmsEnum.java @@ -0,0 +1,26 @@ +package com.bonus.common.biz.enums; + +import lombok.Getter; + +/** + * @author : 阮世耀 + * @version : 1.0 + * @PackagePath: com.bonus.common.biz.enums + * @CreateTime: 2024-10-15 10:28 + * @Description: 通知公告是否发送短信状态枚举类 + */ +@Getter +public enum NoticeSmsEnum { + + SENDSMS_ENABLED("0", "发送短信"), + SENDSMS_DISABLED("1", "不发送短信"); + + private final String code; + private final String msg; + + NoticeSmsEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java index 2dfcd12..4df2701 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java @@ -113,7 +113,9 @@ public class LargeScreenController { Integer repairingDevNum = devInfoMapper.getRepairingDevNum(); orderData.setDevRepairingNum(repairingDevNum); DevInfo devInfo = devInfoMapper.getDevUsageRatio(); - orderData.setDevUsageRatio(MathUtil.calculatePercentage(devInfo.getTotalLeaseDay(), devInfo.getTotalUpDay() + devInfo.getTotalLeaseDay())); + if(devInfo != null){ + orderData.setDevUsageRatio(MathUtil.calculatePercentage(devInfo.getTotalLeaseDay(), devInfo.getTotalUpDay() + devInfo.getTotalLeaseDay())); + } return AjaxResult.success(orderData); } @@ -123,10 +125,10 @@ public class LargeScreenController { OrderData orderData = new OrderData(); Integer leaseNum = leaseInfoMapper.getLeaseCount(); Integer leaseOrderNum = leaseInfoMapper.getLeaseOrderCount(); - Integer maTypeCountFromLease = leaseInfoMapper.getMaTypeCountFromLease(); + //Integer maTypeCountFromLease = leaseInfoMapper.getMaTypeCountFromLease(); String topPopularTypeName = leaseInfoMapper.getTopPopularTypeName(); orderData.setLeaseNum(leaseNum); - orderData.setMaTypeCountFromLease(maTypeCountFromLease); + //orderData.setMaTypeCountFromLease(maTypeCountFromLease); orderData.setLeaseOrderRatio(MathUtil.calculatePercentage(leaseOrderNum, leaseNum)); orderData.setTopPopularTypeName(topPopularTypeName); return AjaxResult.success(orderData); diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/controller/NoticeController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/controller/NoticeController.java index c63fc15..1dae293 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/controller/NoticeController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/controller/NoticeController.java @@ -2,14 +2,16 @@ package com.bonus.material.notice.controller; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.log.annotation.SysLog; +import com.bonus.common.log.enums.OperaType; +import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.notice.entity.Notice; import com.bonus.material.notice.service.NoticeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @@ -35,6 +37,58 @@ public class NoticeController extends BaseController { return AjaxResult.success(getDataTable(sysNotices)); } + /** + * 新增通知公告 + * @param notice + * @return + */ + @PostMapping + @SysLog(title = "通知公告", businessType = OperaType.INSERT,logType = 0,module = "系统管理->通知公告") + public AjaxResult add(@Validated @RequestBody Notice notice) { + try{ + notice.setCreateBy(SecurityUtils.getUsername()); + return noticeService.insertNotice(notice); + }catch (Exception e){ + log.error(e.toString(),e); + } + return error("系统异常"); + } + + /** + * 修改通知公告 + * @param notice + * @return + */ + @PostMapping("/edit") + @SysLog(title = "通知公告", businessType = OperaType.UPDATE,logType = 0,module = "系统管理->通知公告") + public AjaxResult edit(@Validated @RequestBody Notice notice) { + try{ + notice.setUpdateBy(SecurityUtils.getUsername()); + return noticeService.updateNotice(notice); + }catch (Exception e){ + log.error(e.toString(),e); + } + return error("系统异常"); + + } + + /** + * 删除通知公告 + * @param noticeIds + * @return + */ + @PostMapping("/delete/{noticeIds}") + @SysLog(title = "通知公告", businessType = OperaType.DELETE,logType = 0,module = "系统管理->通知公告") + public AjaxResult remove(@PathVariable Long[] noticeIds) { + try{ + return noticeService.deleteNoticeByIds(noticeIds); + }catch (Exception e){ + log.error(e.toString(),e); + } + return error("系统异常"); + + } + /* @GetMapping("/noticeList") @ApiOperation(value = "系统公告(app)") public AjaxResult noticeList(Notice notice) { diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/entity/Notice.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/entity/Notice.java index d92fb2b..6709f26 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/entity/Notice.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/entity/Notice.java @@ -12,6 +12,12 @@ import java.util.Date; */ @Data public class Notice { + + /** + * 是否后台,后台全部展示 (1) + */ + private Integer isHome; + /** * 公告ID */ @@ -25,7 +31,7 @@ public class Notice { /** * 公告类型(1通知 2公告 3质检到期提醒) */ - private Integer noticeType; + private String noticeType; /** * 公告内容 @@ -70,4 +76,51 @@ public class Notice { * 装备质检到期所属公司 */ private Integer ownCo; + + /** + * 组织id + */ + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 角色id + */ + private Long roleId; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 是否短信通知(0 是,1 否) + */ + private String isSms; + + /** + * 公告有效期 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date expiryDate; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 手机号 + */ + private String phoneNumber; } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/mapper/NoticeMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/mapper/NoticeMapper.java index 9be556d..f858720 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/mapper/NoticeMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/mapper/NoticeMapper.java @@ -1,7 +1,6 @@ package com.bonus.material.notice.mapper; import com.bonus.material.notice.entity.Notice; -import com.bonus.system.api.domain.SysNotice; import java.util.List; @@ -10,11 +9,44 @@ import java.util.List; * @Date:2024/12/20 - 19:25 */ public interface NoticeMapper { + /** + * 查询通知公告列表 + * @param notice + * @return + */ List selectNoticeList(Notice notice); - void addNotice(Notice notice); + int addNotice(Notice notice); List noticeList(Notice notice); List messageList(Notice notice); + + /** + * 修改通知公告 + * @param notice + * @return + */ + int updateNotice(Notice notice); + + /** + * 批量删除通知公告 + * @param noticeIds + * @return + */ + int deleteNoticeByIds(Long[] noticeIds); + + /** + * 查询短信通知人员列表 + * @param notice + * @return + */ + List getSmsList(Notice notice); + + /** + * 根据userId查询角色id + * @param userId + * @return + */ + List selectRoleId(Long userId); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/NoticeService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/NoticeService.java index 0120e69..184ebb6 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/NoticeService.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/NoticeService.java @@ -1,7 +1,7 @@ package com.bonus.material.notice.service; +import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.notice.entity.Notice; -import com.bonus.system.api.domain.SysNotice; import java.util.List; @@ -10,9 +10,36 @@ import java.util.List; * @Date:2024/12/20 - 19:22 */ public interface NoticeService { + /** + * 查询公告列表 + * @param notice + * @return + */ List selectNoticeList(Notice notice); + List noticeList(Notice notice); - List messageList(Notice notice); + + /** + * 新增通知公告 + * @param notice + * @return + */ + AjaxResult insertNotice(Notice notice); + + /** + * 修改通知公告 + * @param notice + * @return + */ + AjaxResult updateNotice(Notice notice); + + /** + * 删除通知公告 + * @param noticeIds + * @return + */ + AjaxResult deleteNoticeByIds(Long[] noticeIds); + } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/impl/NoticeServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/impl/NoticeServiceImpl.java index 0ffdcdf..8524f79 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/impl/NoticeServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/notice/service/impl/NoticeServiceImpl.java @@ -1,14 +1,24 @@ package com.bonus.material.notice.service.impl; +import com.bonus.common.biz.enums.HttpCodeEnum; +import com.bonus.common.biz.enums.NoticeSmsEnum; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.utils.encryption.Sm4Utils; +import com.bonus.common.core.utils.sms.SmsUtils; +import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.notice.entity.Notice; import com.bonus.material.notice.mapper.NoticeMapper; import com.bonus.material.notice.service.NoticeService; -import com.bonus.system.api.domain.SysNotice; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Objects; /** * @Author:liang.chao @@ -19,9 +29,65 @@ public class NoticeServiceImpl implements NoticeService { @Resource private NoticeMapper noticeMapper; + + /** + * 查询通知公告列表 + * @param notice + * @return + */ @Override public List selectNoticeList(Notice notice) { - return noticeMapper.selectNoticeList(notice); + Long userId = SecurityUtils.getUserId(); + // 根据userId查询角色id + List dtoList = noticeMapper.selectRoleId(userId); + // 从dtoList中取出roleId集合 + List roleIdList = new ArrayList<>(); + for (Notice info : dtoList) { + roleIdList.add(info.getRoleId()); + } + Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + List list = noticeMapper.selectNoticeList(notice); + if (!CollectionUtils.isEmpty(list)) { + // 后台默认全部展示 + if (notice.getIsHome() != null && notice.getIsHome() == 1) { + return list; + } + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + Notice info = iterator.next(); + // 过滤关闭公告 + if ("1".equals(info.getStatus())) { + iterator.remove(); + continue; + } + // 过期公告过滤 + if (info.getExpiryDate() != null) { + if (info.getExpiryDate().before(DateUtils.getNowDate())) { + iterator.remove(); + continue; + } + } + // 根据角色和部门进行过滤 + if (info.getDeptId() != null && info.getRoleId() == null) { + if (!info.getDeptId().equals(deptId)) { + iterator.remove(); + continue; + } + } + if (info.getRoleId() != null && info.getDeptId() == null) { + if (!roleIdList.contains(info.getRoleId())) { + iterator.remove(); + continue; + } + } + if (info.getDeptId() != null && info.getRoleId() != null) { + if (!info.getDeptId().equals(deptId) || !roleIdList.contains(info.getRoleId())) { + iterator.remove(); + } + } + } + } + return list; } @Override @@ -34,4 +100,132 @@ public class NoticeServiceImpl implements NoticeService { notice.setOwnCo(SecurityUtils.getLoginUser().getSysUser().getCompanyId().intValue()); return noticeMapper.messageList(notice); } + + /** + * 新增通知公告 + * @param notice + * @return + */ + @Override + public AjaxResult insertNotice(Notice notice) { + if (notice == null) { + return AjaxResult.error(HttpCodeEnum.TO_PARAM_NULL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg()); + } + // 针对于短信通告进行短信人员通知 + if (NoticeSmsEnum.SENDSMS_ENABLED.getCode().equals(notice.getIsSms())) { + if (NoticeSmsEnum.SENDSMS_DISABLED.getCode().equals(notice.getStatus())) { + return AjaxResult.error("通知公告状态为关闭,无法进行发送短信通知公告服务"); + } + List smsList = noticeMapper.getSmsList(notice); + if (CollectionUtils.isEmpty(smsList)) { + return AjaxResult.error("所选组织机构及角色下属人员信息为空,无法进行发送短信通知公告服务"); + } + if (!CollectionUtils.isEmpty(smsList)) { + for (Notice info : smsList) { + if (StringUtils.isBlank(info.getPhoneNumber())) { + continue; + } + String phoneNumber = info.getPhoneNumber(); + if (Objects.nonNull(info.getPhoneNumber()) && info.getPhoneNumber().length() > 11) { + phoneNumber = Sm4Utils.decrypt(info.getPhoneNumber()); + } + // 根据电话号码数量发送短信 + //JSONObject sendResult = SmsTool.sendSms(new SmsParam(phoneNumber, notice.getNoticeContent()), BmConfigItems.ANHUI_COMPANY_SMS_KEY); + String sendResult = SmsUtils.smsToken(phoneNumber, notice.getNoticeContent(), ""); + if (StringUtils.isBlank(sendResult)) { + return AjaxResult.error("短信发送失败"); + } else { + System.out.println("短信发送成功:" + sendResult); + } + } + } + } + notice.setCreateTime(DateUtils.getNowDate()); + int result = noticeMapper.addNotice(notice); + if (result == 0) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()); + } + + /** + * 修改通知公告 + * @param notice + * @return + */ + @Override + public AjaxResult updateNotice(Notice notice) { + if (notice == null || notice.getNoticeId() == null) { + return AjaxResult.error(HttpCodeEnum.TO_PARAM_NULL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg()); + } + // 查询通知公告 + List list = noticeMapper.selectNoticeList(notice); + List smsList = new ArrayList<>(); + Notice info = new Notice(); + if (!CollectionUtils.isEmpty(list)) { + info = list.get(0); + if (NoticeSmsEnum.SENDSMS_ENABLED.getCode().equals(info.getIsSms())) { + // 查询上一次已经发送的短信人员 + smsList = noticeMapper.getSmsList(info); + } + } + // 进行短信通知公告 + if (NoticeSmsEnum.SENDSMS_ENABLED.getCode().equals(notice.getIsSms())) { + if (NoticeSmsEnum.SENDSMS_DISABLED.getCode().equals(notice.getStatus())) { + return AjaxResult.error("通知公告状态为关闭,无法进行发送短信通知公告服务"); + } + // 查询待短信通知公告人员 + List newSmsList = noticeMapper.getSmsList(notice); + if (CollectionUtils.isEmpty(newSmsList)) { + return AjaxResult.error("所选组织机构及角色下属人员信息为空,无法进行发送短信通知公告服务"); + } + if (notice.getNoticeContent().equals(info.getNoticeContent()) && !CollectionUtils.isEmpty(smsList)) { + // 移出已经发送的短信人员 + for (Notice smsInfo : smsList) { + newSmsList.removeIf(newSmsInfo -> smsInfo.getUserId().equals(newSmsInfo.getUserId())); + } + } + if (!CollectionUtils.isEmpty(newSmsList)) { + for (Notice notice1 : newSmsList) { + if (StringUtils.isBlank(notice1.getPhoneNumber())) { + continue; + } + String phoneNumber = notice1.getPhoneNumber(); + if (Objects.nonNull(notice1.getPhoneNumber()) && notice1.getPhoneNumber().length() > 11) { + phoneNumber = Sm4Utils.decrypt(notice1.getPhoneNumber()); + } + // 根据电话号码数量发送短信 + //JSONObject sendResult = SmsTool.sendSms(new SmsParam(phoneNumber, notice.getNoticeContent()), BmConfigItems.ANHUI_COMPANY_SMS_KEY); + String sendResult = SmsUtils.smsToken(phoneNumber, notice.getNoticeContent(), ""); + if (StringUtils.isBlank(sendResult)) { + return AjaxResult.error("短信发送失败"); + } else { + System.out.println("短信发送成功:" + sendResult); + } + } + } + } + int result = noticeMapper.updateNotice(notice); + if (result == 0) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()); + } + + /** + * 删除通知公告 + * @param noticeIds + * @return + */ + @Override + public AjaxResult deleteNoticeByIds(Long[] noticeIds) { + if (noticeIds == null || noticeIds.length == 0) { + return AjaxResult.error(HttpCodeEnum.TO_PARAM_NULL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg()); + } + int result = noticeMapper.deleteNoticeByIds(noticeIds); + if (result == 0) { + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); + } + return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg()); + } } diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml index 0ccfc8e..dffd5c4 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml @@ -999,12 +999,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - update ma_dev_info set total_up_day = total_up_day + 1 + update ma_dev_info set total_up_day = IFNULL(total_up_day, 0) + 1 where is_active = '1' and ma_status = '2' - update ma_dev_info set total_lease_day = total_lease_day + 1 + update ma_dev_info set total_lease_day = IFNULL(total_lease_day, 0) + 1 where is_active = '1' and ma_status = '3' diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/notice/ReplyMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/notice/ReplyMapper.xml index 8d2b390..3694ab6 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/notice/ReplyMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/notice/ReplyMapper.xml @@ -14,7 +14,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_by, update_time, remark, - own_co + own_co, + dept_id, + role_id, + is_sms, + expiry_date ) values( #{noticeTitle}, @@ -26,22 +30,77 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{updateBy}, #{updateTime}, #{remark}, + #{ownCo}, + #{deptId}, + #{roleId}, + #{isSms}, + #{expiryDate} ) + + update sys_notice + + notice_title = #{noticeTitle}, + notice_type = #{noticeType}, + notice_content = #{noticeContent}, + status = #{status}, + update_by = #{updateBy}, + remark = #{remark}, + own_co = #{ownCo}, + dept_id = #{deptId}, + role_id = #{roleId}, + is_sms = #{isSms}, + expiry_date = #{expiryDate}, + update_time = sysdate() + + where notice_id = #{noticeId} + + + + delete from sys_notice where notice_id in + + #{noticeId} + + + + + + + \ No newline at end of file