规整规整项目

This commit is contained in:
2025-03-25 11:09:50 +08:00
parent decfe18b9a
commit 2b43d8a7b7
33 changed files with 41 additions and 324 deletions

View File

@@ -0,0 +1,157 @@
package com.ycwl.basic.service.pc.impl;
import cn.hutool.crypto.digest.DigestUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.constant.BaseContextHandler;
import com.ycwl.basic.exception.RoleStatusException;
import com.ycwl.basic.mapper.AdminUserMapper;
import com.ycwl.basic.mapper.RoleMapper;
import com.ycwl.basic.model.jwt.JwtInfo;
import com.ycwl.basic.model.pc.adminUser.entity.LoginEntity;
import com.ycwl.basic.model.pc.adminUser.req.*;
import com.ycwl.basic.model.pc.adminUser.resp.AdminUserListRespVO;
import com.ycwl.basic.model.pc.adminUser.resp.LoginRespVO;
import com.ycwl.basic.model.pc.menu.MenuNode;
import com.ycwl.basic.service.pc.AdminUserService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.JwtTokenUtil;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import static com.ycwl.basic.constant.PermissionConstant.ROLE_STATUS;
@Service
public class AdminUserServiceImpl implements AdminUserService {
@Autowired
AdminUserMapper adminUserMapper;
@Autowired
RoleMapper roleMapper;
@Autowired
JwtTokenUtil jwtTokenUtil;
@Autowired
RedisTemplate redisTemplate;
@Override
public ApiResponse list(AdminUserListReqVO adminUserListReqVO) {
PageHelper.startPage(adminUserListReqVO.getPageNum(), adminUserListReqVO.getPageSize());
List<AdminUserListRespVO> list = adminUserMapper.list(adminUserListReqVO);
PageInfo<AdminUserListRespVO> pageInfo = new PageInfo(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse addOrUpdate(AddOrUpdateAdminUserReqVO addOrUpdateAdminUserReqVO) {
addOrUpdateAdminUserReqVO.setPassword(DigestUtil.md5Hex(addOrUpdateAdminUserReqVO.getPassword()));
String id = addOrUpdateAdminUserReqVO.getId();
if (StringUtils.isBlank(id)) {
addOrUpdateAdminUserReqVO.setId(SnowFlakeUtil.getId());
// String password = addOrUpdateAdminUserReqVO.getPassword();
// addOrUpdateAdminUserReqVO.setPassword(password);
int add = adminUserMapper.add(addOrUpdateAdminUserReqVO);
if (add > 0) {
return ApiResponse.success(null);
}
} else {
int update = adminUserMapper.update(addOrUpdateAdminUserReqVO);
if (update > 0) {
return ApiResponse.success(null);
}
}
return ApiResponse.fail("失败");
}
@Override
public ApiResponse delete(String id) {
if (adminUserMapper.delete(id) > 0) {
return ApiResponse.success(null);
}
return ApiResponse.fail("失败");
}
@Override
public ApiResponse resetPassword(ResetPasswordReqVO resetPasswordReqVO) {
resetPasswordReqVO.setPassword(DigestUtil.md5Hex(resetPasswordReqVO.getPassword()));
if (adminUserMapper.resetPassword(resetPasswordReqVO) > 0) {
return ApiResponse.success(null);
}
return ApiResponse.fail("失败");
}
@Override
public ApiResponse login(LoginReqVO loginReqVO) throws Exception {
String account = loginReqVO.getAccount();
String password = loginReqVO.getPassword();
LoginEntity login = adminUserMapper.login(account);
if (login == null) {
return ApiResponse.fail("账号不存在或密码错误");
}
if (!login.getPassword().equals(DigestUtil.md5Hex(password))) {
return ApiResponse.fail("账号不存在或密码错误");
}
String roleId = login.getRoleId();
Object roleObject = redisTemplate.opsForValue().get(ROLE_STATUS + roleId);
if (roleObject != null) {
if (roleObject.toString().equals("0")) {
throw new RoleStatusException("该角色下的账号已被封禁,请联系管理员");
}
}
List<MenuNode> menuById = roleMapper.getMenuById(roleId);
List<MenuNode> MenuList = new ArrayList<>();
for (MenuNode item : menuById) {
if ("-1".equals(item.getParentId())) {
MenuList.add(item);
}
for (MenuNode item2 : menuById) {
if (item2.getParentId().equals(item.getId())) {
if (item.getChildrenList() == null) {
item.setChildrenList(new ArrayList<>());
}
item.getChildrenList().add(item2);
}
}
}
LoginRespVO loginRespVO = new LoginRespVO();
String token = jwtTokenUtil.generateToken(new JwtInfo(login.getStaffName(), login.getStaffId(), roleId, login.getAccount(), login.getAccount(), null,null));
loginRespVO.setToken(token);
loginRespVO.setName(login.getStaffName());
loginRespVO.setTypeName(login.getTypeName());
loginRespVO.setMenuNodeList(MenuList);
return ApiResponse.success(loginRespVO);
}
@Override
public ApiResponse updatePassword(UpdatePasswordReqVO updatePasswordReqVO) {
String userId = BaseContextHandler.getUserId();
updatePasswordReqVO.setId(userId);
String passwordByAccount = adminUserMapper.getPasswordByAccount(updatePasswordReqVO.getId());
String pwd = DigestUtil.md5Hex(updatePasswordReqVO.getPwd());
if (!passwordByAccount.equals(pwd)) {
return ApiResponse.fail("密码错误!修改失败");
}
String newPwd = DigestUtil.md5Hex(updatePasswordReqVO.getNewPwd());
updatePasswordReqVO.setNewPwd(newPwd);
if (adminUserMapper.updatePassword(updatePasswordReqVO) > 0) {
return ApiResponse.success(null);
}
return ApiResponse.fail("失败");
}
}

View File

@@ -0,0 +1,64 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.BrokerRecordMapper;
import com.ycwl.basic.model.pc.broker.entity.BrokerRecord;
import com.ycwl.basic.model.pc.broker.req.BrokerRecordReqQuery;
import com.ycwl.basic.model.pc.broker.resp.BrokerRecordRespVO;
import com.ycwl.basic.model.pc.broker.resp.DailySummaryRespVO;
import com.ycwl.basic.service.pc.BrokerRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/12 10:00
*/
@Service
public class BrokerRecordServiceImpl implements BrokerRecordService {
@Autowired
private BrokerRecordMapper brokerRecordMapper;
@Override
public PageInfo<BrokerRecordRespVO> pageQuery(BrokerRecordReqQuery brokerRecordReqQuery) {
PageHelper.startPage(brokerRecordReqQuery.getPageNum(), brokerRecordReqQuery.getPageSize());
List<BrokerRecordRespVO> list = brokerRecordMapper.list(brokerRecordReqQuery);
PageInfo<BrokerRecordRespVO> pageInfo = new PageInfo<>(list);
return pageInfo;
}
@Override
public List<BrokerRecordRespVO> list(BrokerRecordReqQuery brokerRecordReqQuery) {
return brokerRecordMapper.list(brokerRecordReqQuery);
}
@Override
public BrokerRecordRespVO getById(Long id) {
return brokerRecordMapper.getById(id);
}
@Override
public int add(BrokerRecord brokerRecord) {
return brokerRecordMapper.add(brokerRecord);
}
@Override
public int delete(Long id) {
return brokerRecordMapper.deleteById(id);
}
@Override
public int update(BrokerRecord brokerRecord) {
return brokerRecordMapper.update(brokerRecord);
}
@Override
public List<DailySummaryRespVO> getDailySummaryByBrokerId(Long brokerId, Date startTime, Date endTime) {
return brokerRecordMapper.getDailySummaryByBrokerId(brokerId, startTime, endTime);
}
}

View File

@@ -0,0 +1,67 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.BrokerMapper;
import com.ycwl.basic.model.pc.broker.entity.BrokerEntity;
import com.ycwl.basic.model.pc.broker.req.BrokerReqQuery;
import com.ycwl.basic.model.pc.broker.resp.BrokerRespVO;
import com.ycwl.basic.service.pc.BrokerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/2 15:55
*/
@Service
public class BrokerServiceImpl implements BrokerService {
@Autowired
private BrokerMapper brokerMapper;
@Override
public PageInfo<BrokerRespVO> pageQuery(BrokerReqQuery brokerReqQuery) {
PageHelper.startPage(brokerReqQuery.getPageNum(),brokerReqQuery.getPageSize());
List<BrokerRespVO> list = brokerMapper.list(brokerReqQuery);
PageInfo<BrokerRespVO> pageInfo = new PageInfo(list);
return pageInfo;
}
@Override
public List<BrokerRespVO> list(BrokerReqQuery brokerReqQuery) {
return brokerMapper.list(brokerReqQuery);
}
@Override
public BrokerRespVO getById(Long id) {
return brokerMapper.getById(id);
}
@Override
public int addOrUpdate(BrokerEntity broker) {
Long id = broker.getId();
if(id==null){
return brokerMapper.add(broker);
}else {
return brokerMapper.update(broker);
}
}
@Override
public int delete(Long id) {
return brokerMapper.deleteById(id);
}
@Override
public int updateStatus(Long id) {
return brokerMapper.updateStatus(id);
}
@Override
public int updateBrokerEnable(Long id) {
return brokerMapper.updateBrokerEnable(id);
}
}

View File

@@ -0,0 +1,49 @@
package com.ycwl.basic.service.pc.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycwl.basic.mapper.CouponMapper;
import com.ycwl.basic.model.pc.coupon.entity.CouponEntity;
import com.ycwl.basic.model.pc.coupon.req.CouponQueryReq;
import com.ycwl.basic.model.pc.coupon.resp.CouponRespVO;
import com.ycwl.basic.service.pc.CouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CouponServiceImpl extends ServiceImpl<CouponMapper, CouponEntity> implements CouponService {
@Autowired
private CouponMapper couponMapper;
@Override
public Integer add(CouponEntity coupon) {
return couponMapper.insert(coupon);
}
@Override
public Boolean update(CouponEntity coupon) {
return couponMapper.updateById(coupon) > 0;
}
@Override
public Boolean delete(Integer id) {
return removeById(id);
}
@Override
public CouponEntity getById(Integer id) {
return couponMapper.selectById(id);
}
@Override
public List<CouponRespVO> list(CouponQueryReq query) {
List<CouponRespVO> list = couponMapper.selectByQuery(query);
return list;
}
@Override
public Boolean updateStatus(Integer id) {
return couponMapper.updateStatus(id) > 0;
}
}

View File

@@ -0,0 +1,176 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.model.pc.device.entity.DeviceEntity;
import com.ycwl.basic.model.pc.device.req.DeviceBatchSortRequest;
import com.ycwl.basic.model.wvp.WvpSyncReqVo;
import com.ycwl.basic.repository.DeviceRepository;
import com.ycwl.basic.mapper.DeviceMapper;
import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity;
import com.ycwl.basic.model.pc.device.req.DeviceAddOrUpdateReq;
import com.ycwl.basic.model.pc.device.req.DeviceReqQuery;
import com.ycwl.basic.model.pc.device.resp.DeviceRespVO;
import com.ycwl.basic.service.pc.DeviceService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @Author:longbinbin
* @Date:2024/12/2 16:18
*/
@Service
public class DeviceServiceImpl implements DeviceService {
@Autowired
private DeviceMapper deviceMapper;
@Autowired
private DeviceRepository deviceRepository;
@Override
public ApiResponse<PageInfo<DeviceRespVO>> pageQuery(DeviceReqQuery deviceReqQuery) {
PageHelper.startPage(deviceReqQuery.getPageNum(), deviceReqQuery.getPageSize());
List<DeviceRespVO> list = deviceMapper.list(deviceReqQuery);
for (DeviceRespVO deviceRespVO : list) {
DeviceEntity onlineStatus = deviceRepository.getOnlineStatus(deviceRespVO.getId());
if (onlineStatus != null) {
deviceRespVO.setKeepaliveAt(onlineStatus.getKeepaliveAt());
if (new Date().getTime() - onlineStatus.getKeepaliveAt().getTime() > 300000) {
deviceRespVO.setOnline(0);
} else {
deviceRespVO.setOnline(onlineStatus.getOnline());
}
} else {
deviceRespVO.setOnline(0);
deviceRespVO.setKeepaliveAt(null);
}
}
PageInfo<DeviceRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<DeviceRespVO>> list(DeviceReqQuery deviceReqQuery) {
return ApiResponse.success(deviceMapper.list(deviceReqQuery));
}
@Override
public ApiResponse<DeviceRespVO> getById(Long id) {
return ApiResponse.success(deviceMapper.getById(id));
}
@Override
public ApiResponse addOrUpdate(DeviceAddOrUpdateReq deviceReqQuery) {
Long id = deviceReqQuery.getId();
if (id == null) {
deviceReqQuery.setId(SnowFlakeUtil.getLongId());
if (StringUtils.isBlank(deviceReqQuery.getNo())) {
deviceReqQuery.setNo(deviceReqQuery.getId().toString());
}
deviceReqQuery.setStatus(0);
return ApiResponse.success(deviceMapper.add(deviceReqQuery));
} else {
deviceRepository.clearDeviceCache(deviceReqQuery.getId());
deviceMapper.update(deviceReqQuery);
deviceRepository.clearDeviceCache(deviceReqQuery.getId());
return ApiResponse.success(0);
}
}
@Override
public ApiResponse deleteById(Long id) {
return ApiResponse.success(deviceMapper.deleteById(id));
}
@Override
public ApiResponse updateStatus(Long id) {
deviceRepository.clearDeviceCache(id);
deviceMapper.updateStatus(id);
deviceRepository.clearDeviceCache(id);
return ApiResponse.success(1);
}
@Override
public DeviceConfigEntity getConfig(Long id) {
DeviceConfigEntity config = deviceMapper.getConfigByDeviceId(id);
if (config == null) {
config = new DeviceConfigEntity();
config.setId(SnowFlakeUtil.getLongId());
config.setDeviceId(id);
deviceMapper.addConfig(config);
}
return config;
}
@Override
public void saveConfig(Long configId, DeviceConfigEntity config) {
config.setId(configId);
deviceMapper.updateConfig(config);
deviceRepository.clearDeviceCache(config.getDeviceId());
}
@Override
public void updateDevices(Long scenicId, WvpSyncReqVo reqVo) {
if (reqVo == null) {
return;
}
if (reqVo.getDevices() != null && !reqVo.getDevices().isEmpty()) {
for (WvpSyncReqVo.DeviceItem deviceItem : reqVo.getDevices()) {
DeviceEntity device = deviceRepository.getDeviceByDeviceNo(deviceItem.getDeviceNo());
if (device != null) {
device.setOnline(deviceItem.getOnline());
device.setKeepaliveAt(deviceItem.getKeepaliveAt());
deviceRepository.updateOnlineStatus(device.getId(), deviceItem.getIp(), 1, deviceItem.getKeepaliveAt());
}
}
}
}
@Override
public ApiResponse<Boolean> sortDevice(Long deviceId, Long afterDeviceId) {
DeviceEntity device = deviceRepository.getDevice(deviceId);
if (device == null) {
return ApiResponse.fail("设备不存在");
}
List<DeviceEntity> scenicDeviceList = deviceRepository.getAllDeviceByScenicId(device.getScenicId());
AtomicInteger sortNum = new AtomicInteger(0);
for (DeviceEntity item : scenicDeviceList) {
item.setSort(sortNum.addAndGet(1));
}
Optional<DeviceEntity> templateOptional = scenicDeviceList.stream().filter(item -> item.getId().equals(deviceId)).findAny();
Optional<DeviceEntity> afterTemplateOptional = scenicDeviceList.stream().filter(item -> item.getId().equals(afterDeviceId)).findAny();
if (!templateOptional.isPresent()) {
return ApiResponse.fail("设备不存在");
}
if (afterTemplateOptional.isPresent()) {
DeviceEntity afterTemplate = afterTemplateOptional.get();
Integer newSort = afterTemplate.getSort();
DeviceEntity oldTemplate = templateOptional.get();
Integer oldSort = oldTemplate.getSort();
afterTemplate.setSort(oldSort);
oldTemplate.setSort(newSort);
}
scenicDeviceList.forEach(item -> {
deviceMapper.updateSort(item.getId(), item.getSort());
deviceRepository.clearDeviceCache(item.getId());
deviceRepository.clearDeviceCache(item.getNo());
deviceRepository.clearDeviceCache(item.getNo2());
});
return ApiResponse.success(true);
}
@Override
public ApiResponse<Boolean> batchSort(Long scenicId, DeviceBatchSortRequest request) {
for (DeviceBatchSortRequest.SortItem item : request.getList()) {
deviceMapper.updateSort(item.getId(), item.getSort());
deviceRepository.clearDeviceCache(item.getId());
}
return ApiResponse.success(true);
}
}

View File

@@ -0,0 +1,26 @@
package com.ycwl.basic.service.pc.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycwl.basic.mapper.FaceDetectLogMapper;
import com.ycwl.basic.model.pc.faceDetectLog.entity.FaceDetectLog;
import com.ycwl.basic.model.pc.faceDetectLog.req.FaceDetectLogReqQuery;
import com.ycwl.basic.service.pc.FaceDetectLogService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Service
public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, FaceDetectLog> implements FaceDetectLogService {
@Override
public List<FaceDetectLog> listByTimeDesc(FaceDetectLogReqQuery req) {
LambdaQueryWrapper<FaceDetectLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(FaceDetectLog::getCreateTime);
queryWrapper.gt(Objects.nonNull(req.getStartTime()), FaceDetectLog::getCreateTime, req.getStartTime());
queryWrapper.lt(Objects.nonNull(req.getEndTime()), FaceDetectLog::getCreateTime, req.getEndTime());
queryWrapper.likeLeft(StringUtils.isNotBlank(req.getScenicId()), FaceDetectLog::getDbName, req.getScenicId());
return list(queryWrapper);
}
}

View File

@@ -0,0 +1,80 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.faceSample.req.FaceSampleReqQuery;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import com.ycwl.basic.service.pc.FaceSampleService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/2 16:39
*/
@Service
public class FaceSampleServiceImpl implements FaceSampleService {
@Autowired
private FaceSampleMapper faceSampleMapper;
@Override
public ApiResponse<PageInfo<FaceSampleRespVO>> pageQuery(FaceSampleReqQuery faceSampleReqQuery) {
PageHelper.startPage(faceSampleReqQuery.getPageNum(),faceSampleReqQuery.getPageSize());
List<FaceSampleRespVO> list = faceSampleMapper.list(faceSampleReqQuery);
PageInfo<FaceSampleRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<FaceSampleRespVO>> list(FaceSampleReqQuery faceSampleReqQuery) {
return ApiResponse.success(faceSampleMapper.list(faceSampleReqQuery));
}
@Override
public ApiResponse<FaceSampleRespVO> getById(Long id) {
return ApiResponse.success(faceSampleMapper.getById(id));
}
@Override
public ApiResponse<Integer> add(FaceSampleEntity faceSample) {
faceSample.setId(SnowFlakeUtil.getLongId());
int i = faceSampleMapper.add(faceSample);
if (i == 0) {
return ApiResponse.fail("添加失败");
}
return ApiResponse.success(i);
}
@Override
public ApiResponse<Integer> deleteById(Long id) {
int i = faceSampleMapper.deleteById(id);
if (i == 0) {
return ApiResponse.fail("删除失败");
}
return ApiResponse.success(i);
}
@Override
public ApiResponse<Integer> deleteByIds(List<Long> ids) {
int i = faceSampleMapper.deleteByIds(ids);
if (i == 0) {
return ApiResponse.fail("删除失败");
}
return ApiResponse.success(i);
}
@Override
public ApiResponse<Integer> update(FaceSampleEntity faceSample) {
int i = faceSampleMapper.update(faceSample);
if (i == 0) {
return ApiResponse.fail("修改失败");
}
return ApiResponse.success(i);
}
}

View File

@@ -0,0 +1,300 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.biz.OrderBiz;
import com.ycwl.basic.enums.StatisticEnum;
import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.mapper.SourceMapper;
import com.ycwl.basic.mapper.StatisticsMapper;
import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.VideoMapper;
import com.ycwl.basic.model.mobile.face.FaceRecognizeResp;
import com.ycwl.basic.model.mobile.order.IsBuyRespVO;
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
import com.ycwl.basic.model.pc.face.req.FaceReqQuery;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity;
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.pc.FaceService;
import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.service.task.TaskService;
import com.ycwl.basic.storage.StorageFactory;
import com.ycwl.basic.storage.adapters.IStorageAdapter;
import com.ycwl.basic.storage.utils.StorageUtil;
import com.ycwl.basic.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME;
/**
* @Author:longbinbin
* @Date:2024/12/2 16:39
*/
@Slf4j
@Service
public class FaceServiceImpl implements FaceService {
@Autowired
private FaceMapper faceMapper;
@Autowired
private TaskFaceService faceService;
@Autowired
private StatisticsMapper statisticsMapper;
@Autowired
private TaskService taskTaskService;
@Autowired
private SourceMapper sourceMapper;
@Autowired
private FaceSampleMapper faceSampleMapper;
@Autowired
private OrderBiz orderBiz;
@Autowired
private FaceRepository faceRepository;
@Autowired
private VideoMapper videoMapper;
@Autowired
private ScenicRepository scenicRepository;
@Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
PageHelper.startPage(faceReqQuery.getPageNum(),faceReqQuery.getPageSize());
List<FaceRespVO> list = faceMapper.list(faceReqQuery);
PageInfo<FaceRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<FaceRespVO>> list(FaceReqQuery faceReqQuery) {
return ApiResponse.success(faceMapper.list(faceReqQuery));
}
@Override
public ApiResponse<FaceRespVO> getById(Long id) {
return ApiResponse.success(faceMapper.getById(id));
}
@Override
public ApiResponse<Integer> add(FaceEntity face) {
face.setId(SnowFlakeUtil.getLongId());
int i = faceMapper.add(face);
if (i == 0) {
return ApiResponse.fail("添加失败");
}
return ApiResponse.success(i);
}
@Override
public ApiResponse<Integer> deleteById(Long id) {
int i = faceMapper.deleteById(id);
if (i == 0) {
return ApiResponse.fail("删除失败");
}
return ApiResponse.success(i);
}
@Override
public ApiResponse<Integer> deleteByIds(List<Long> ids) {
int i = faceMapper.deleteByIds(ids);
if (i == 0) {
return ApiResponse.fail("删除失败");
}
return ApiResponse.success(i);
}
@Override
public FaceRecognizeResp faceUpload(MultipartFile file, Long scenicId, Long userId) {
//1、上传人脸照片
IStorageAdapter adapter = StorageFactory.use("faces");
String filePath = StorageUtil.joinPath("user-faces", DateUtils.format(new Date(),"yyyy-MM-dd"));
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.split("\\.", 2)[1];
String fileName = UUID.randomUUID().toString() + "." + suffix;
String faceUrl = adapter.uploadFile(file, filePath, fileName);
Long newFaceId = SnowFlakeUtil.getLongId();
Long oldFaceId = null;
SearchFaceRespVo userDbSearchResult = faceService.searchFace(USER_FACE_DB_NAME+scenicId, faceUrl, "判断是否为用户上传过的人脸");
float strictScore = 0.6F;
if (userDbSearchResult == null) {
// 都是null了,那得是新的
faceService.addFaceSample(USER_FACE_DB_NAME+scenicId, newFaceId.toString(), faceUrl, newFaceId.toString());
} else if (userDbSearchResult.getSampleListIds() == null || userDbSearchResult.getSampleListIds().isEmpty()) {
// 没有匹配到过,也得是新的
faceService.addFaceSample(USER_FACE_DB_NAME+scenicId, newFaceId.toString(), faceUrl, newFaceId.toString());
} else if (userDbSearchResult.getFirstMatchRate() < strictScore) {
// 有匹配结果,但是不匹配旧的
faceService.addFaceSample(USER_FACE_DB_NAME+scenicId, newFaceId.toString(), faceUrl, newFaceId.toString());
} else {
// 有匹配结果,且能匹配旧的数据
Optional<Long> faceAny = userDbSearchResult.getSampleListIds().stream().filter(_faceId -> {
FaceEntity face = faceRepository.getFace(_faceId);
if (face == null) {
return false;
}
return face.getMemberId().equals(userId);
}).findAny();
if (faceAny.isPresent()) {
oldFaceId = faceAny.get();
FaceRespVO oldFace = faceMapper.getById(oldFaceId);
if (oldFace == null) {
faceService.deleteFaceSample(USER_FACE_DB_NAME+scenicId, oldFaceId.toString());
faceService.addFaceSample(USER_FACE_DB_NAME+scenicId, newFaceId.toString(), faceUrl, newFaceId.toString());
oldFaceId = null;
} else {
newFaceId = oldFaceId;
}
}
}
if (oldFaceId==null) {
//新增人脸
FaceEntity faceEntity = new FaceEntity();
faceEntity.setCreateAt(new Date());
faceEntity.setScenicId(scenicId);
faceEntity.setMemberId(userId);
faceEntity.setFaceUrl(faceUrl);
faceEntity.setId(newFaceId);
faceMapper.add(faceEntity);
} else {
//更新人脸
FaceEntity faceEntity = new FaceEntity();
faceEntity.setId(oldFaceId);
faceEntity.setFaceUrl(faceUrl);
faceMapper.update(faceEntity);
faceRepository.clearFaceCache(oldFaceId);
}
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(userId);
statisticsRecordAddReq.setType(StatisticEnum.UPLOAD_FACE.code);
statisticsRecordAddReq.setScenicId(scenicId);
statisticsRecordAddReq.setMorphId(newFaceId);
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
FaceRecognizeResp resp = new FaceRecognizeResp();
resp.setUrl(faceUrl);
resp.setFaceId(newFaceId);
matchFaceId(newFaceId, oldFaceId == null);
return resp;
}
@Override
public List<FaceRespVO> listByUser(Long userId, String scenicId) {
return faceMapper.listByScenicAndUserId(scenicId, userId);
}
@Override
public SearchFaceRespVo matchFaceId(Long faceId) {
return matchFaceId(faceId, false);
}
@Override
public SearchFaceRespVo matchFaceId(Long faceId, boolean isNew) {
FaceEntity face = faceRepository.getFace(faceId);
if (face == null) {
return null;
}
SearchFaceRespVo scenicDbSearchResult = faceService.searchFace(face.getScenicId(), face.getFaceUrl());
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(face.getScenicId());
if (scenicDbSearchResult.getSampleListIds() != null && scenicDbSearchResult.getFirstMatchRate() != null && !scenicDbSearchResult.getSampleListIds().isEmpty()) {
if (scenicConfig != null && scenicConfig.getFaceDetectHelperThreshold() != null && scenicConfig.getFaceDetectHelperThreshold() > 0) {
if (scenicDbSearchResult.getSampleListIds().size() < scenicConfig.getFaceDetectHelperThreshold()) {
// 补救逻辑
Long faceSampleId = scenicDbSearchResult.getSampleListIds().get(0);
FaceSampleEntity faceSample = faceRepository.getFaceSample(faceSampleId);
if (faceSample != null) {
// 以这个结果为人脸库的匹配结果
scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施1:人脸数太少少于设定值"+scenicConfig.getFaceDetectHelperThreshold());
}
}
}
// if (scenicDbSearchResult.getFirstMatchRate() > 0.7) {
// // 如果匹配度高于阈值,则使用景区第一张人脸去匹配景区库
// // 找第一张人脸
// Long faceSampleId = scenicDbSearchResult.getSampleListIds().get(0);
// FaceSampleEntity faceSample = faceRepository.getFaceSample(faceSampleId);
// if (faceSample != null) {
// // 以这个结果为人脸库的匹配结果
// scenicDbSearchResult = faceService.searchFace(face.getScenicId().toString(), faceSample.getFaceUrl(), "补救措施2:存在得分够高");
// }
// }
}
FaceEntity faceEntity = new FaceEntity();
faceEntity.setId(faceId);
faceEntity.setScore(scenicDbSearchResult.getScore());
faceEntity.setMatchResult(scenicDbSearchResult.getSearchResultJson());
if (scenicDbSearchResult.getFirstMatchRate() != null) {
faceEntity.setFirstMatchRate(BigDecimal.valueOf(scenicDbSearchResult.getFirstMatchRate()));
}
if (scenicDbSearchResult.getSampleListIds() != null) {
faceEntity.setMatchSampleIds(scenicDbSearchResult.getSampleListIds().stream().map(String::valueOf).collect(Collectors.joining(",")));
}
faceEntity.setCreateAt(new Date());
faceEntity.setScenicId(face.getScenicId());
faceEntity.setMemberId(face.getMemberId());
faceEntity.setFaceUrl(face.getFaceUrl());
List<Long> sampleListIds = scenicDbSearchResult.getSampleListIds();
faceMapper.update(faceEntity);
faceRepository.clearFaceCache(faceEntity.getId());
if (sampleListIds != null && !sampleListIds.isEmpty()) {// 匹配原片:照片
List<SourceEntity> sourceEntities = sourceMapper.listBySampleIds(sampleListIds);
List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> {
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setScenicId(face.getScenicId());
memberSourceEntity.setFaceId(face.getId());
memberSourceEntity.setMemberId(face.getMemberId());
memberSourceEntity.setSourceId(sourceEntity.getId());
memberSourceEntity.setType(sourceEntity.getType());
IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), sourceEntity.getType(), faceEntity.getId());
if (isBuy.isBuy()) { // 如果用户买过
memberSourceEntity.setIsBuy(1);
} else if (isBuy.isFree()) { // 全免费逻辑
memberSourceEntity.setIsBuy(1);
} else {
memberSourceEntity.setIsBuy(0);
}
return memberSourceEntity;
}).collect(Collectors.toList());
if (!memberSourceEntityList.isEmpty()) {
sourceMapper.addRelations(memberSourceEntityList);
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;
}
@Override
public ApiResponse deleteFace(Long faceId) {
FaceEntity face = faceRepository.getFace(faceId);
faceMapper.deleteById(faceId);
faceRepository.clearFaceCache(faceId);
new Thread(() -> {
sourceMapper.deleteNotBuyFaceRelation(face.getMemberId(), faceId);
videoMapper.deleteNotBuyFaceRelations(face.getMemberId(), faceId);
faceService.deleteFaceSample(USER_FACE_DB_NAME+face.getScenicId().toString(), faceId.toString());
}).start();
return ApiResponse.success("删除成功");
}
}

View File

@@ -0,0 +1,72 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.MemberMapper;
import com.ycwl.basic.model.pc.member.entity.MemberEntity;
import com.ycwl.basic.model.pc.member.req.MemberReqQuery;
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
import com.ycwl.basic.service.pc.MemberService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/2 17:23
*/
@Service
public class MemberServiceImpl implements MemberService {
@Autowired
private MemberMapper memberMapper;
@Override
public ApiResponse<PageInfo<MemberRespVO>> pageQuery(MemberReqQuery memberReqQuery) {
PageHelper.startPage(memberReqQuery.getPageNum(), memberReqQuery.getPageSize());
List<MemberRespVO> list = memberMapper.list(memberReqQuery);
PageInfo<MemberRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<MemberRespVO>> list(MemberReqQuery memberReqQuery) {
return ApiResponse.success(memberMapper.list(memberReqQuery));
}
@Override
public ApiResponse<MemberRespVO> getById(Long id) {
return ApiResponse.success(memberMapper.getById(id));
}
@Override
public ApiResponse<Integer> add(MemberEntity member) {
member.setId(SnowFlakeUtil.getLongId());
int i = memberMapper.add(member);
if (i == 0) {
return ApiResponse.fail("添加失败");
}
return ApiResponse.success(i);
}
@Override
public ApiResponse<Integer> deleteById(Long id) {
int i = memberMapper.deleteById(id);
if (i == 0) {
return ApiResponse.fail("删除失败");
}
return ApiResponse.success(i);
}
@Override
public ApiResponse<Integer> update(MemberEntity member) {
int update = memberMapper.update(member);
if (update == 0) {
return ApiResponse.fail("更新失败");
}
return ApiResponse.success(update);
}
}

View File

@@ -0,0 +1,78 @@
package com.ycwl.basic.service.pc.impl;
import com.ycwl.basic.mapper.MenuMapper;
import com.ycwl.basic.model.pc.menu.MenuNode;
import com.ycwl.basic.model.pc.menu.entity.MenuEntity;
import com.ycwl.basic.service.pc.MenuService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/3 10:16
*/
@Service
public class MenuServiceImpl implements MenuService {
@Autowired
private MenuMapper menuMapper;
@Override
public ApiResponse<List<MenuNode>> list(Integer type) {
// if(type==null){
// type=1;
// }
List<MenuNode> listByType = menuMapper.getListByType(type);
List<MenuNode> MenuList = new ArrayList<>();
for (MenuNode item :listByType) {
if ("-1".equals(item.getParentId())) {
MenuList.add(item);
}
for (MenuNode item2 : listByType) {
if (item2.getParentId().equals(item.getId())) {
if (item.getChildrenList() == null) {
item.setChildrenList(new ArrayList<>());
}
item.getChildrenList().add(item2);
}
}
}
return ApiResponse.success(MenuList);
}
@Override
public ApiResponse<Integer> add(MenuEntity menu) {
menu.setId(SnowFlakeUtil.getId());
int add = menuMapper.add(menu);
if(add>0){
return ApiResponse.success(add);
}else {
return ApiResponse.fail("添加失败");
}
}
@Override
public ApiResponse<Integer> update(MenuEntity menu) {
int update = menuMapper.update(menu);
if(update>0){
return ApiResponse.success(update);
}else {
return ApiResponse.fail("更新失败");
}
}
@Override
public ApiResponse<Integer> deleteById(Long id) {
int deleteById = menuMapper.deleteById(id);
if(deleteById>0){
return ApiResponse.success(deleteById);
}else {
return ApiResponse.fail("删除失败");
}
}
}

View File

@@ -0,0 +1,422 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.biz.OrderBiz;
import com.ycwl.basic.biz.PriceBiz;
import com.ycwl.basic.constant.BaseContextHandler;
import com.ycwl.basic.constant.NumberConstant;
import com.ycwl.basic.enums.*;
import com.ycwl.basic.exception.AppException;
import com.ycwl.basic.mapper.*;
import com.ycwl.basic.model.mobile.order.IsBuyRespVO;
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
import com.ycwl.basic.model.mobile.order.PriceObj;
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import com.ycwl.basic.model.pc.order.req.CreateBatchOrderReqVO;
import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO;
import com.ycwl.basic.model.pc.order.req.OrderUpdateReq;
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
import com.ycwl.basic.model.pc.order.resp.OrderItemVO;
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
import com.ycwl.basic.model.pc.orderOp.entity.OrderOperationEntity;
import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO;
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.pc.video.entity.VideoEntity;
import com.ycwl.basic.model.wx.WXPayOrderReqVO;
import com.ycwl.basic.model.wx.WxPayRespVO;
import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.PriceRepository;
import com.ycwl.basic.repository.VideoRepository;
import com.ycwl.basic.repository.VideoTaskRepository;
import com.ycwl.basic.service.mobile.WxPayService;
import com.ycwl.basic.service.pc.OrderService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.BigDecimalUtil;
import com.ycwl.basic.utils.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Author:longbinbin
* @Date:2024/12/3 13:54
*/
@Slf4j
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private SourceMapper sourceMapper;
@Autowired
private WxPayService wxPayService;
@Autowired
private MemberMapper memberMapper;
@Autowired
private OrderOperationMapper orderOperationMapper;
@Autowired
private OrderBiz orderBiz;
@Autowired
private VideoRepository videoRepository;
@Autowired
private VideoTaskRepository videoTaskRepository;
@Autowired
private PriceRepository priceRepository;
@Autowired
private PriceBiz priceBiz;
@Autowired
private FaceRepository faceRepository;
@Override
public ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query) {
PageHelper.startPage(query.getPageNum(), query.getPageSize());
List<OrderRespVO> list = orderMapper.list(query);
PageInfo<OrderRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<PageInfo<OrderRespVO>> pageQueryDetail(OrderReqQuery query) {
PageHelper.startPage(query.getPageNum(), query.getPageSize());
List<OrderRespVO> list = orderMapper.listDetail(query);
PageInfo<OrderRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<OrderRespVO>> list(OrderReqQuery query) {
return ApiResponse.success(orderMapper.list(query));
}
@Override
public ApiResponse<OrderRespVO> detail(Long orderId) {
OrderRespVO byId = orderMapper.getById(orderId);
List<OrderItemVO> orderItemList = byId.getOrderItemList();
orderItemList.forEach(item -> {
if (Integer.valueOf(1).equals(item.getGoodsType())) { // 原片 goodsId就是人脸ID
List<SourceEntity> memberVideoEntityList = sourceMapper.listVideoByFaceRelation(byId.getMemberId(), item.getGoodsId());
item.setCoverList(memberVideoEntityList.stream().map(SourceEntity::getUrl).collect(Collectors.toList()));
if (!memberVideoEntityList.isEmpty()) {
item.setShootingTime(memberVideoEntityList.get(0).getCreateTime());
}
} else if (Integer.valueOf(2).equals(item.getGoodsType())) { // 照片 goodsId就是人脸ID
List<SourceEntity> memberVideoEntityList = sourceMapper.listImageByFaceRelation(byId.getMemberId(), item.getGoodsId());
item.setCoverList(memberVideoEntityList.stream().map(SourceEntity::getUrl).collect(Collectors.toList()));
if (!memberVideoEntityList.isEmpty()) {
item.setShootingTime(memberVideoEntityList.get(0).getCreateTime());
}
} else {
item.setCoverList(Collections.singletonList(item.getCoverUrl()));
VideoEntity videoMapperById = videoRepository.getVideoByTaskId(item.getGoodsId());
if (videoMapperById != null) {
item.setShootingTime(videoTaskRepository.getTaskShotDate(videoMapperById.getTaskId()));
item.setVideoUrl(videoMapperById.getVideoUrl());
}
}
});
return ApiResponse.success(byId);
}
/**
* 发起支付
* @param order 订单
* @param orderItems 商品详情
* @return 支付请求结果
*/
private WxPayRespVO initiatePayment(OrderEntity order, List<OrderItemEntity> orderItems) throws Exception {
WXPayOrderReqVO wxPayOrderReqVO = new WXPayOrderReqVO();
String goodsName = null;
if (orderItems.size() > 1) {
goodsName = "多项景区Vlog商品";
} else {
int type = orderItems.get(NumberConstant.ZERO).getGoodsType();
if (type == NumberConstant.ZERO) {
goodsName = "景区Vlog视频";
} else if (type == NumberConstant.ONE) {
goodsName = "景区录像包";
} else if (type == NumberConstant.TWO) {
goodsName = "景区照片包";
}
}
if (order.getPayPrice().compareTo(BigDecimal.ZERO) <= 0) {
// 0元支付
WxPayRespVO wxPayRespVO = new WxPayRespVO();
wxPayRespVO.setNeedPay(false);
return wxPayRespVO;
}
wxPayOrderReqVO.setOpenId(order.getOpenId())
.setMemberId(order.getMemberId())
.setOrderSn(order.getId())
.setTotalPrice(BigDecimalUtil.convertToCents(order.getPayPrice()))
.setGoodsName(goodsName)
.setDescription(goodsName);
return wxPayService.createOrder(wxPayOrderReqVO);
}
@Override
public ApiResponse<Integer> update(OrderUpdateReq query) {
int update = orderMapper.update(query);
if (update == NumberConstant.ZERO) {
return ApiResponse.fail("订单更新失败");
}
return ApiResponse.success(update);
}
/**
* 更新订单支付状态
*
* @param orderSn 订单编号也就是订单的ID
*/
@Override
public void updateOrderState(Long orderSn, OrderStateEnum orderStateEnum, String reason) {
OrderUpdateReq orderUpdateReq = new OrderUpdateReq();
orderUpdateReq.setId(orderSn);
if (orderStateEnum.getType() == NumberConstant.ONE) {//退款状态 0未提出,1已通过,2待审核
orderUpdateReq.setRefundStatus(orderStateEnum.getState());
orderUpdateReq.setRefundAt(new Date());
if (orderStateEnum.getState() == OrderStateEnum.PASSED.getState()) {
orderUpdateReq.setRemark(reason);
} else if (Objects.nonNull(reason)) {
orderUpdateReq.setRefundReason(reason);
}
} else if (orderStateEnum.getType() == NumberConstant.TWO) {//订单状态 0未支付,1已支付,2已退款,9已取消
int state = orderStateEnum.getState();
orderUpdateReq.setPayAt(new Date());
orderUpdateReq.setStatus(orderStateEnum.getState());
if (state == OrderStateEnum.CANCELED.getState()) {//取消支付
orderUpdateReq.setCancelAt(new Date());
} else if (state== OrderStateEnum.PAID.getState()) {//支付成功
orderUpdateReq.setPayAt(new Date());
}else if (state == OrderStateEnum.REFUNDED.getState()) {//退款成功
orderUpdateReq.setRefundAt(new Date());
}
}
orderMapper.update(orderUpdateReq);
}
@Override
public ApiResponse<Integer> getOrderCountByUserId(Long userId) {
return ApiResponse.success(orderMapper.countByUserId(userId));
}
@Override
public ApiResponse<PageInfo<OrderAppRespVO>> appPageQuery(OrderAppPageReq orderReqQuery) {
PageHelper.startPage(orderReqQuery.getPageNum(), orderReqQuery.getPageSize());
List<OrderAppRespVO> list = orderMapper.appList(orderReqQuery);
list.forEach(order -> {
List<OrderItemVO> orderItemList = order.getOrderItemList();
if (orderItemList == null) {
return;
}
orderItemList.forEach(item -> {
if (Integer.valueOf(1).equals(item.getGoodsType())) { // 原片
List<SourceEntity> memberVideoEntityList = sourceMapper.listVideoByFaceRelation(orderReqQuery.getMemberId(), item.getFaceId());
item.setCoverList(memberVideoEntityList.stream().map(SourceEntity::getUrl).collect(Collectors.toList()));
if (!memberVideoEntityList.isEmpty()) {
item.setShootingTime(memberVideoEntityList.get(0).getCreateTime());
}
} else if (Integer.valueOf(2).equals(item.getGoodsType())) {
List<SourceEntity> memberVideoEntityList = sourceMapper.listImageByFaceRelation(orderReqQuery.getMemberId(), item.getFaceId());
item.setCoverList(memberVideoEntityList.stream().map(SourceEntity::getUrl).collect(Collectors.toList()));
if (!memberVideoEntityList.isEmpty()) {
item.setShootingTime(memberVideoEntityList.get(0).getCreateTime());
}
} else {
item.setCoverList(Collections.singletonList(item.getCoverUrl()));
VideoEntity video = videoRepository.getVideo(item.getGoodsId());
if (video != null) {
item.setShootingTime(videoTaskRepository.getTaskShotDate(video.getTaskId()));
}
}
});
});
PageInfo<OrderAppRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<OrderAppRespVO> appDetail(Long id) {
OrderAppRespVO orderAppRespVO = orderMapper.appDetail(id);
return ApiResponse.success(orderAppRespVO);
}
@Override
public ApiResponse<?> refundOrder(RefundOrderReq refundOrderReq) {
this.updateOrderState(refundOrderReq.getOrderId(), OrderStateEnum.TO_BE_REVIEWED, refundOrderReq.getRefundReason());
return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK);
}
@Override
public ApiResponse<?> auditRefundOrder(RefundOrderReq refundOrderReq) {
this.updateOrderState(refundOrderReq.getOrderId(), OrderStateEnum.PASSED, refundOrderReq.getRefundReason());
// 调用微信发起退款
try {
wxPayService.refundOrder(refundOrderReq.getOrderId().toString());
} catch (Exception e) {
throw new AppException(BizCodeEnum.ADVANCE_PAYMENT_REFUND_FAILED,e.getMessage());
}
return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK);
}
@Override
public void remarkOrder(Long orderId, OrderEntity query) {
OrderUpdateReq updateOrder = new OrderUpdateReq();
updateOrder.setId(orderId);
updateOrder.setRemark(query.getRemark());
orderMapper.update(updateOrder);
OrderOperationEntity orderOperationEntity = new OrderOperationEntity();
orderOperationEntity.setOrderId(orderId);
orderOperationEntity.setType("修改备注");
orderOperationEntity.setRemark("备注修改为:"+query.getRemark());
orderOperationEntity.setUser(BaseContextHandler.getAccount());
orderOperationEntity.setUserId(BaseContextHandler.getUserId());
orderOperationMapper.add(orderOperationEntity);
}
@Override
public ApiResponse<PageInfo<OrderRespVO>> refundPageQuery(OrderReqQuery query) {
PageHelper.startPage(query.getPageNum(), query.getPageSize());
List<OrderRespVO> list = orderMapper.refundList(query);
PageInfo<OrderRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<WxPayRespVO> createOrder(Long userId, CreateOrderReqVO createOrderReqVO) throws Exception {
IsBuyRespVO isBuy = orderBiz.isBuy(userId, createOrderReqVO.getScenicId(), createOrderReqVO.getGoodsType(), createOrderReqVO.getGoodsId());
if (isBuy.isBuy()) {
return ApiResponse.fail("您已购买此内容,无需重复购买!");
}
OrderEntity order = new OrderEntity();
Long orderId = SnowFlakeUtil.getLongId();
order.setId(orderId);
order.setMemberId(userId);
MemberRespVO member = memberMapper.getById(userId);
order.setOpenId(member.getOpenId());
order.setScenicId(createOrderReqVO.getScenicId());
List<OrderItemEntity> orderItems = new ArrayList<>();
OrderItemEntity orderItem = new OrderItemEntity();
orderItem.setGoodsId(createOrderReqVO.getGoodsId());
orderItem.setGoodsType(createOrderReqVO.getGoodsType());
orderItem.setOrderId(orderId);
orderItems.add(orderItem);
PriceObj priceObj = orderBiz.queryPrice(order.getScenicId(), createOrderReqVO.getGoodsType(), createOrderReqVO.getGoodsId());
order.setSlashPrice(priceObj.getSlashPrice());
order.setPrice(priceObj.getPrice());
// 判断是否是本人数据
FaceEntity goodsFace = faceRepository.getFace(priceObj.getFaceId());
if (goodsFace != null && !goodsFace.getMemberId().equals(userId)) {
return ApiResponse.fail("您无权购买此内容!");
}
// promo code
// coupon
order.setPayPrice(priceObj.getPrice());
order.setFaceId(priceObj.getFaceId());
if (order.getPayPrice().equals(BigDecimal.ZERO)) {
order.setStatus(OrderStateEnum.PAID.getState());
order.setPayAt(new Date());
} else {
order.setStatus(OrderStateEnum.UNPAID.getState());
}
orderMapper.add(order);
int addOrderItems = orderMapper.addOrderItems(orderItems);
if (addOrderItems == NumberConstant.ZERO) {
log.error("订单明细添加失败");
return ApiResponse.fail("订单添加失败");
}
//点击支付按钮统计
if (order.getPayPrice().compareTo(BigDecimal.ZERO) <= 0) {
orderBiz.paidOrder(order.getId());
return ApiResponse.success(new WxPayRespVO());
} else {
WxPayRespVO wxPayRespVO = initiatePayment(order, orderItems);
return ApiResponse.success(wxPayRespVO);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<WxPayRespVO> createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception {
PriceConfigEntity priceConfig = priceRepository.getPriceConfigByScenicTypeGoods(batchOrderReqVO.getScenicId(), batchOrderReqVO.getType(), batchOrderReqVO.getGoodsId());
if (priceConfig == null) {
return ApiResponse.fail("该套餐暂未开放购买");
}
FaceEntity face = faceRepository.getFace(batchOrderReqVO.getFaceId());
if (face != null && !face.getMemberId().equals(userId)) {
return ApiResponse.fail("您无权购买此内容!");
}
log.info("创建批量订单,价格配置:{},请求:{}", priceConfig, batchOrderReqVO);
OrderEntity order = new OrderEntity();
Long orderId = SnowFlakeUtil.getLongId();
order.setId(orderId);
order.setMemberId(userId);
MemberRespVO member = memberMapper.getById(userId);
order.setOpenId(member.getOpenId());
order.setScenicId(priceConfig.getScenicId());
order.setType(priceConfig.getType());
List<GoodsListRespVO> goodsList = priceBiz.queryGoodsList(priceConfig.getId());
List<OrderItemEntity> orderItems = goodsList.stream().map(goods -> {
OrderItemEntity orderItem = new OrderItemEntity();
orderItem.setOrderId(orderId);
if (Long.valueOf(1L).equals(goods.getGoodsId())) {
orderItem.setGoodsId(batchOrderReqVO.getFaceId());
orderItem.setGoodsType(1);
} else if (Long.valueOf(2L).equals(goods.getGoodsId())) {
orderItem.setGoodsId(batchOrderReqVO.getFaceId());
orderItem.setGoodsType(2);
} else {
// templateId
orderItem.setGoodsId(goods.getGoodsId());
orderItem.setGoodsType(-1);
}
return orderItem;
}).collect(Collectors.toList());
order.setSlashPrice(priceConfig.getSlashPrice());
order.setPrice(priceConfig.getPrice());
order.setPayPrice(priceConfig.getPrice());
order.setFaceId(batchOrderReqVO.getFaceId());
if (order.getPayPrice().equals(BigDecimal.ZERO)) {
order.setStatus(OrderStateEnum.PAID.getState());
order.setPayAt(new Date());
} else {
order.setStatus(OrderStateEnum.UNPAID.getState());
}
orderMapper.add(order);
int addOrderItems = orderMapper.addOrderItems(orderItems);
if (addOrderItems == NumberConstant.ZERO) {
log.error("订单明细添加失败");
return ApiResponse.fail("订单添加失败");
}
if (order.getPayPrice().equals(BigDecimal.ZERO)) {
orderBiz.paidOrder(order.getId());
return ApiResponse.success(new WxPayRespVO());
} else {
WxPayRespVO wxPayRespVO = initiatePayment(order, orderItems);
return ApiResponse.success(wxPayRespVO);
}
}
}

View File

@@ -0,0 +1,77 @@
package com.ycwl.basic.service.pc.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycwl.basic.biz.PriceBiz;
import com.ycwl.basic.mapper.PriceConfigMapper;
import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity;
import com.ycwl.basic.model.pc.price.req.PriceConfigListReq;
import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO;
import com.ycwl.basic.model.pc.price.resp.PriceConfigRespVO;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.repository.TemplateRepository;
import com.ycwl.basic.service.pc.PriceConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class PriceConfigServiceImpl extends ServiceImpl<PriceConfigMapper, PriceConfigEntity> implements PriceConfigService {
@Autowired
private TemplateRepository templateRepository;
@Autowired
private PriceBiz priceBiz;
@Override
public List<PriceConfigRespVO> listByCondition(PriceConfigListReq req) {
return baseMapper.listByCondition(req);
}
@Override
public PriceConfigRespVO findById(Integer id) {
return baseMapper.getById(id);
}
@Override
public List<GoodsListRespVO> listGoodsByScenic(Long scenicId) {
return priceBiz.listGoodsByScenic(scenicId);
}
@Override
public void fillGoodsName(List<PriceConfigRespVO> result) {
for (PriceConfigRespVO item : result) {
fillGoodsName(item);
}
}
@Override
public void fillGoodsName(PriceConfigRespVO item) {
if (Integer.valueOf(-1).equals(item.getType())) {
item.setGoodsNames("景区内所有售卖商品");
} else if (StringUtils.isNotBlank(item.getGoodsIds())) {
List<String> goodsNames = new ArrayList<>();
for (String s : item.getGoodsIds().split(",")) {
if (StringUtils.equals(s, "1")) {
goodsNames.add("录像集");
} else if (StringUtils.equals(s, "2")) {
goodsNames.add("照片集");
} else {
if (StringUtils.isNumeric(s)) {
TemplateRespVO template = templateRepository.getTemplate(Long.valueOf(s));
if (template != null) {
goodsNames.add(template.getName());
} else {
goodsNames.add("?未知商品【"+s+"】?");
}
} else {
goodsNames.add("!未知商品【"+s+"】!");
}
}
}
item.setGoodsNames(StringUtils.join(goodsNames, ","));
}
}
}

View File

@@ -0,0 +1,79 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.RenderWorkerMapper;
import com.ycwl.basic.model.pc.renderWorker.entity.RenderWorkerEntity;
import com.ycwl.basic.model.pc.renderWorker.req.RenderWorkerReqQuery;
import com.ycwl.basic.service.pc.RenderWorkerService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/3 15:09
*/
@Service
public class RenderWorkerServiceImpl implements RenderWorkerService {
@Autowired
private RenderWorkerMapper renderWorkerMapper;
@Override
public ApiResponse<PageInfo<RenderWorkerEntity>> pageQuery(RenderWorkerReqQuery renderWorkerReqQuery) {
PageHelper.startPage(renderWorkerReqQuery.getPageNum(), renderWorkerReqQuery.getPageSize());
List<RenderWorkerEntity> list = renderWorkerMapper.list(renderWorkerReqQuery);
PageInfo<RenderWorkerEntity> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<RenderWorkerEntity>> list(RenderWorkerReqQuery renderWorkerReqQuery) {
return ApiResponse.success(renderWorkerMapper.list(renderWorkerReqQuery));
}
@Override
public ApiResponse<RenderWorkerEntity> detail(Long id) {
return ApiResponse.success(renderWorkerMapper.getById(id));
}
@Override
public ApiResponse<Integer> add(RenderWorkerEntity renderWorker) {
renderWorker.setId(SnowFlakeUtil.getLongId());
if (StringUtils.isEmpty(renderWorker.getAccessKey())) {
renderWorker.setAccessKey(SnowFlakeUtil.getId());
}
renderWorker.setStatus(0);
int add = renderWorkerMapper.add(renderWorker);
if (add == 0) {
return ApiResponse.fail("渲染机添加失败");
}else {
return ApiResponse.success(add);
}
}
@Override
public ApiResponse<Integer> deleteById(Long id) {
return ApiResponse.success(renderWorkerMapper.deleteById(id));
}
@Override
public ApiResponse<Integer> update(RenderWorkerEntity renderWorker) {
int update = renderWorkerMapper.update(renderWorker);
if (update == 0) {
return ApiResponse.fail("渲染机修改失败");
}else {
return ApiResponse.success(update);
}
}
@Override
public ApiResponse<Integer> updateStatus(Long id) {
return ApiResponse.success(renderWorkerMapper.updateStatus(id));
}
}

View File

@@ -0,0 +1,119 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.MenuMapper;
import com.ycwl.basic.mapper.RoleMapper;
import com.ycwl.basic.model.pc.menu.MenuNode;
import com.ycwl.basic.model.pc.role.req.AddOrUpdateRoleReqVO;
import com.ycwl.basic.model.pc.role.req.RoleListReqVO;
import com.ycwl.basic.model.pc.role.resp.RoleListRespVO;
import com.ycwl.basic.service.pc.RoleService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import static com.ycwl.basic.constant.PermissionConstant.ROLE_STATUS;
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
RoleMapper roleMapper;
@Autowired
MenuMapper menuMapper;
@Autowired
RedisTemplate redisTemplate;
@Override
public ApiResponse<PageInfo<RoleListRespVO>> pageQuery(RoleListReqVO roleListReqVO) {
PageHelper.startPage(roleListReqVO.getPageNum(),roleListReqVO.getPageSize());
// if(roleListReqVO.getType()==null){
// roleListReqVO.setType(0);
// }
List<RoleListRespVO> list = roleMapper.list(roleListReqVO);
PageInfo<RoleListRespVO> pageInfo = new PageInfo(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse list(RoleListReqVO roleListReqVO) {
// if(roleListReqVO.getType()==null){
// roleListReqVO.setType(0);
// }
List<RoleListRespVO> list = roleMapper.list(roleListReqVO);
return ApiResponse.success(list);
}
@Override
public ApiResponse addOrUpdate(AddOrUpdateRoleReqVO addOrUpdateRoleReqVO) {
String id = addOrUpdateRoleReqVO.getId();
if(StringUtils.isBlank(id)){
String roleId = SnowFlakeUtil.getId();
addOrUpdateRoleReqVO.setId(roleId);
if(roleMapper.add(addOrUpdateRoleReqVO)>0){
if(addOrUpdateRoleReqVO.getMenuIdList()!=null&addOrUpdateRoleReqVO.getMenuIdList().size()>0) {
menuMapper.addRoleMenu(roleId, addOrUpdateRoleReqVO.getMenuIdList());
}
return ApiResponse.success(null);
}
}else {
if(roleMapper.update(addOrUpdateRoleReqVO)>0){
menuMapper.deleteRoleMenuByRoleId(addOrUpdateRoleReqVO.getId());
if(addOrUpdateRoleReqVO.getMenuIdList()!=null&addOrUpdateRoleReqVO.getMenuIdList().size()>0){
menuMapper.addRoleMenu(addOrUpdateRoleReqVO.getId(),addOrUpdateRoleReqVO.getMenuIdList());
}
return ApiResponse.success(null);
}
}
return ApiResponse.fail("失败");
}
@Override
public ApiResponse delete(String id) {
if(roleMapper.delete(id)>0){
menuMapper.deleteRoleMenuByRoleId(id);
return ApiResponse.success(null);
}
return ApiResponse.fail("失败");
}
@Override
public ApiResponse updateReturnMenu(String id) {
List<MenuNode> menuById = roleMapper.getMenuById(id);
List<MenuNode> MenuList = new ArrayList<>();
for (MenuNode item :menuById) {
if ("-1".equals(item.getParentId())) {
MenuList.add(item);
}
for (MenuNode item2 : menuById) {
if (item2.getParentId().equals(item.getId())) {
if (item.getChildrenList() == null) {
item.setChildrenList(new ArrayList<>());
}
item.getChildrenList().add(item2);
}
}
}
return ApiResponse.success(MenuList);
}
@Override
public ApiResponse updateStatus(String id) {
if(roleMapper.updateStatus(id)>0){
redisTemplate.opsForValue().set(ROLE_STATUS+id,roleMapper.getRoleStatus(id));
return ApiResponse.success(null);
}
return ApiResponse.fail("失败");
}
}

View File

@@ -0,0 +1,190 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.ScenicAccountMapper;
import com.ycwl.basic.mapper.ScenicMapper;
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.pc.ScenicService;
import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/3 15:25
*/
@Slf4j
@Service
public class ScenicServiceImpl implements ScenicService {
@Autowired
private ScenicMapper scenicMapper;
@Autowired
private ScenicAccountMapper scenicAccountMapper;
@Autowired
private TaskFaceService taskFaceService;
@Autowired
private ScenicRepository scenicRepository;
@Override
public ApiResponse<PageInfo<ScenicRespVO>> pageQuery(ScenicReqQuery scenicReqQuery) {
PageHelper.startPage(scenicReqQuery.getPageNum(), scenicReqQuery.getPageSize());
List<ScenicRespVO> list = scenicMapper.list(scenicReqQuery);
PageInfo<ScenicRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<ScenicRespVO>> list(ScenicReqQuery scenicReqQuery) {
return ApiResponse.success(scenicMapper.list(scenicReqQuery));
}
@Override
public ApiResponse<ScenicRespVO> getById(Long id) {
return ApiResponse.success(scenicMapper.getById(id));
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<Boolean> add(ScenicAddOrUpdateReq scenicAddReq) {
ScenicAccountEntity scenicAccount = scenicAccountMapper.getByAccount(scenicAddReq.getAccount());
if (scenicAccount != null) {
return ApiResponse.fail("账号已存在");
}
Long scenicId = SnowFlakeUtil.getLongId();
scenicAddReq.setId(scenicId);
int add = scenicMapper.add(scenicAddReq);
ScenicAccountEntity account = new ScenicAccountEntity();
account.setId(SnowFlakeUtil.getLongId());
account.setScenicId(scenicId);
account.setName(scenicAddReq.getName() + "管理员");
account.setAccount(scenicAddReq.getAccount());
account.setPassword(scenicAddReq.getPassword());
account.setIsSuper(1);
scenicAccountMapper.add(account);
if (add > 0) {
taskFaceService.createFaceDB(scenicId.toString());
taskFaceService.assureFaceDB(scenicId.toString());
return ApiResponse.success(true);
} else {
return ApiResponse.fail("景区添加失败");
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<Boolean> deleteById(Long id) {
int i = scenicMapper.deleteById(id);
if (i > 0) {
scenicMapper.deleteConfigByScenicId(id);
scenicAccountMapper.deleteByScenicId(id);
taskFaceService.deleteFaceDB(id.toString());
scenicRepository.clearCache(id);
return ApiResponse.success(true);
}else {
return ApiResponse.fail("景区删除失败");
}
}
@Override
public ApiResponse<Boolean> update(ScenicAddOrUpdateReq scenicUpdateReq) {
if (StringUtils.isNotBlank(scenicUpdateReq.getAccount()) && StringUtils.isNotBlank(scenicUpdateReq.getPassword())) {
ScenicAccountEntity scenicAccount = scenicAccountMapper.getByAccount(scenicUpdateReq.getAccount());
if (scenicAccount != null) {
if (!scenicAccount.getScenicId().equals(scenicUpdateReq.getId())) {
return ApiResponse.fail("账号已存在");
}
}
ScenicAccountEntity account = scenicAccountMapper.getSuperAccountOfScenic(scenicUpdateReq.getId());
if (account != null) {
account.setAccount(scenicUpdateReq.getAccount());
account.setPassword(scenicUpdateReq.getPassword());
scenicAccountMapper.update(account);
} else {
account = new ScenicAccountEntity();
account.setId(SnowFlakeUtil.getLongId());
account.setScenicId(scenicUpdateReq.getId());
account.setName(scenicUpdateReq.getName() + "管理员");
account.setAccount(scenicUpdateReq.getAccount());
account.setPassword(scenicUpdateReq.getPassword());
account.setIsSuper(1);
scenicAccountMapper.add(account);
}
}
int i = scenicMapper.update(scenicUpdateReq);
if (i > 0) {
scenicRepository.clearCache(scenicUpdateReq.getId());
taskFaceService.assureFaceDB(scenicUpdateReq.getId().toString());
return ApiResponse.success(true);
}else {
return ApiResponse.fail("景区修改失败");
}
}
@Override
public ApiResponse<Boolean> updateStatus(Long id) {
int i = scenicMapper.updateStatus(id);
if (i > 0) {
scenicRepository.clearCache(id);
taskFaceService.assureFaceDB(id.toString());
return ApiResponse.success(true);
}else {
return ApiResponse.fail("景区状态修改失败");
}
}
@Override
public ApiResponse<Boolean> addConfig(ScenicConfigEntity scenicConfig) {
if (scenicConfig.getId() == null) {
scenicConfig.setId(SnowFlakeUtil.getLongId());
}
int i = scenicMapper.addConfig(scenicConfig);
if (i > 0) {
scenicRepository.clearCache(scenicConfig.getScenicId());
taskFaceService.assureFaceDB(scenicConfig.getScenicId().toString());
return ApiResponse.success(true);
}else {
return ApiResponse.fail("景区配置添加失败");
}
}
@Override
public ApiResponse<Boolean> updateConfigById(ScenicConfigEntity scenicConfig) {
int i = scenicMapper.updateConfigById(scenicConfig);
if (i > 0) {
scenicRepository.clearCache(scenicConfig.getScenicId());
taskFaceService.assureFaceDB(scenicConfig.getScenicId().toString());
return ApiResponse.success(true);
}else {
return ApiResponse.fail("景区配置修改失败");
}
}
@Override
public ScenicConfigEntity getConfig(Long id) {
return scenicRepository.getScenicConfig(id);
}
@Override
public void saveConfig(Long configId, ScenicConfigEntity config) {
config.setId(configId);
if (config.getScenicId() == null) {
throw new RuntimeException("景区ID不能为空");
}
scenicMapper.updateConfigById(config);
scenicRepository.clearCache(config.getScenicId());
}
}

View File

@@ -0,0 +1,91 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.SourceMapper;
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import com.ycwl.basic.repository.SourceRepository;
import com.ycwl.basic.service.pc.SourceService;
import com.ycwl.basic.task.VideoPieceGetter;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/3 15:49
*/
@Service
public class SourceServiceImpl implements SourceService {
@Autowired
private SourceMapper sourceMapper;
@Autowired
private SourceRepository sourceRepository;
@Override
public ApiResponse<PageInfo<SourceRespVO>> pageQuery(SourceReqQuery sourceReqQuery) {
PageHelper.startPage(sourceReqQuery.getPageNum(), sourceReqQuery.getPageSize());
List<SourceRespVO> list = sourceMapper.list(sourceReqQuery);
PageInfo<SourceRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<SourceRespVO>> list(SourceReqQuery sourceReqQuery) {
return ApiResponse.success(sourceMapper.list(sourceReqQuery));
}
@Override
public ApiResponse<SourceRespVO> getById(Long id, Long userId) {
return ApiResponse.success(sourceMapper.userGetById(id, userId));
}
@Override
public ApiResponse<Integer> add(SourceEntity source) {
source.setId(SnowFlakeUtil.getLongId());
int add = sourceMapper.add(source);
if (add > 0) {
return ApiResponse.success(add);
}else {
return ApiResponse.fail("添加失败");
}
}
@Override
public ApiResponse<Integer> deleteById(Long id) {
int i = sourceMapper.deleteById(id);
if (i > 0) {
return ApiResponse.success(i);
}else {
return ApiResponse.fail("删除失败");
}
}
@Override
public ApiResponse<Integer> update(SourceEntity source) {
int i = sourceMapper.update(source);
if (i > 0) {
return ApiResponse.success(i);
}else {
return ApiResponse.fail("修改失败");
}
}
@Override
public ApiResponse cutVideo(Long id) {
SourceEntity source = sourceRepository.getSource(id);
if (Integer.valueOf(2).equals(source.getType())) {
// 下载切片
VideoPieceGetter.Task task = new VideoPieceGetter.Task();
task.faceSampleIds = Collections.singletonList(source.getFaceSampleId());
VideoPieceGetter.addTask(task);
}
return ApiResponse.success("任务已下发");
}
}

View File

@@ -0,0 +1,79 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.TaskMapper;
import com.ycwl.basic.model.pc.task.entity.TaskEntity;
import com.ycwl.basic.model.pc.task.req.TaskReqQuery;
import com.ycwl.basic.model.pc.task.resp.TaskRespVO;
import com.ycwl.basic.repository.VideoTaskRepository;
import com.ycwl.basic.service.pc.TaskService;
import com.ycwl.basic.utils.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/3 16:04
*/
@Service
public class TaskServiceImpl implements TaskService {
@Autowired
private TaskMapper taskMapper;
@Autowired
private VideoTaskRepository videoTaskRepository;
@Override
public ApiResponse<PageInfo<TaskRespVO>> pageQuery(TaskReqQuery taskReqQuery) {
PageHelper.startPage(taskReqQuery.getPageNum(), taskReqQuery.getPageSize());
List<TaskRespVO> list = taskMapper.list(taskReqQuery);
PageInfo<TaskRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<TaskRespVO>> list(TaskReqQuery taskReqQuery) {
return ApiResponse.success(taskMapper.list(taskReqQuery));
}
@Override
public ApiResponse<TaskRespVO> getById(Long id) {
return ApiResponse.success(taskMapper.getById(id));
}
@Override
public ApiResponse<Boolean> deleteById(Long id) {
int i = taskMapper.deleteById(id);
videoTaskRepository.clearTaskCache(id);
if (i > 0) {
return ApiResponse.success(true);
}else {
return ApiResponse.fail("删除失败");
}
}
@Override
public ApiResponse<Boolean> update(TaskEntity task) {
int i = taskMapper.update(task);
videoTaskRepository.clearTaskCache(task.getId());
if (i > 0) {
return ApiResponse.success(true);
}else {
return ApiResponse.fail("修改失败");
}
}
@Override
public ApiResponse<Boolean> updateStatus(Long id, Integer status) {
int i = taskMapper.updateStatus(id, status);
videoTaskRepository.clearTaskCache(id);
if (i > 0) {
return ApiResponse.success(true);
}else {
return ApiResponse.fail("修改状态失败");
}
}
}

View File

@@ -0,0 +1,159 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.TemplateMapper;
import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity;
import com.ycwl.basic.model.pc.template.entity.TemplateEntity;
import com.ycwl.basic.model.pc.template.req.TemplateReqQuery;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.service.pc.TemplateService;
import com.ycwl.basic.repository.TemplateRepository;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @Author:longbinbin
* @Date:2024/12/3 16:20
*/
@Service
public class TemplateServiceImpl implements TemplateService {
@Autowired
private TemplateMapper templateMapper;
@Autowired
private TemplateRepository templateRepository;
@Override
public ApiResponse<PageInfo<TemplateRespVO>> pageQuery(TemplateReqQuery templateReqQuery) {
PageHelper.startPage(templateReqQuery.getPageNum(), templateReqQuery.getPageSize());
List<TemplateRespVO> list = templateMapper.list(templateReqQuery);
PageInfo<TemplateRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<TemplateRespVO>> list(TemplateReqQuery templateReqQuery) {
return ApiResponse.success(templateMapper.list(templateReqQuery));
}
@Override
public ApiResponse<TemplateRespVO> getById(Long id) {
return ApiResponse.success(templateRepository.getTemplate(id));
}
@Override
public ApiResponse<Boolean> add(TemplateEntity template) {
template.setId(SnowFlakeUtil.getLongId());
int i = templateMapper.add(template);
if (template.getChildren() != null) {
template.getChildren().forEach(item -> {
item.setId(SnowFlakeUtil.getLongId());
item.setPid(template.getId());
item.setScenicId(template.getScenicId());
item.setStatus(1);
templateMapper.add(item);
});
}
if (i > 0) {
return ApiResponse.success(true);
}else {
return ApiResponse.fail("添加模版失败");
}
}
@Override
public ApiResponse<Integer> deleteById(Long id) {
int i = templateMapper.deleteById(id);
templateRepository.clearTemplateCache(id);
if (i > 0) {
templateMapper.deleteByPid(id);
return ApiResponse.success(i);
}else {
return ApiResponse.fail("删除模版失败");
}
}
@Override
public ApiResponse<Boolean> update(TemplateEntity template) {
template.setUpdateTime(new Date());
int i = templateMapper.update(template);
if (template.getChildren() != null) {
templateMapper.deleteByPid(template.getId());
template.getChildren().forEach(item -> {
item.setId(SnowFlakeUtil.getLongId());
item.setPid(template.getId());
item.setScenicId(template.getScenicId());
item.setStatus(1);
templateMapper.add(item);
});
}
templateRepository.clearTemplateCache(template.getId());
if (i > 0) {
return ApiResponse.success(true);
}else {
return ApiResponse.fail("更新模版失败");
}
}
@Override
public ApiResponse<Boolean> updateStatus(Long id) {
int i = templateMapper.updateStatus(id);
templateRepository.clearTemplateCache(id);
if (i > 0) {
return ApiResponse.success(true);
}else {
return ApiResponse.fail("更新模版状态失败");
}
}
@Override
public TemplateConfigEntity getConfig(Long templateId) {
return templateRepository.getTemplateConfig(templateId);
}
@Override
public void saveConfig(Long configId, TemplateConfigEntity config) {
config.setId(configId);
templateMapper.updateConfigById(config);
templateRepository.clearTemplateCache(config.getTemplateId());
}
@Override
public ApiResponse<Boolean> sortTemplate(Long templateId, Long afterTemplateId) {
TemplateRespVO template = templateRepository.getTemplate(templateId);
if (template == null) {
return ApiResponse.fail("模版不存在");
}
List<TemplateRespVO> scenicTemplateList = templateRepository.getAllTemplateListByScenicId(template.getScenicId());
AtomicInteger sortNum = new AtomicInteger(0);
for (TemplateRespVO item : scenicTemplateList) {
item.setSort(sortNum.addAndGet(1));
}
Optional<TemplateRespVO> templateOptional = scenicTemplateList.stream().filter(item -> item.getId().equals(templateId)).findAny();
Optional<TemplateRespVO> afterTemplateOptional = scenicTemplateList.stream().filter(item -> item.getId().equals(afterTemplateId)).findAny();
if (!templateOptional.isPresent()) {
return ApiResponse.fail("模版不存在");
}
if (afterTemplateOptional.isPresent()) {
TemplateRespVO afterTemplate = afterTemplateOptional.get();
Integer newSort = afterTemplate.getSort();
TemplateRespVO oldTemplate = templateOptional.get();
Integer oldSort = oldTemplate.getSort();
afterTemplate.setSort(oldSort);
oldTemplate.setSort(newSort);
}
scenicTemplateList.forEach(item -> {
templateMapper.updateSort(item.getId(), item.getSort());
templateRepository.clearTemplateCache(item.getId());
});
return ApiResponse.success(true);
}
}

View File

@@ -0,0 +1,43 @@
package com.ycwl.basic.service.pc.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.mapper.VideoMapper;
import com.ycwl.basic.model.pc.video.req.VideoReqQuery;
import com.ycwl.basic.model.pc.video.resp.VideoRespVO;
import com.ycwl.basic.service.pc.VideoService;
import com.ycwl.basic.utils.ApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author:longbinbin
* @Date:2024/12/3 16:31
*/
@Service
public class VideoServiceImpl implements VideoService {
@Autowired
private VideoMapper videoMapper;
@Override
public ApiResponse<PageInfo<VideoRespVO>> pageQuery(VideoReqQuery videoReqQuery) {
PageHelper.startPage(videoReqQuery.getPageNum(), videoReqQuery.getPageSize());
List<VideoRespVO> list = videoMapper.list(videoReqQuery);
PageInfo<VideoRespVO> pageInfo = new PageInfo<>(list);
return ApiResponse.success(pageInfo);
}
@Override
public ApiResponse<List<VideoRespVO>> list(VideoReqQuery videoReqQuery) {
return ApiResponse.success(videoMapper.list(videoReqQuery));
}
@Override
public ApiResponse<VideoRespVO> getById(Long id) {
return ApiResponse.success(videoMapper.getById(id));
}
}