فهرست منبع

Merge branch 'mj_guide_func' into pre

# Conflicts:
#	netflix-common/src/main/java/com/cyksj/common/constant/Constant.java
#	netflix-dao/src/main/java/com/cyksj/mapper/MidjourneyPaintingPlazaMapper.java
#	netflix-dao/src/main/java/com/cyksj/model/entity/MidjourneyPaintingCollectRecord.java
#	netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyPaintingUserView.java
#	netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
#	netflix-web/src/main/java/com/cyksj/web/controller/manage/mj/MidjourneyPaintingController.java
#	netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java
zoujiajian 2 سال پیش
والد
کامیت
bca48df1b2

+ 1 - 1
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -326,5 +326,5 @@ public interface Constant {
 	/**
 	 * MJ试用规格id
 	 */
-	Long MIDJOURNEY_TRIAL_SKU_ID = 26L;
+	Long MIDJOURNEY_TRIAL_SKU_ID = 185L;
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/mapper/MidjourneyPaintingPlazaMapper.java

@@ -1,7 +1,10 @@
 package com.cyksj.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.MidjourneyPaintingPlaza;
+import com.cyksj.model.views.MidjourneyPaintingUserView;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
 /**
@@ -14,4 +17,6 @@ public interface MidjourneyPaintingPlazaMapper extends BaseMapper<MidjourneyPain
 
 	@Update("update midjourney_painting_plaza set copy_num = copy_num + 1 where id = #{id}")
 	void updatePaintingCopyNum(Long id);
+
+	Page<MidjourneyPaintingUserView> getPaintingList(@Param("page") Page<MidjourneyPaintingUserView> page, @Param("collect") Boolean collect, @Param("userId") Long userId);
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/MidjourneyPaintingCollectRecord.java

@@ -19,4 +19,9 @@ public class MidjourneyPaintingCollectRecord extends BaseEntity {
 	 * 绘画id
 	 */
 	private Long plazaId;
+
+	/**
+	 * 收藏状态
+	 */
+	private Boolean status;
 }

+ 1 - 9
netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyPaintingUserView.java

@@ -1,7 +1,5 @@
 package com.cyksj.model.views;
 
-import com.ejlchina.searcher.bean.DbField;
-import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -13,19 +11,13 @@ import lombok.Setter;
  */
 @Getter
 @Setter
-@SearchBean(tables = "midjourney_painting_plaza mpp :pr:",
-		where = "mpp.status is true and mpp.deleted is true")
 public class MidjourneyPaintingUserView {
 
-	@DbField("mpp.id")
 	private Long id;
 
-	@DbField("mpp.tips")
 	private String tips;
 
-	@DbField("mpp.img")
 	private String img;
 
-	@DbField("mpp.remark")
-	private String remark;
+	private Boolean collect;
 }

+ 30 - 0
netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyUserPaintingDayRecordView.java

@@ -0,0 +1,30 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: MidjourneyUserPaintingDayRecordView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/4 15:42
+ */
+@Getter
+@Setter
+@SearchBean(tables = "midjourney_user_conversation mc"
+		, where = "mc.status = 'SUCCESS' :condition:"
+		, groupBy = "DATE_FORMAT(mc.created_time,'%Y-%m-%d')",
+		orderBy = "DATE_FORMAT(mc.created_time,'%Y-%m-%d') desc")
+public class MidjourneyUserPaintingDayRecordView {
+
+	@DbField("DATE_FORMAT(mc.created_time,'%Y-%m-%d')")
+	private String date;
+
+	@DbIgnore
+	private List<MidjourneyUserPaintingRecordView> list;
+}

+ 33 - 0
netflix-dao/src/main/java/com/cyksj/model/views/MidjourneyUserPaintingRecordView.java

@@ -0,0 +1,33 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: MidjourneyUserPaintingRecordView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/4 15:40
+ */
+@Getter
+@Setter
+@SearchBean(tables = "midjourney_user_conversation mc",
+		where = "mc.status = 'SUCCESS' :condition: :date:")
+public class MidjourneyUserPaintingRecordView {
+
+	/**
+	 * 提示词
+	 */
+	@DbField("mc.prompt")
+	private String prompt;
+
+	@DbField("mc.image_url")
+	private String imageUrl;
+
+	@DbField("mc.created_time")
+	private Date createdTime;
+}

+ 21 - 0
netflix-dao/src/main/resources/mapper/MidjourneyPaintingPlazaMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.MidjourneyPaintingPlazaMapper">
+
+    <select id="getPaintingList" resultType="com.cyksj.model.views.MidjourneyPaintingUserView">
+        select mpp.id,
+        mpp.tips,
+        mpp.img,
+        ifnull((select status
+        from midjourney_painting_collect_record pr
+        where pr.plaza_id = mpp.id and user_id = #{userId}), false) as collect
+        from midjourney_painting_plaza mpp
+        where mpp.status is true
+        and mpp.deleted is true
+        <if test="collect != null">
+            and EXISTS (select 1 from midjourney_painting_collect_record pr
+            where pr.plaza_id = mpp.id and user_id = #{userId} and pr.status is ${collect} limit 1)
+        </if>
+        order by mpp.update_time desc
+    </select>
+</mapper>

+ 0 - 3
netflix-service/src/main/java/com/cyksj/service/midjourney/MidjourneyAccountService.java

@@ -1,12 +1,9 @@
 package com.cyksj.service.midjourney;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.cyksj.model.entity.Account;
 import com.cyksj.model.entity.MidjourneyAccount;
 import com.cyksj.model.entity.MidjourneyUser;
 
-import java.util.List;
-
 /**
  * @author zwhui
  * @date 2024/4/12 15:54

+ 8 - 2
netflix-service/src/main/java/com/cyksj/service/midjourney/impl/MidJourneyAccountServiceImpl.java

@@ -233,8 +233,14 @@ public class MidJourneyAccountServiceImpl extends ServiceImpl<MidjourneyAccountM
         midjourneyUser.setImg(getWxImg(user.getHeadimgurl(), user));
         midjourneyUser.setRelationId(groupsRelation.getId());
         midjourneyUser.setUserToken(UUID.randomUUID().toString());
-        midjourneyUser.setMjFastNum(goodsDonSku.getMjFastNum());
-        midjourneyUser.setMjRelaxNum((goodsDonSku.getMjRelaxNum() == null || goodsDonSku.getMjRelaxNum() == 0) ? null : goodsDonSku.getMjRelaxNum());
+        if (groupsRelation.getAqType() == 2) {
+            //fast模式 5次
+            midjourneyUser.setMjFastNum(5);
+            midjourneyUser.setMjRelaxNum(0);
+        } else {
+            midjourneyUser.setMjFastNum(goodsDonSku.getMjFastNum());
+            midjourneyUser.setMjRelaxNum((goodsDonSku.getMjRelaxNum() == null || goodsDonSku.getMjRelaxNum() == 0) ? null : goodsDonSku.getMjRelaxNum());
+        }
         midjourneyUserMapper.insert(midjourneyUser);
         redisService.set(RedisService.key.MIDJOURNEY_FAST_LIMIT.getName() + midjourneyUser.getId(), midjourneyUser.getMjFastNum(),RedisService.key.MIDJOURNEY_FAST_LIMIT.getTimeout());
         redisService.set(RedisService.key.MIDJOURNEY_USER.getName() + midjourneyUser.getUserToken(), midjourneyUser,RedisService.key.MIDJOURNEY_USER.getTimeout());

+ 32 - 32
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -3010,41 +3010,41 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 						.select(UserDistributeSubWaiting::getLevel).last("limit 1")).stream().map(UserDistributeSubWaiting::getLevel).collect(Collectors.toList());
 				List<UserDistributeSubRewards> userDistributeSubRewards = userDistributeSubRewardsMapper.selectList(Wrappers.lambdaQuery(UserDistributeSubRewards.class)
 						.notIn(CollUtil.isNotEmpty(existLevels), UserDistributeSubRewards::getLevel, existLevels));
-				for (UserDistributeSubRewards userDistributeSubReward : userDistributeSubRewards) {
-					log.info("当前级别:{}对应的目标金额是{}", userDistributeSubReward.getLevel(), userDistributeSubReward.getTargetAmount().divide(BigDecimal.valueOf(100)));
-					Integer rewardLevel = userDistributeSubReward.getLevel();
-					Integer months = userDistributeSubReward.getMonths();
-					BigDecimal targetAmount = userDistributeSubReward.getTargetAmount();
-					//是否达到目标额
-					BigDecimal subOrderMoney = Optional.ofNullable(orderDonMapper.selectSubChannelOrderMoney(subUserId, userDistributeSub.getCreatedTime(), DateUtil.offsetMonth(userDistributeSub.getCreatedTime(), months))).orElse(BigDecimal.ZERO);
-					if (subOrderMoney.compareTo(BigDecimal.ZERO) > 0 && subOrderMoney.compareTo(targetAmount) >= 0) {
-						try {
-							UserDistributeSubWaiting waiting = Optional.ofNullable(userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
-									.eq(UserDistributeSubWaiting::getUserId, userId)
-									.eq(UserDistributeSubWaiting::getSubUserId, subUserId)
-									.eq(UserDistributeSubWaiting::getLevel, rewardLevel)
-									.last("limit 1"))).orElse(new UserDistributeSubWaiting());
-							if (waiting.getId() != null) {
-								if (waiting.getSendStatus() == UserDistributeSubWaiting.Status.close) {
-									userDistributeSubWaitingMapper.update(null, Wrappers.lambdaUpdate(UserDistributeSubWaiting.class)
-											.set(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting)
-											.eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.close)
-											.eq(UserDistributeSubWaiting::getId, waiting.getId()));
+					for (UserDistributeSubRewards userDistributeSubReward : userDistributeSubRewards) {
+						log.info("当前级别:{}对应的目标金额是{}", userDistributeSubReward.getLevel(), userDistributeSubReward.getTargetAmount().divide(BigDecimal.valueOf(100)));
+						Integer rewardLevel = userDistributeSubReward.getLevel();
+						Integer months = userDistributeSubReward.getMonths();
+						BigDecimal targetAmount = userDistributeSubReward.getTargetAmount();
+						//是否达到目标额
+						BigDecimal subOrderMoney = Optional.ofNullable(orderDonMapper.selectSubChannelOrderMoney(subUserId, userDistributeSub.getCreatedTime(), DateUtil.offsetMonth(userDistributeSub.getCreatedTime(), months))).orElse(BigDecimal.ZERO);
+						if (subOrderMoney.compareTo(BigDecimal.ZERO) > 0 && subOrderMoney.compareTo(targetAmount) >= 0) {
+							try {
+								UserDistributeSubWaiting waiting = Optional.ofNullable(userDistributeSubWaitingMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSubWaiting.class)
+										.eq(UserDistributeSubWaiting::getUserId, userId)
+										.eq(UserDistributeSubWaiting::getSubUserId, subUserId)
+										.eq(UserDistributeSubWaiting::getLevel, rewardLevel)
+										.last("limit 1"))).orElse(new UserDistributeSubWaiting());
+								if (waiting.getId() != null) {
+									if (waiting.getSendStatus() == UserDistributeSubWaiting.Status.close) {
+										userDistributeSubWaitingMapper.update(null, Wrappers.lambdaUpdate(UserDistributeSubWaiting.class)
+												.set(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.waiting)
+												.eq(UserDistributeSubWaiting::getSendStatus, UserDistributeSubWaiting.Status.close)
+												.eq(UserDistributeSubWaiting::getId, waiting.getId()));
+									}
+								} else {
+									waiting.setMoney(userDistributeSubReward.getMoney());
+									waiting.setUserId(userId);
+									waiting.setSubUserId(subUserId);
+									waiting.setSendStatus(UserDistributeSubWaiting.Status.waiting);
+									waiting.setSendTime(DateUtil.offsetDay(DateTime.now(), 3));
+									waiting.setLevel(rewardLevel);
+									userDistributeSubWaitingMapper.insert(waiting);
 								}
-							} else {
-								waiting.setMoney(userDistributeSubReward.getMoney());
-								waiting.setUserId(userId);
-								waiting.setSubUserId(subUserId);
-								waiting.setSendStatus(UserDistributeSubWaiting.Status.waiting);
-								waiting.setSendTime(DateUtil.offsetDay(DateTime.now(), 3));
-								waiting.setLevel(rewardLevel);
-								userDistributeSubWaitingMapper.insert(waiting);
+								log.info("分销用户:{}下级渠道:{}达到:{}销售额,发送奖励成功", userId, subUserId, UserDistributeSubRewards.RewardLevel.values()[rewardLevel].getMsg());
+							} catch (DuplicateKeyException e) {
 							}
-							log.info("分销用户:{}下级渠道:{}达到:{}销售额,发送奖励成功", userId, subUserId, UserDistributeSubRewards.RewardLevel.values()[rewardLevel].getMsg());
-						} catch (DuplicateKeyException e) {
 						}
 					}
-				}
 			}
 
 		}
@@ -3521,4 +3521,4 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			userTrialTicketJumpPayRecordMapper.insert(userTrialTicketJumpPayRecord);
 		}
 	}
-}
+}

+ 3 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/mj/MidjourneyPaintingController.java

@@ -71,7 +71,9 @@ public class MidjourneyPaintingController {
 	 */
 	@GetMapping("/get")
 	public Result<SearchResult<MidjourneyPaintingPlaza>> saveOrUpdatePainting() {
-		SearchResult<MidjourneyPaintingPlaza> search = beanSearcher.search(MidjourneyPaintingPlaza.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		SearchResult<MidjourneyPaintingPlaza> search = beanSearcher.search(MidjourneyPaintingPlaza.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(MidjourneyPaintingPlaza::getDeleted, 1)
+				.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 

+ 72 - 16
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MidjourneyController.java

@@ -1,19 +1,24 @@
 package com.cyksj.web.controller.mirror;
 
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.MidjourneyPaintingCollectRecordMapper;
 import com.cyksj.mapper.MidjourneyPaintingPlazaMapper;
 import com.cyksj.mapper.MidjourneyUserMapper;
 import com.cyksj.model.dto.*;
-import com.cyksj.model.entity.GroupsRelation;
+import com.cyksj.model.entity.MidjourneyPaintingCollectRecord;
 import com.cyksj.model.entity.MidjourneyPaintingPlaza;
 import com.cyksj.model.entity.MidjourneyUser;
 import com.cyksj.model.entity.MidjourneyUserConversation;
 import com.cyksj.model.views.MidjourneyPaintingUserView;
+import com.cyksj.model.views.MidjourneyUserPaintingDayRecordView;
+import com.cyksj.model.views.MidjourneyUserPaintingRecordView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.midjourney.MidjourneyService;
 import com.cyksj.service.user.UserBindRelationService;
@@ -23,11 +28,13 @@ import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * @author zwhui
@@ -55,6 +62,8 @@ public class MidjourneyController {
 
     private final MidjourneyPaintingPlazaMapper midjourneyPaintingPlazaMapper;
 
+    private final MidjourneyPaintingCollectRecordMapper midjourneyPaintingCollectRecordMapper;
+
     public MidjourneyUser getUser(){
         String userToken = request.getHeader("user-token");
         MidjourneyUser midjourneyUser = (MidjourneyUser) redisService.get(RedisService.key.MIDJOURNEY_USER.getName() + userToken);
@@ -352,30 +361,49 @@ public class MidjourneyController {
     }
 
 
-
     /**
      * mj绘画广场 我的收藏
      */
     @GetMapping("/get/painting")
-    public Result<SearchResult<MidjourneyPaintingUserView>> getPaintingCollect(Boolean isCollect) {
-        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
-        if (isCollect != null && isCollect) {
-            MidjourneyUser user = getUser();
-            GroupsRelation relation = groupsRelationMapper.selectById(user.getRelationId());
-            if (relation == null) {
-                return GatewayResponse.SUCCESS.newBuilder().toResult();
+    public Result<Page<MidjourneyPaintingUserView>> getPaintingCollect(@RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "10") Integer limit, Boolean collect) {
+        if (limit > 20) {
+            limit = 20;
+        }
+        MidjourneyUser user = getUser();
+        Page<MidjourneyPaintingUserView> page = midjourneyPaintingPlazaMapper.getPaintingList(new Page<>(start, limit), collect, user.getId());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(page);
+    }
+
+    /**
+     * 修改 mj绘画广场 收藏状态
+     */
+    @PutMapping("/collect/painting/{id}")
+    public Result<SearchResult<MidjourneyPaintingUserView>> collectPainting(@PathVariable Long id) {
+        MidjourneyUser user = getUser();
+        MidjourneyPaintingPlaza midjourneyPaintingPlaza = midjourneyPaintingPlazaMapper.selectById(id);
+        if (midjourneyPaintingPlaza == null || !midjourneyPaintingPlaza.getDeleted()) {
+         return GatewayResponse.SUCCESS.newBuilder().toResult();
+        }
+        MidjourneyPaintingCollectRecord record = Optional.ofNullable(midjourneyPaintingCollectRecordMapper.selectOne(Wrappers.lambdaQuery(MidjourneyPaintingCollectRecord.class)
+                .eq(MidjourneyPaintingCollectRecord::getPlazaId, id)
+                .eq(MidjourneyPaintingCollectRecord::getUserId, user.getId()).last("limit 1"))).orElse(new MidjourneyPaintingCollectRecord());
+        if (record.getId() == null) {
+            try {
+                record.setStatus(true);
+                record.setUserId(user.getId());
+                record.setPlazaId(id);
+                midjourneyPaintingCollectRecordMapper.insert(record);
+            } catch (DuplicateKeyException e) {
             }
-            Long userId = relation.getUserId();
-            List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
-            String pr = String.format(" inner join midjourney_painting_collect_record pr on pr.plaza_id = mpp.id and mpp.user_id in (%s)", userIdList.toString().replaceAll("]", "").replaceAll("\\[", ""));
-            builder.put("pr", pr);
+        } else {
+            record.setStatus(!record.getStatus());
+            midjourneyPaintingCollectRecordMapper.updateById(record);
         }
-        SearchResult<MidjourneyPaintingUserView> search = beanSearcher.search(MidjourneyPaintingUserView.class, builder.build());
-        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
     /**
-     * 复制mj绘画
+     * 复制mj绘画广场 提示词
      */
     @PostMapping("/painting/copy/{id}")
     public Result<String> resetPaintingCopyNum(@PathVariable Long id) {
@@ -385,4 +413,32 @@ public class MidjourneyController {
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
+
+    /**
+     * 用户绘画记录
+     */
+    @GetMapping("/get/painting/record")
+    public Result<SearchResult<MidjourneyUserPaintingDayRecordView>> getPaintingRecord(String prompt) {
+        MidjourneyUser user = getUser();
+        String condition = String.format(" and mc.user_id = %s", user.getId());
+        if (StrUtil.isNotBlank(prompt)) {
+            condition += String.format(" and mc.prompt = '%s'", prompt);
+        }
+        SearchResult<MidjourneyUserPaintingDayRecordView> search = beanSearcher.search(MidjourneyUserPaintingDayRecordView.class, MapUtils.flatBuilder(request.getParameterMap())
+                .put("condition", condition)
+                .orderBy(MidjourneyUserPaintingRecordView::getCreatedTime).desc()
+                .build());
+        String dateSql;
+        for (MidjourneyUserPaintingDayRecordView e : search.getDataList()) {
+            String date = e.getDate();
+            dateSql = String.format(" and DATE_FORMAT(mc.created_time,'%%Y-%%m-%%d') = '%s'", date);
+            List<MidjourneyUserPaintingRecordView> list = beanSearcher.searchAll(MidjourneyUserPaintingRecordView.class, MapUtils.builder()
+                    .put("condition", condition)
+                    .put("date", dateSql)
+                    .orderBy(MidjourneyUserPaintingRecordView::getCreatedTime).desc()
+                    .build());
+            e.setList(list);
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
 }