You've already forked FrameTour-BE
修复送照片,支持送原片
This commit is contained in:
@@ -57,6 +57,7 @@ public interface SourceMapper {
|
|||||||
int addRelations(List<MemberSourceEntity> list);
|
int addRelations(List<MemberSourceEntity> list);
|
||||||
|
|
||||||
int updateRelation(MemberSourceEntity memberSourceEntity);
|
int updateRelation(MemberSourceEntity memberSourceEntity);
|
||||||
|
int freeRelations(List<Long> ids, int type);
|
||||||
|
|
||||||
List<SourceRespVO> queryByRelation(SourceReqQuery sourceReqQuery);
|
List<SourceRespVO> queryByRelation(SourceReqQuery sourceReqQuery);
|
||||||
|
|
||||||
|
@@ -95,4 +95,5 @@ public class ScenicConfigEntity {
|
|||||||
private String extraNotificationTime;
|
private String extraNotificationTime;
|
||||||
|
|
||||||
private Integer photoFreeNum;
|
private Integer photoFreeNum;
|
||||||
|
private Integer videoFreeNum;
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,7 @@ import com.ycwl.basic.service.task.TaskService;
|
|||||||
import com.ycwl.basic.storage.StorageFactory;
|
import com.ycwl.basic.storage.StorageFactory;
|
||||||
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
||||||
import com.ycwl.basic.storage.utils.StorageUtil;
|
import com.ycwl.basic.storage.utils.StorageUtil;
|
||||||
|
import com.ycwl.basic.task.VideoPieceGetter;
|
||||||
import com.ycwl.basic.utils.*;
|
import com.ycwl.basic.utils.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -303,33 +304,34 @@ public class FaceServiceImpl implements FaceService {
|
|||||||
}
|
}
|
||||||
return memberSourceEntity;
|
return memberSourceEntity;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
List<Long> freeSourceIds = new ArrayList<>();
|
||||||
|
List<MemberSourceEntity> photoSource = memberSourceEntityList.stream().filter(item -> item.getIsFree() == 0).filter(item -> Integer.valueOf(2).equals(item.getType())).toList();
|
||||||
if (isNew) {
|
if (isNew) {
|
||||||
|
// 送照片逻辑
|
||||||
if (scenicConfig != null && scenicConfig.getPhotoFreeNum() != null && scenicConfig.getPhotoFreeNum() > 0) {
|
if (scenicConfig != null && scenicConfig.getPhotoFreeNum() != null && scenicConfig.getPhotoFreeNum() > 0) {
|
||||||
List<Integer> randInt = new ArrayList<>();
|
if (scenicConfig.getPhotoFreeNum() > photoSource.size()) {
|
||||||
if (scenicConfig.getPhotoFreeNum() > memberSourceEntityList.size()) {
|
freeSourceIds.addAll(photoSource.stream().map(MemberSourceEntity::getSourceId).toList());
|
||||||
for (MemberSourceEntity memberSourceEntity : memberSourceEntityList) {
|
|
||||||
memberSourceEntity.setIsFree(1);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < scenicConfig.getPhotoFreeNum(); i++) {
|
freeSourceIds.addAll(photoSource.stream().limit(scenicConfig.getPhotoFreeNum()).map(MemberSourceEntity::getSourceId).toList());
|
||||||
// 随机
|
|
||||||
Integer idx;
|
|
||||||
while (true) {
|
|
||||||
idx = new Random().nextInt(memberSourceEntityList.size());
|
|
||||||
if (!randInt.contains(idx)) {
|
|
||||||
randInt.add(idx);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
memberSourceEntityList.get(idx).setIsFree(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
List<MemberSourceEntity> sourceEntitiesExist = sourceMapper.listByFaceRelation(face.getMemberId(), faceId, 2);
|
// 重新切视频逻辑
|
||||||
memberSourceEntityList = memberSourceEntityList.stream().filter(memberSourceEntity -> {
|
if (scenicConfig != null && !Integer.valueOf(1).equals(scenicConfig.getDisableSourceVideo())) {
|
||||||
return sourceEntitiesExist.stream().noneMatch(sourceEntity -> sourceEntity.getSourceId().equals(memberSourceEntity.getSourceId()));
|
long videoCount = memberSourceEntityList.stream().filter(item -> item.getType().equals(1)).count();
|
||||||
}).toList();
|
long photoCount = memberSourceEntityList.stream().filter(item -> item.getType().equals(2)).count();
|
||||||
|
if (photoCount > videoCount) {
|
||||||
|
VideoPieceGetter.Task task = new VideoPieceGetter.Task();
|
||||||
|
task.faceId = faceId;
|
||||||
|
task.faceSampleIds = sampleListIds;
|
||||||
|
task.templateId = null;
|
||||||
|
task.memberId = face.getMemberId();
|
||||||
|
task.callback = () -> {
|
||||||
|
log.info("task callback: {}", task);
|
||||||
|
};
|
||||||
|
VideoPieceGetter.addTask(task);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!memberSourceEntityList.isEmpty()) {
|
if (!memberSourceEntityList.isEmpty()) {
|
||||||
IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), memberSourceEntityList.getFirst().getType(), faceEntity.getId());
|
IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), memberSourceEntityList.getFirst().getType(), faceEntity.getId());
|
||||||
@@ -341,14 +343,12 @@ public class FaceServiceImpl implements FaceService {
|
|||||||
} else {
|
} else {
|
||||||
memberSourceEntity.setIsBuy(0);
|
memberSourceEntity.setIsBuy(0);
|
||||||
}
|
}
|
||||||
|
if (freeSourceIds.contains(memberSourceEntity.getSourceId())) {
|
||||||
|
memberSourceEntity.setIsFree(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sourceMapper.addRelations(memberSourceEntityList);
|
sourceMapper.addRelations(memberSourceEntityList);
|
||||||
taskTaskService.autoCreateTaskByFaceId(face.getId());
|
taskTaskService.autoCreateTaskByFaceId(face.getId());
|
||||||
// VideoPieceGetter.Task task = new VideoPieceGetter.Task();
|
|
||||||
// task.faceId = face.getId();
|
|
||||||
// task.faceSampleIds = sampleListIds;
|
|
||||||
// task.memberId = face.getMemberId();
|
|
||||||
// VideoPieceGetter.addTask(task);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return scenicDbSearchResult;
|
return scenicDbSearchResult;
|
||||||
|
@@ -7,7 +7,9 @@ import com.ycwl.basic.constant.StorageConstant;
|
|||||||
import com.ycwl.basic.device.DeviceFactory;
|
import com.ycwl.basic.device.DeviceFactory;
|
||||||
import com.ycwl.basic.device.entity.common.FileObject;
|
import com.ycwl.basic.device.entity.common.FileObject;
|
||||||
import com.ycwl.basic.device.operator.IDeviceStorageOperator;
|
import com.ycwl.basic.device.operator.IDeviceStorageOperator;
|
||||||
|
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
|
||||||
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
|
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
|
||||||
|
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
||||||
import com.ycwl.basic.repository.DeviceRepository;
|
import com.ycwl.basic.repository.DeviceRepository;
|
||||||
import com.ycwl.basic.mapper.FaceSampleMapper;
|
import com.ycwl.basic.mapper.FaceSampleMapper;
|
||||||
import com.ycwl.basic.mapper.SourceMapper;
|
import com.ycwl.basic.mapper.SourceMapper;
|
||||||
@@ -16,6 +18,8 @@ import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity;
|
|||||||
import com.ycwl.basic.model.pc.device.entity.DeviceEntity;
|
import com.ycwl.basic.model.pc.device.entity.DeviceEntity;
|
||||||
import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity;
|
import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity;
|
||||||
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
||||||
|
import com.ycwl.basic.repository.FaceRepository;
|
||||||
|
import com.ycwl.basic.repository.ScenicRepository;
|
||||||
import com.ycwl.basic.repository.TemplateRepository;
|
import com.ycwl.basic.repository.TemplateRepository;
|
||||||
import com.ycwl.basic.storage.StorageFactory;
|
import com.ycwl.basic.storage.StorageFactory;
|
||||||
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
||||||
@@ -57,6 +61,8 @@ public class VideoPieceGetter {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private FaceSampleMapper faceSampleMapper;
|
private FaceSampleMapper faceSampleMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private FaceRepository faceRepository;
|
||||||
|
@Autowired
|
||||||
private DeviceRepository deviceRepository;
|
private DeviceRepository deviceRepository;
|
||||||
@Autowired
|
@Autowired
|
||||||
private SourceMapper sourceMapper;
|
private SourceMapper sourceMapper;
|
||||||
@@ -68,6 +74,8 @@ public class VideoPieceGetter {
|
|||||||
private TaskStatusBiz taskStatusBiz;
|
private TaskStatusBiz taskStatusBiz;
|
||||||
@Autowired
|
@Autowired
|
||||||
private VideoReUploader videoReUploader;
|
private VideoReUploader videoReUploader;
|
||||||
|
@Autowired
|
||||||
|
private ScenicRepository scenicRepository;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class Task {
|
public static class Task {
|
||||||
@@ -220,6 +228,29 @@ public class VideoPieceGetter {
|
|||||||
task.getCallback().onInvoke();
|
task.getCallback().onInvoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (task.getFaceId() != null) {
|
||||||
|
FaceEntity face = faceRepository.getFace(task.getFaceId());
|
||||||
|
if (face != null) {
|
||||||
|
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(face.getScenicId());
|
||||||
|
if (scenicConfig != null) {
|
||||||
|
// 免费送
|
||||||
|
List<MemberSourceEntity> sourceEntities = sourceMapper.listByFaceRelation(face.getScenicId(), face.getId(), 1);
|
||||||
|
if (sourceEntities.stream().noneMatch(item -> Integer.valueOf(1).equals(item.getIsFree()))) {
|
||||||
|
List<Long> freeSourceRelationIds = new ArrayList<>();
|
||||||
|
if (scenicConfig.getVideoFreeNum() != null && scenicConfig.getVideoFreeNum() > 0) {
|
||||||
|
if (scenicConfig.getVideoFreeNum() > sourceEntities.size()) {
|
||||||
|
freeSourceRelationIds.addAll(sourceEntities.stream().map(MemberSourceEntity::getId).toList());
|
||||||
|
} else {
|
||||||
|
freeSourceRelationIds.addAll(sourceEntities.stream().limit(scenicConfig.getVideoFreeNum()).map(MemberSourceEntity::getId).toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!freeSourceRelationIds.isEmpty()) {
|
||||||
|
sourceMapper.freeRelations(freeSourceRelationIds, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean doCut(Long deviceId, Long faceSampleId, Date baseTime, Task task) {
|
private boolean doCut(Long deviceId, Long faceSampleId, Date baseTime, Task task) {
|
||||||
|
@@ -127,7 +127,8 @@
|
|||||||
image_source_pack_hint=#{imageSourcePackHint},
|
image_source_pack_hint=#{imageSourcePackHint},
|
||||||
video_source_pack_hint=#{videoSourcePackHint},
|
video_source_pack_hint=#{videoSourcePackHint},
|
||||||
extra_notification_time=#{extraNotificationTime},
|
extra_notification_time=#{extraNotificationTime},
|
||||||
photo_free_num= #{photoFreeNum}
|
photo_free_num= #{photoFreeNum},
|
||||||
|
video_free_num= #{videoFreeNum}
|
||||||
</set>
|
</set>
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
@@ -42,6 +42,14 @@
|
|||||||
</set>
|
</set>
|
||||||
where member_id = #{memberId} and face_id = #{faceId} and `type` = #{type}
|
where member_id = #{memberId} and face_id = #{faceId} and `type` = #{type}
|
||||||
</update>
|
</update>
|
||||||
|
<update id="freeRelations">
|
||||||
|
update member_source
|
||||||
|
set is_free = 1
|
||||||
|
where type = #{type} and id in
|
||||||
|
<foreach item="item" collection="ids" open="(" separator="," close=")">
|
||||||
|
#{item}
|
||||||
|
</foreach>
|
||||||
|
</update>
|
||||||
<delete id="deleteById">
|
<delete id="deleteById">
|
||||||
delete from source where id = #{id}
|
delete from source where id = #{id}
|
||||||
</delete>
|
</delete>
|
||||||
|
Reference in New Issue
Block a user