Explorar el Código

Merge remote-tracking branch 'origin/dev' into dev

hmp hace 4 años
padre
commit
6039c823f7

+ 28 - 0
ldt-core/src/main/java/org/springblade/common/enums/ReceiverType.java

@@ -0,0 +1,28 @@
+package org.springblade.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author July
+ * @version 1.0.0
+ * @ClassName ReceiverType.java
+ * @Description 接收人类型
+ * @createTime 2021年11月04日 17:14:00
+ */
+@Getter
+@AllArgsConstructor
+public enum ReceiverType {
+	MALL("MALL", "商场"),
+	SHOP("SHOP", "商家"),
+	MEMBER("MEMBER", "会员"),
+	CONSUMER("CONSUMER", "C端用户"),
+	;
+
+	@EnumValue
+	@JsonValue
+	private String value;
+	private String dec;
+}

+ 1 - 1
ldt-core/src/main/java/org/springblade/common/enums/SenderType.java

@@ -21,8 +21,8 @@ public enum SenderType {
 	;
 
 	@EnumValue
-	private String value;
 	@JsonValue
+	private String value;
 	private String dec;
 
 }

+ 6 - 15
ldt-core/src/main/java/org/springblade/ldt/notice/controller/NoticeManagementController.java

@@ -22,10 +22,10 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
-import org.springblade.common.enums.SenderType;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.ldt.notice.entity.NoticeManagement;
@@ -68,17 +68,8 @@ public class NoticeManagementController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入notice")
 	public R<IPage<NoticeManagementVO>> list(NoticeManagement notice, Query query) {
-		String type = "";
-		if (notice == null || notice.getSenderType() == null) {
-			type = SenderType.PLATFORM.getValue();
-		} else {
-			type = notice.getSenderType().getValue();
-		}
 		IPage<NoticeManagement> pages = noticeService.page(Condition.getPage(query),
-			Condition.getQueryWrapper(notice).lambda().last("ORDER BY\n" +
-				"IF\n" +
-				"\t( sender_type = \"" + type + "\", 2, 1 ) DESC,\n" +
-				"\tis_read ASC"));
+			Condition.getQueryWrapper(notice).lambda().orderByAsc(NoticeManagement::getIsRead));
 		return R.data(NoticeManagementWrapper.build().pageVO(pages));
 	}
 
@@ -100,8 +91,8 @@ public class NoticeManagementController extends BladeController {
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "新增", notes = "传入notice")
-	public R save(@Valid @RequestBody NoticeManagement notice) {
-		return R.status(noticeService.save(notice));
+	public R save(@Valid @RequestBody NoticeManagementVO notice, BladeUser bladeUser) {
+		return noticeService.saveNotice(notice, bladeUser);
 	}
 
 	/**
@@ -120,8 +111,8 @@ public class NoticeManagementController extends BladeController {
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入notice")
-	public R submit(@Valid @RequestBody NoticeManagement notice) {
-		return R.status(noticeService.saveOrUpdate(notice));
+	public R submit(@Valid @RequestBody NoticeManagementVO notice, BladeUser bladeUser) {
+		return noticeService.saveNotice(notice, bladeUser);
 	}
 
 

+ 10 - 5
ldt-core/src/main/java/org/springblade/ldt/notice/entity/NoticeManagement.java

@@ -21,8 +21,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.common.enums.ReceiverType;
 import org.springblade.common.enums.SenderType;
-import org.springblade.core.mp.base.BaseEntity;
 import org.springblade.core.tenant.mp.TenantEntity;
 
 /**
@@ -62,22 +62,27 @@ public class NoticeManagement extends TenantEntity {
 	/**
 	 * 接收人Id
 	 */
-	@ApiModelProperty(value = "接收人Id,不需要填")
+	@ApiModelProperty(value = "接收人Id")
 	private Long receiverId;
 	/**
 	 * 接收人昵称
 	 */
-	@ApiModelProperty(value = "接收人昵称,不需要填")
+	@ApiModelProperty(value = "接收人昵称")
 	private String receiver;
 	/**
 	 * 是否已读(0:未读  1:已读)
 	 */
-	@ApiModelProperty(value = "是否已读(0:未读  1:已读),不需要填")
+	@ApiModelProperty(value = "是否已读(0:未读  1:已读")
 	private Boolean isRead;
 	/**
 	 * 发送人类型(商户,平台)
 	 */
-	@ApiModelProperty(value = "发送人类型(商户,平台),不需要填")
+	@ApiModelProperty(value = "发送人类型(商户,平台,商家)", required = true)
 	private SenderType senderType;
+	/**
+	 * 接收人类型(平台用户,商场,商户,会员,C端用户)
+	 */
+	@ApiModelProperty(value = "接收人类型(平台用户,商场,商户,会员,C端用户)", required = true)
+	private ReceiverType receiverType;
 
 }

+ 13 - 2
ldt-core/src/main/java/org/springblade/ldt/notice/service/INoticeManagementService.java

@@ -16,10 +16,12 @@
  */
 package org.springblade.ldt.notice.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tool.api.R;
 import org.springblade.ldt.notice.entity.NoticeManagement;
 import org.springblade.ldt.notice.vo.NoticeManagementVO;
-import org.springblade.core.mp.base.BaseService;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 
 /**
  * 通知表 服务类
@@ -38,4 +40,13 @@ public interface INoticeManagementService extends BaseService<NoticeManagement>
 	 */
 	IPage<NoticeManagementVO> selectNoticePage(IPage<NoticeManagementVO> page, NoticeManagementVO notice);
 
+	/**
+	 * @param notice : 通知信息
+	 * @param bladeUser
+	 * @Return R
+	 * @Author July
+	 * @Description 发布通知消息
+	 * @Date 2021/11/4 17:29
+	 */
+	R saveNotice(NoticeManagementVO notice, BladeUser bladeUser);
 }

+ 80 - 3
ldt-core/src/main/java/org/springblade/ldt/notice/service/impl/NoticeManagementServiceImpl.java

@@ -16,13 +16,35 @@
  */
 package org.springblade.ldt.notice.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.common.enums.ReceiverType;
+import org.springblade.common.enums.SenderType;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.tool.api.R;
+import org.springblade.ldt.mall.entity.Mall;
+import org.springblade.ldt.mall.service.IMallService;
 import org.springblade.ldt.notice.entity.NoticeManagement;
-import org.springblade.ldt.notice.vo.NoticeManagementVO;
 import org.springblade.ldt.notice.mapper.NoticeManagementMapper;
 import org.springblade.ldt.notice.service.INoticeManagementService;
-import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.ldt.notice.vo.NoticeManagementVO;
+import org.springblade.ldt.shop.entity.Shop;
+import org.springblade.ldt.shop.service.IShopService;
+import org.springblade.ldt.user.entity.LoginUser;
+import org.springblade.ldt.user.entity.Member;
+import org.springblade.ldt.user.service.ILoginUserService;
+import org.springblade.ldt.user.service.IMemberService;
+import org.springblade.modules.system.service.IUserService;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 通知表 服务实现类
@@ -31,6 +53,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2021-11-03
  */
 @Service
+@AllArgsConstructor
 public class NoticeManagementServiceImpl extends BaseServiceImpl<NoticeManagementMapper, NoticeManagement> implements INoticeManagementService {
 
 	@Override
@@ -38,4 +61,58 @@ public class NoticeManagementServiceImpl extends BaseServiceImpl<NoticeManagemen
 		return page.setRecords(baseMapper.selectNoticePage(page, notice));
 	}
 
+	private IMallService mallService;
+	private IShopService shopService;
+	private IMemberService memberService;
+	private IUserService userService;
+	private ILoginUserService loginUserService;
+
+	@Override
+	@Transactional
+	public R saveNotice(NoticeManagementVO notice, BladeUser bladeUser) {
+		Mall mall = null;
+		if (notice.getSenderType().equals(SenderType.MALL)) {
+			mall = mallService.getOne(Wrappers.<Mall>lambdaQuery().eq(Mall::getTenantId, bladeUser.getTenantId()));
+		}
+		Map<ReceiverType, Map<Long, String>> receiver = new HashMap<>();
+		for (ReceiverType receiverType : notice.getReceiverTypes()) {
+			if (receiverType.equals(ReceiverType.MALL)) {//平台可发
+				List<Mall> malls = mallService.list();
+				receiver.put(ReceiverType.MALL, malls.stream().collect(Collectors.toMap(Mall::getId, Mall::getMallName)));
+			}
+			if (receiverType.equals(ReceiverType.SHOP)) {//平台,商场可发
+				List<Shop> shops = shopService.list(Wrappers.<Shop>lambdaQuery()
+					.eq(notice.getSenderType().equals(SenderType.MALL) && mall != null, Shop::getMallId, mall.getId()));
+				receiver.put(ReceiverType.SHOP, shops.stream().collect(Collectors.toMap(Shop::getId, Shop::getName)));
+			}
+			if (receiverType.equals(ReceiverType.MEMBER)) {//商场可发
+				List<Member> members = memberService.list(Wrappers.<Member>lambdaQuery().eq(mall != null, Member::getMallId, mall.getId()));
+				receiver.put(ReceiverType.MEMBER, members.stream().collect(Collectors.toMap(Member::getId, Member::getNickName)));
+			}
+			if (receiverType.equals(ReceiverType.CONSUMER)) {//平台可发
+				List<LoginUser> loginUsers = loginUserService.list();
+				receiver.put(ReceiverType.CONSUMER, loginUsers.stream().collect(Collectors.toMap(LoginUser::getId, LoginUser::getNickName)));
+			}
+		}
+
+		List<NoticeManagement> notices = new ArrayList<>();
+		for (Map.Entry<ReceiverType, Map<Long, String>> data : receiver.entrySet()) {
+			for (Map.Entry<Long, String> item : data.getValue().entrySet()) {
+				notice.setReceiver(item.getValue());
+				notice.setReceiverId(item.getKey());
+				notice.setReceiverType(data.getKey());
+				notice.setIsRead(false);
+				if (notice.getSenderType().equals(SenderType.MALL)) {
+					notice.setSenderId(mall.getId());
+					notice.setSender(mall.getMallName());
+				} else {
+					notice.setSenderId(bladeUser.getUserId());
+					notice.setSender("[平台]");
+				}
+				notices.add(notice);
+			}
+		}
+		return R.data(saveBatch(notices));
+	}
+
 }

+ 5 - 2
ldt-core/src/main/java/org/springblade/ldt/notice/vo/NoticeManagementVO.java

@@ -16,10 +16,11 @@
  */
 package org.springblade.ldt.notice.vo;
 
-import org.springblade.ldt.notice.entity.NoticeManagement;
+import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
+import org.springblade.common.enums.ReceiverType;
+import org.springblade.ldt.notice.entity.NoticeManagement;
 
 /**
  * 通知表视图实体类
@@ -33,4 +34,6 @@ import io.swagger.annotations.ApiModel;
 public class NoticeManagementVO extends NoticeManagement {
 	private static final long serialVersionUID = 1L;
 
+	private ReceiverType[] receiverTypes;
+
 }