diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UserMsgController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UserMsgController.java new file mode 100644 index 000000000..c2a52b8cb --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UserMsgController.java @@ -0,0 +1,51 @@ +package com.czg.controller.user; + +import com.czg.account.dto.AcUserMsgDTO; +import com.czg.account.service.AcUserMsgService; +import com.czg.resp.CzgResult; +import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 用户端/用户消息 + * + * @author yjjie + * @date 2025/12/9 19:17 + */ +@RestController +@RequestMapping("/user/msg") +public class UserMsgController { + + @Resource + private AcUserMsgService acUserMsgService; + + /** + * 获取未读消息数量 + */ + @GetMapping("/unReadCount") + public CzgResult getUnReadCount() { + return CzgResult.success(acUserMsgService.getUnReadCount()); + } + + /** + * 获取用户消息列表 + */ + @GetMapping("/page") + public CzgResult> getUserMsgPage() { + return CzgResult.success(acUserMsgService.getUserMsgPage()); + } + + /** + * 根据订单 Id 获取消息列表 + */ + @GetMapping("/order/{orderId}") + public CzgResult> getMsgListByOrderId(@PathVariable Long orderId) { + return CzgResult.success(acUserMsgService.getMsgListByOrderId(orderId)); + } +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/AcUserMsgDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/AcUserMsgDTO.java new file mode 100644 index 000000000..ee3d55406 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/AcUserMsgDTO.java @@ -0,0 +1,74 @@ + +package com.czg.account.dto; + +import java.io.Serializable; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.experimental.Accessors; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实体类。 + * + * @author gyj + * @since 2025-12-09 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class AcUserMsgDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 用户 Id + */ + private Long userId; + + /** + * 店铺 Id + */ + private Long shopId; + + /** + * 来源 Id;如订单 Id + */ + private Long sourceId; + + /** + * 来源类型:order 订单 + */ + private String sourceType; + + /** + * 消息类型:cash 现金,points 积分 + */ + private String type; + + /** + * 消息读取状态:0 未读,1 已读 + */ + private Integer readStatus; + + /** + * 消息标题 + */ + private String title; + + /** + * 消息内容 + */ + private String content; + + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/AcUserMsg.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/AcUserMsg.java new file mode 100644 index 000000000..0d5dfcffc --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/AcUserMsg.java @@ -0,0 +1,87 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 实体类。 + * + * @author gyj + * @since 2025-12-09 + */ +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Table("ac_user_msg") +public class AcUserMsg implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 用户 Id + */ + private Long userId; + + /** + * 店铺 Id + */ + private Long shopId; + + /** + * 来源 Id;如订单 Id + */ + private Long sourceId; + + /** + * 来源类型:order 订单 + */ + private String sourceType; + + /** + * 消息类型:cash 现金,points 积分 + */ + private String type; + + /** + * 消息读取状态:0 未读,1 已读 + */ + private Integer readStatus; + + /** + * 消息标题 + */ + private String title; + + /** + * 消息内容 + */ + private String content; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/AcUserMsgService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/AcUserMsgService.java new file mode 100644 index 000000000..998915ee7 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/AcUserMsgService.java @@ -0,0 +1,25 @@ +package com.czg.account.service; + +import com.czg.account.dto.AcUserMsgDTO; +import com.czg.account.entity.AcUserMsg; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; + +import java.util.List; + +/** + * 服务层。 + * + * @author gyj + * @since 2025-12-09 + */ +public interface AcUserMsgService extends IService { + + void addUserMsg(AcUserMsg msg); + + Long getUnReadCount(); + + Page getUserMsgPage(); + + List getMsgListByOrderId(Long orderId); +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkConsumeCashbackRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkConsumeCashbackRecordService.java index 9ec19c523..7c96f2b0f 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkConsumeCashbackRecordService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkConsumeCashbackRecordService.java @@ -1,7 +1,7 @@ package com.czg.market.service; -import com.mybatisflex.core.service.IService; import com.czg.market.entity.MkConsumeCashbackRecord; +import com.mybatisflex.core.service.IService; import java.time.LocalDateTime; import java.util.Map; diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkPointsUserService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkPointsUserService.java index 2507e82d0..5d24a66c3 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkPointsUserService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkPointsUserService.java @@ -47,5 +47,5 @@ public interface MkPointsUserService extends IService { * 积分抵扣账单 */ Long alterPoints(Long userId, Long shopUserId, @NotNull Long shopId, @NotNull PointsConstant floatType, - @NotNull Integer points, String sourceId, @NotBlank String reason); + @NotNull Integer points, Long sourceId, @NotBlank String reason); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/AcUserMsgMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/AcUserMsgMapper.java new file mode 100644 index 000000000..390c1807b --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/AcUserMsgMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.AcUserMsg; + +/** + * 映射层。 + * + * @author gyj + * @since 2025-12-09 + */ +public interface AcUserMsgMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AcUserMsgServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AcUserMsgServiceImpl.java new file mode 100644 index 000000000..f067ff095 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AcUserMsgServiceImpl.java @@ -0,0 +1,46 @@ +package com.czg.service.account.service.impl; + +import com.czg.account.dto.AcUserMsgDTO; +import com.czg.account.entity.AcUserMsg; +import com.czg.account.service.AcUserMsgService; +import com.czg.sa.StpKit; +import com.czg.service.account.mapper.AcUserMsgMapper; +import com.czg.utils.PageUtil; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 服务层实现。 + * + * @author gyj + * @since 2025-12-09 + */ +@Service +public class AcUserMsgServiceImpl extends ServiceImpl implements AcUserMsgService { + + @Override + public void addUserMsg(AcUserMsg msg) { + save(msg); + } + + @Override + public Long getUnReadCount() { + return count(QueryWrapper.create().eq(AcUserMsg::getReadStatus, 0).eq(AcUserMsg::getUserId, StpKit.USER.getLoginIdAsLong())); + } + + @Override + public Page getUserMsgPage() { + return pageAs(PageUtil.buildPage(), QueryWrapper.create().eq(AcUserMsg::getUserId, + StpKit.USER.getLoginIdAsLong()).orderBy(AcUserMsg::getCreateTime, false), AcUserMsgDTO.class); + } + + @Override + public List getMsgListByOrderId(Long orderId) { + return listAs(QueryWrapper.create().eq(AcUserMsg::getSourceId, orderId).eq(AcUserMsg::getSourceType, "order"), + AcUserMsgDTO.class); + } +} diff --git a/cash-service/account-service/src/main/resources/mapper/AcUserMsgMapper.xml b/cash-service/account-service/src/main/resources/mapper/AcUserMsgMapper.xml new file mode 100644 index 000000000..d1d27ccac --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/AcUserMsgMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/code-generator/src/main/java/com/czg/Main.java b/cash-service/code-generator/src/main/java/com/czg/Main.java index 2a7f179b6..bc4f08ed0 100644 --- a/cash-service/code-generator/src/main/java/com/czg/Main.java +++ b/cash-service/code-generator/src/main/java/com/czg/Main.java @@ -30,12 +30,12 @@ public class Main { // String packageName = "system"; -// String packageName = "account"; + String packageName = "account"; // String packageName = "product"; - String packageName = "market"; +// String packageName = "market"; // tableName 指定需要生成的表 - String tableName = "mk_ocr"; - String author = "zs"; + String tableName = "ac_user_msg"; + String author = "gyj"; //是否生成DTO实体 默认生成 boolean isGenerateDto = true; diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkConsumeCashbackServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkConsumeCashbackServiceImpl.java index 05dafc9ce..f7cd7b722 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkConsumeCashbackServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkConsumeCashbackServiceImpl.java @@ -5,8 +5,10 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSONArray; import com.czg.account.dto.shopuser.ShopUserMoneyEditDTO; +import com.czg.account.entity.AcUserMsg; import com.czg.account.entity.ShopInfo; import com.czg.account.entity.ShopUser; +import com.czg.account.service.AcUserMsgService; import com.czg.account.service.ShopConfigService; import com.czg.account.service.ShopInfoService; import com.czg.account.service.ShopUserService; @@ -63,6 +65,9 @@ public class MkConsumeCashbackServiceImpl extends ServiceImpl getPointsUserPage(String phone, Integer page, Integer size) { Long shopUserId = null; @@ -110,7 +115,7 @@ public class MkPointsUserServiceImpl extends ServiceImpl 0) { - pointsUserService.alterPoints(null, shopUser.getId(), shopUser.getMainShopId(), PointsConstant.ADD, points, sourceId.toString(), "会员消费送积分"); + pointsUserService.alterPoints(null, shopUser.getId(), shopUser.getMainShopId(), PointsConstant.ADD, points, sourceId, "会员消费送积分"); } } @@ -333,7 +333,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl 0) { pointsUserService.alterPoints(null, shopUser.getId(), orderInfo.getShopId(), PointsConstant.SUB, - orderInfo.getPointsNum(), orderInfo.getId().toString(), "积分抵扣账单"); + orderInfo.getPointsNum(), orderInfo.getId(), "积分抵扣账单"); } //更新优惠券信息 @@ -1289,8 +1289,6 @@ public class OrderInfoCustomServiceImpl implements OrderInfoCustomService { || (payType != null && !ArrayUtil.contains(payTypes, payType))) { //下单赠送积分 pointsConfigService.consumeAwardPoints(shopUser.getId(), orderInfo); -// pointsUserService.alterPoints(null, shopUser.getId(), orderInfo.getShopId(), PointsConstant.ADD, -// rechargeDetail.getRewardPoints(), orderInfo.getId(), "下单赠送积分"); //消费返现 if (!orderInfo.getPayType().equals(PayEnums.CASH_PAY.getValue())) { @@ -1505,7 +1503,7 @@ public class OrderInfoCustomServiceImpl implements OrderInfoCustomService { //积分使用 if (orderInfo.getPointsNum() != null && orderInfo.getPointsNum() > 0) { pointsUserService.alterPoints(null, shopUser.getId(), orderInfo.getShopId(), PointsConstant.ADD, - orderInfo.getPointsNum(), orderInfo.getId().toString(), "积分抵扣账单"); + orderInfo.getPointsNum(), orderInfo.getId(), "积分抵扣账单"); } //更新优惠券信息 if (StrUtil.isNotBlank(orderInfo.getCouponInfoList()) && !"null".equals(orderInfo.getCouponInfoList())) { diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PointsGoodPayServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PointsGoodPayServiceImpl.java index dcf38625b..ed54a9ce9 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PointsGoodPayServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PointsGoodPayServiceImpl.java @@ -115,7 +115,7 @@ public class PointsGoodPayServiceImpl implements PointsGoodPayService { if (record.getSpendPoints() != null && record.getSpendPoints() > 0) { //回增积分 pointsUserService.alterPoints(record.getUserId(), record.getShopUserId(), record.getShopId(), PointsConstant.ADD, - record.getSpendPoints(), record.getId().toString(), "积分商品兑换退款"); + record.getSpendPoints(), record.getId(), "积分商品兑换退款"); } //退钱 if (record.getExtraPaymentAmount() != null && record.getExtraPaymentAmount().compareTo(BigDecimal.ZERO) > 0) { @@ -147,7 +147,7 @@ public class PointsGoodPayServiceImpl implements PointsGoodPayService { } //扣除积分 pointsUserService.alterPoints(record.getUserId(), null, record.getShopId(), PointsConstant.SUB, - record.getSpendPoints(), record.getId().toString(), "积分商品兑换"); + record.getSpendPoints(), record.getId(), "积分商品兑换"); record.setIsDel(0); if (goods.getGoodsCategory().equals("优惠券")) { record.setStatus("已完成");