@@ -80,7 +80,6 @@ public class CallbackSmController extends BaseController { | |||
userMouldVideoService.updateById(videoUnd); | |||
} | |||
userMouldVideoService.uploadVideo(videoUnd); | |||
return new ResultData(); | |||
} | |||
@@ -188,7 +187,7 @@ public class CallbackSmController extends BaseController { | |||
imgList.add(data.get("img_1")); | |||
imgList.add(data.get("img_2")); | |||
imgList.add(data.get("img_3")); | |||
userDigitalAvatarOrderService.handlePhoto(userDigitalAvatarOrder,imgList); | |||
userDigitalAvatarPhotoService.handlePhoto(userDigitalAvatarOrder,imgList); | |||
}else{ | |||
UserDigitalAvatarOrder updOrder = new UserDigitalAvatarOrder(); | |||
updOrder.setId(userDigitalAvatarOrder.getId()); | |||
@@ -449,7 +449,7 @@ public enum ErrorCode{ | |||
MEM_MONTH_IS_USED(13105, "该用户本月已领取或未到领取条件"), | |||
GLOD_NOT_ENOUGH(13200, "金币不足"), | |||
GLOD_NOT_UPDATE(13200, "金币修改失败"), | |||
/** | |||
@@ -30,6 +30,9 @@ public class UserBasicProperty extends TenantEntity { | |||
@TableField(exist = false) | |||
private Integer addGlod; | |||
@TableField(exist = false) | |||
private Integer addSumGlod; | |||
@TableField(exist = false) | |||
private Integer reduceGlod; | |||
@@ -2,6 +2,7 @@ package com.iformall.mapper; | |||
import com.iformall.common.CommonMapper; | |||
import com.iformall.domain.po.UserBasicGlodConfig; | |||
import org.apache.ibatis.annotations.Param; | |||
import java.util.List; | |||
@@ -9,4 +10,6 @@ public interface UserBasicGlodConfigMapper extends CommonMapper<UserBasicGlodCon | |||
List<UserBasicGlodConfig> findList(UserBasicGlodConfig record); | |||
UserBasicGlodConfig selectGlodConfig(@Param("projectType")Integer projectType, @Param("type")Integer type); | |||
} |
@@ -9,8 +9,8 @@ public interface UserBasicPropertyMapper extends CommonMapper<UserBasicProperty, | |||
List<UserBasicProperty> findList(UserBasicProperty record); | |||
int addGlod(UserBasicProperty record); | |||
int addDigitalAvatarGlod(UserBasicProperty record); | |||
int reduceGlod(UserBasicProperty record); | |||
int reduceDigitalAvatarGlod(UserBasicProperty record); | |||
} |
@@ -19,24 +19,14 @@ public interface UserBasicPropertyService { | |||
PageInfo<UserBasicProperty> listAsPage(UserBasicProperty record, Integer pageIndex, Integer pageSize); | |||
/** | |||
* 充值 | |||
* @param userId | |||
* @param projectType | |||
* @param extraId | |||
* @param glod | |||
*/ | |||
void addRechargeGlod(Long userId, Integer projectType, Long extraId, Integer glod); | |||
/** | |||
* 消费 | |||
* | |||
* @param userId | |||
* @param projectType | |||
* @param propertyLogType | |||
* @param glod | |||
* @param extraId | |||
* @param now | |||
* @param glod | |||
*/ | |||
void consumptionGlod(Long userId, Integer projectType, Integer propertyLogType, Integer glod, Long extraId, Date now); | |||
void updUserGlod(Long userId, Integer projectType,Integer propertyLogType, Long extraId, Integer glod, Date now); | |||
UserBasicProperty findById(Long id); | |||
} |
@@ -179,24 +179,27 @@ public class ProductOrderServiceImpl implements ProductOrderService { | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void handleProductOrderSuccess(ProductOrder productOrder, PayQueryAdapterResult result) { | |||
String lockKey = "productOrder:success:"+productOrder.getId(); | |||
long time = System.currentTimeMillis() + 30000; | |||
long time = System.currentTimeMillis() + 5000; | |||
String timeStr = String.valueOf(time); | |||
try{ | |||
while (!redisLock.lock2(lockKey, timeStr)){ | |||
Thread.sleep(1000); | |||
// while (!redisLock.lock2(lockKey, timeStr)){ | |||
// Thread.sleep(1000); | |||
// } | |||
if(!redisLock.lock2(lockKey, timeStr)){ | |||
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"请稍后重试"); | |||
} | |||
ProductOrder order = this.getById(productOrder.getId()); | |||
if(!EnumProductOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode().equals(order.getOrderStatus())){ | |||
return; | |||
} | |||
Date now = new Date(); | |||
order.setOpenId(result.getOpenId()); | |||
order.setTransactionId(result.getTransactionId()); | |||
order.setPaymentTime(result.getPayTime()); | |||
order.setPayWay(result.getWay()); | |||
order.setOrderStatus(result.getCode()); | |||
order.setUpdateDate(new Date()); | |||
order.setUpdateDate(now); | |||
order.setIsOrderStatus(EnumProductOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); | |||
int num = productOrderMapper.orderPayUpdStatus(order); | |||
if(num == 0){ | |||
@@ -206,7 +209,8 @@ public class ProductOrderServiceImpl implements ProductOrderService { | |||
} | |||
Product product = productMapper.selectById(order.getProductId()); | |||
if(EnumProductType.product_1.getCode().equals(product.getType())){ | |||
userBasicPropertyService.addRechargeGlod(order.getUserId(),product.getProjectType(),order.getId(),product.getGlod()); | |||
userBasicPropertyService.updUserGlod(order.getUserId(),product.getProjectType(),EnumPropertyLogType.RECHARGE.getCode(), | |||
order.getId(),product.getGlod(),now); | |||
} | |||
}catch(Exception e){ | |||
throw new MallinkException(ErrorCode.ORDER_UPDATE_ERR); | |||
@@ -4,14 +4,19 @@ import com.github.pagehelper.PageHelper; | |||
import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ErrorCode; | |||
import com.iformall.domain.po.UserBasicFrom; | |||
import com.iformall.domain.po.UserBasicGlodConfig; | |||
import com.iformall.domain.po.UserBasicPropertyLog; | |||
import com.iformall.domain.po.WxCUserBasicInfo; | |||
import com.iformall.enums.EnumGlodConfigType; | |||
import com.iformall.enums.EnumProject; | |||
import com.iformall.enums.EnumPropertyLogType; | |||
import com.iformall.exception.MallinkException; | |||
import com.iformall.mapper.UserBasicFromMapper; | |||
import com.iformall.mapper.UserBasicGlodConfigMapper; | |||
import com.iformall.mapper.UserBasicPropertyLogMapper; | |||
import com.iformall.mapper.WxCUserBasicInfoMapper; | |||
import com.iformall.service.UserBasicFromService; | |||
import com.iformall.service.UserBasicPropertyService; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
@@ -41,6 +46,12 @@ public class UserBasicFromServiceImpl implements UserBasicFromService { | |||
@Autowired | |||
WxCUserBasicInfoMapper wxCUserBasicInfoMapper; | |||
@Autowired | |||
UserBasicGlodConfigMapper userBasicGlodConfigMapper; | |||
@Autowired | |||
UserBasicPropertyService userBasicPropertyService; | |||
@Override | |||
public PageInfo<UserBasicFrom> listAsPage(UserBasicFrom record, Integer pageIndex, Integer pageSize) { | |||
PageInfo<UserBasicFrom> pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> userBasicFromMapper.findList(record)); | |||
@@ -83,16 +94,18 @@ public class UserBasicFromServiceImpl implements UserBasicFromService { | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void saveForm(UserBasicFrom from) { | |||
Date now = new Date(); | |||
if(from.getId() == null){ | |||
return; | |||
} | |||
from.setCreateDate(new Date()); | |||
from.setCreateDate(now); | |||
try{ | |||
int insert = userBasicFromMapper.insert(from); | |||
if(insert == 1){ | |||
logger.info("邀请加积分{}"+from.getFromUserId()); | |||
//todo 邀请逻辑 | |||
userBasicPropertyService.updUserGlod(from.getFromUserId(),from.getFromProject(),EnumPropertyLogType.INVITE.getCode(), | |||
from.getId(),null,now); | |||
} | |||
}catch(Exception e){ | |||
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); | |||
@@ -5,17 +5,13 @@ import com.github.pagehelper.PageInfo; | |||
import com.iformall.common.ErrorCode; | |||
import com.iformall.common.IdWorker; | |||
import com.iformall.domain.po.*; | |||
import com.iformall.enums.EnumProductOrderStatus; | |||
import com.iformall.enums.EnumProductType; | |||
import com.iformall.enums.EnumProject; | |||
import com.iformall.enums.EnumPropertyLogType; | |||
import com.iformall.enums.*; | |||
import com.iformall.exception.MallinkException; | |||
import com.iformall.mapper.ProductMapper; | |||
import com.iformall.mapper.UserBasicPropertyLogMapper; | |||
import com.iformall.mapper.UserBasicPropertyMapper; | |||
import com.iformall.mapper.WxCUserBasicInfoMapper; | |||
import com.iformall.mapper.*; | |||
import com.iformall.service.UserBasicPropertyService; | |||
import com.iformall.utils.RedisLock; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.flowable.bpmn.converter.EndEventXMLConverter; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
@@ -43,6 +39,12 @@ public class UserBasicPropertyServiceImpl implements UserBasicPropertyService { | |||
@Autowired | |||
UserBasicPropertyLogMapper userBasicPropertyLogMapper; | |||
@Autowired | |||
UserBasicGlodConfigMapper userBasicGlodConfigMapper; | |||
@Autowired | |||
RedisLock redisLock; | |||
@Override | |||
public PageInfo<UserBasicProperty> listAsPage(UserBasicProperty record, Integer pageIndex, Integer pageSize) { | |||
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> userBasicPropertyMapper.findList(record)); | |||
@@ -50,83 +52,126 @@ public class UserBasicPropertyServiceImpl implements UserBasicPropertyService { | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void addRechargeGlod(Long userId, Integer projectType, Long extraId, Integer glod) { | |||
public void updUserGlod(Long userId, Integer projectType,Integer propertyLogType, Long extraId, Integer glod, Date now) { | |||
WxCUserBasicInfo basicInfo = wxCUserBasicInfoMapper.selectById(userId); | |||
if(basicInfo == null){ | |||
throw new MallinkException(ErrorCode.USER_IS_EMPTY); | |||
} | |||
Date now = new Date(); | |||
UserBasicProperty userBasicProperty = userBasicPropertyMapper.selectById(userId); | |||
Integer befourGold = 0; | |||
if(EnumProject.PROJECT_5.getCode().equals(projectType)){ | |||
if(userBasicProperty == null){ | |||
userBasicProperty = new UserBasicProperty(); | |||
userBasicProperty.setId(userId); | |||
userBasicProperty.setDigitalAvatarGlod(glod); | |||
userBasicProperty.setDigitalAvatarResidueGlod(glod); | |||
userBasicProperty.setUpdateDate(now); | |||
userBasicPropertyMapper.insert(userBasicProperty); | |||
}else{ | |||
befourGold = userBasicProperty.getDigitalAvatarResidueGlod(); | |||
userBasicProperty.setAddGlod(glod); | |||
userBasicProperty.setUpdateDate(now); | |||
userBasicPropertyMapper.addGlod(userBasicProperty); | |||
} | |||
UserBasicPropertyLog userBasicPropertyLog = new UserBasicPropertyLog(); | |||
final IdWorker idWorker = IdWorker.get(); | |||
userBasicPropertyLog.setId(idWorker.nextId()); | |||
userBasicPropertyLog.setUserId(userId); | |||
userBasicPropertyLog.setProjectType(projectType); | |||
userBasicPropertyLog.setType(EnumPropertyLogType.RECHARGE.getCode()); | |||
userBasicPropertyLog.setBefourGold(befourGold); | |||
userBasicPropertyLog.setGoldNum(glod); | |||
userBasicPropertyLog.setAfterGold(befourGold+glod); | |||
userBasicPropertyLog.setExtraId(extraId); | |||
userBasicPropertyLog.setCreateDate(now); | |||
userBasicPropertyLogMapper.insert(userBasicPropertyLog); | |||
} | |||
Integer glodNum = handGlodNum(projectType,propertyLogType,glod); | |||
if(glodNum == 0){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_UPDATE.getCode(),"金币变动值为0"); | |||
} | |||
String lockKey = "userProperty:glod:"+userId; | |||
long time = System.currentTimeMillis() + 5000; | |||
String timeStr = String.valueOf(time); | |||
try{ | |||
while (!redisLock.lock2(lockKey, timeStr)){ | |||
Thread.sleep(1000); | |||
} | |||
UserBasicProperty userBasicProperty = userBasicPropertyMapper.selectById(userId); | |||
Integer befourGold = getUserGlod(userBasicProperty,projectType); | |||
Integer afterGold = befourGold + glodNum; | |||
if(afterGold < 0){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_UPDATE.getCode(),"金币不足"); | |||
} | |||
Integer count = handUserProPery(userId,userBasicProperty,projectType,glodNum,now); | |||
if(count != 1){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_UPDATE.getCode(),"金币不足"); | |||
} | |||
UserBasicPropertyLog userBasicPropertyLog = new UserBasicPropertyLog(); | |||
final IdWorker idWorker = IdWorker.get(); | |||
userBasicPropertyLog.setId(idWorker.nextId()); | |||
userBasicPropertyLog.setUserId(userId); | |||
userBasicPropertyLog.setProjectType(projectType); | |||
userBasicPropertyLog.setType(propertyLogType); | |||
userBasicPropertyLog.setBefourGold(befourGold); | |||
userBasicPropertyLog.setGoldNum(glodNum); | |||
userBasicPropertyLog.setAfterGold(afterGold); | |||
userBasicPropertyLog.setExtraId(extraId); | |||
userBasicPropertyLog.setCreateDate(now); | |||
userBasicPropertyLogMapper.insert(userBasicPropertyLog); | |||
}catch(Exception e){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_UPDATE); | |||
}finally { | |||
redisLock.unlock(lockKey, timeStr); | |||
} | |||
} | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void consumptionGlod(Long userId, Integer projectType, Integer propertyLogType, Integer glod, Long extraId, Date now) { | |||
WxCUserBasicInfo basicInfo = wxCUserBasicInfoMapper.selectById(userId); | |||
if(basicInfo == null){ | |||
throw new MallinkException(ErrorCode.USER_IS_EMPTY); | |||
public UserBasicProperty findById(Long id) { | |||
return userBasicPropertyMapper.selectById(id); | |||
} | |||
private Integer handGlodNum(Integer projectType, Integer propertyLogType, Integer glod){ | |||
if(EnumPropertyLogType.REGISTER.getCode().equals(propertyLogType)){ | |||
UserBasicGlodConfig glodConfig = userBasicGlodConfigMapper.selectGlodConfig(projectType, EnumGlodConfigType.register.getCode()); | |||
if(glodConfig != null && glodConfig.getGlodNum() != null && glodConfig.getGlodNum() != 0){ | |||
return glodConfig.getGlodNum(); | |||
} | |||
return 0; | |||
}else if(EnumPropertyLogType.INVITE.getCode().equals(propertyLogType)){ | |||
UserBasicGlodConfig glodConfig = userBasicGlodConfigMapper.selectGlodConfig(projectType, EnumGlodConfigType.invite.getCode()); | |||
if(glodConfig != null && glodConfig.getGlodNum() != null && glodConfig.getGlodNum() != 0){ | |||
return glodConfig.getGlodNum(); | |||
} | |||
return 0; | |||
}else if(EnumPropertyLogType.RECHARGE.getCode().equals(propertyLogType)){ | |||
return glod; | |||
}else if(EnumPropertyLogType.CONSUMPTION_10.getCode().equals(propertyLogType)){ | |||
if(glod > 0){ | |||
return -glod; | |||
} | |||
return glod; | |||
}else if(EnumPropertyLogType.CONSUMPTION_11.getCode().equals(propertyLogType)){ | |||
if(glod > 0){ | |||
return -glod; | |||
} | |||
return glod; | |||
} | |||
UserBasicProperty userBasicProperty = userBasicPropertyMapper.selectById(userId); | |||
if(userBasicProperty == null || userBasicProperty.getDigitalAvatarResidueGlod() < glod){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_ENOUGH); | |||
return 0; | |||
} | |||
private Integer getUserGlod(UserBasicProperty userBasicProperty,Integer projectType){ | |||
if(userBasicProperty == null){ | |||
return 0; | |||
} | |||
UserBasicProperty updProperty = new UserBasicProperty(); | |||
updProperty.setId(userId); | |||
updProperty.setReduceGlod(glod); | |||
updProperty.setUpdateDate(now); | |||
int count = userBasicPropertyMapper.reduceGlod(updProperty); | |||
if(count != 1){ | |||
throw new MallinkException(ErrorCode.GLOD_NOT_ENOUGH.getCode(),"扣减异常"); | |||
if(EnumProject.PROJECT_5.getCode().equals(projectType)){ | |||
return userBasicProperty.getDigitalAvatarResidueGlod(); | |||
} | |||
UserBasicPropertyLog userBasicPropertyLog = new UserBasicPropertyLog(); | |||
final IdWorker idWorker = IdWorker.get(); | |||
userBasicPropertyLog.setId(idWorker.nextId()); | |||
userBasicPropertyLog.setUserId(userId); | |||
userBasicPropertyLog.setProjectType(projectType); | |||
userBasicPropertyLog.setType(propertyLogType); | |||
userBasicPropertyLog.setBefourGold(userBasicProperty.getDigitalAvatarResidueGlod()); | |||
userBasicPropertyLog.setGoldNum(glod); | |||
userBasicPropertyLog.setAfterGold(userBasicProperty.getDigitalAvatarResidueGlod()-glod); | |||
userBasicPropertyLog.setExtraId(extraId); | |||
userBasicPropertyLog.setCreateDate(now); | |||
userBasicPropertyLogMapper.insert(userBasicPropertyLog); | |||
return 0; | |||
} | |||
@Override | |||
public UserBasicProperty findById(Long id) { | |||
return userBasicPropertyMapper.selectById(id); | |||
private Integer handUserProPery(Long userId, UserBasicProperty userBasicProperty, Integer projectType, Integer glodNum, Date now){ | |||
int count = 0; | |||
if(EnumProject.PROJECT_5.getCode().equals(projectType)){ | |||
if(userBasicProperty == null){ | |||
userBasicProperty = new UserBasicProperty(); | |||
userBasicProperty.setId(userId); | |||
userBasicProperty.setDigitalAvatarGlod(glodNum); | |||
userBasicProperty.setDigitalAvatarResidueGlod(glodNum); | |||
userBasicProperty.setUpdateDate(now); | |||
count = userBasicPropertyMapper.insert(userBasicProperty); | |||
}else{ | |||
if(glodNum > 0){ | |||
//余额和总金额都会增加 | |||
Integer addSumGlod = glodNum; | |||
userBasicProperty.setAddGlod(glodNum); | |||
userBasicProperty.setAddSumGlod(addSumGlod); | |||
userBasicProperty.setUpdateDate(now); | |||
count = userBasicPropertyMapper.addDigitalAvatarGlod(userBasicProperty); | |||
}else if(glodNum < 0){ | |||
userBasicProperty.setReduceGlod(glodNum); | |||
userBasicProperty.setUpdateDate(now); | |||
count = userBasicPropertyMapper.reduceDigitalAvatarGlod(userBasicProperty); | |||
} | |||
} | |||
} | |||
return count; | |||
} | |||
@@ -60,6 +60,5 @@ public interface UserDigitalAvatarOrderService { | |||
void createPhoto(UserDigitalAvatarOrder record); | |||
void handlePhoto(UserDigitalAvatarOrder record,List<String> imgList); | |||
} |
@@ -20,4 +20,6 @@ public interface UserDigitalAvatarPhotoService { | |||
void handleSuperPhoto(UserDigitalAvatarPhoto record, String img); | |||
void updateById(UserDigitalAvatarPhoto updPhoto); | |||
void handlePhoto(UserDigitalAvatarOrder record,List<String> imgList); | |||
} |
@@ -142,14 +142,14 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
if(record.getPrice() > 0){ | |||
UserBasicProperty userBasicProperty = userBasicPropertyMapper.selectById(record.getUserId()); | |||
if(userBasicProperty == null || userBasicProperty.getDigitalAvatarResidueGlod() < record.getPrice()){ | |||
return new ResultData(ErrorCode.GLOD_NOT_ENOUGH); | |||
return new ResultData(ErrorCode.GLOD_NOT_UPDATE.getCode(),"金币余不足"); | |||
} | |||
} | |||
try{ | |||
UserDigitalAvatarOrderServiceImpl proxy = (UserDigitalAvatarOrderServiceImpl) AopContext.currentProxy(); | |||
proxy.handleOrder(record); | |||
this.createPhoto(record); | |||
proxy.createPhoto(record); | |||
return new ResultData(record); | |||
}catch(MallinkException e){ | |||
return new ResultData(e.getErrorCode(),e.getMessage()); | |||
@@ -207,8 +207,8 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
public void handleOrder(UserDigitalAvatarOrder record) { | |||
Date now = new Date(); | |||
if(record.getPrice() > 0){ | |||
userBasicPropertyService.consumptionGlod(record.getUserId(),EnumProject.PROJECT_5.getCode(), EnumPropertyLogType.CONSUMPTION_10.getCode(), | |||
record.getPrice(),record.getId(),now); | |||
userBasicPropertyService.updUserGlod(record.getUserId(),EnumProject.PROJECT_5.getCode(), EnumPropertyLogType.CONSUMPTION_10.getCode(), | |||
record.getId(),record.getPrice(),now); | |||
} | |||
final IdWorker idWorker = IdWorker.get(); | |||
record.setId(idWorker.nextId()); | |||
@@ -266,7 +266,7 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
DigitalAvatarResult result = AiDigitalAvatarHelper.digitalAvatarPhoto(param,record.getId()); | |||
if(result.isSuccess()){ | |||
UserDigitalAvatarOrderServiceImpl proxy = (UserDigitalAvatarOrderServiceImpl) AopContext.currentProxy(); | |||
UserDigitalAvatarPhotoServiceImpl proxy = (UserDigitalAvatarPhotoServiceImpl) AopContext.currentProxy(); | |||
proxy.handlePhoto(record,result.getImgList()); | |||
}else{ | |||
updOrder.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | |||
@@ -288,56 +288,4 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||
} | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void handlePhoto(UserDigitalAvatarOrder record,List<String> imgList){ | |||
String lockKey = "digitalAvatar:handlePhoto:"+record.getId(); | |||
long time = System.currentTimeMillis() + 5000; | |||
String timeStr = String.valueOf(time); | |||
try{ | |||
while (!redisLock.lock2(lockKey, timeStr)){ | |||
Thread.sleep(2000); | |||
} | |||
UserDigitalAvatarOrder userDigitalAvatarOrder = userDigitalAvatarOrderMapper.selectById(record.getId()); | |||
if(EnumDigitalAvatarOrderStatus.finish.getCode().equals(userDigitalAvatarOrder.getStatus())){ | |||
return; | |||
} | |||
Date now = new Date(); | |||
UserDigitalAvatarOrder updOrder = new UserDigitalAvatarOrder(); | |||
updOrder.setId(record.getId()); | |||
updOrder.setStatus(EnumDigitalAvatarOrderStatus.finish.getCode()); | |||
updOrder.setMsg("success"); | |||
updOrder.setUpdateDate(now); | |||
userDigitalAvatarOrderMapper.updateById(updOrder); | |||
try{ | |||
final IdWorker idWorker = IdWorker.get(); | |||
for (String img: imgList) { | |||
InputStream inputStream = Base64Util.base2InputStream(img); | |||
String img_url = aliyunOSS.upload(record.getTenantId(), ".png", inputStream); | |||
UserDigitalAvatarPhoto userDigitalAvatarPhoto = new UserDigitalAvatarPhoto(); | |||
userDigitalAvatarPhoto.setId(idWorker.nextId()); | |||
userDigitalAvatarPhoto.setOrderId(record.getId()); | |||
userDigitalAvatarPhoto.setUserId(record.getUserId()); | |||
userDigitalAvatarPhoto.setImage(img_url); | |||
userDigitalAvatarPhoto.setStatus(EnumDigitalAvatarPhotoStatus.def.getCode()); | |||
userDigitalAvatarPhoto.setCreateDate(now); | |||
userDigitalAvatarPhoto.setUpdateDate(now); | |||
userDigitalAvatarPhotoMapper.insert(userDigitalAvatarPhoto); | |||
} | |||
}catch(Exception e){ | |||
throw new MallinkException(ErrorCode.PICTURE_ANALYZING_ERROR.getCode(),"上传图片异常"); | |||
} | |||
} catch(MallinkException e){ | |||
throw e; | |||
} catch(Exception e){ | |||
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); | |||
}finally { | |||
redisLock.unlock(lockKey, timeStr); | |||
} | |||
} | |||
} |
@@ -7,6 +7,7 @@ import com.iformall.domain.po.sm.*; | |||
import com.iformall.enums.*; | |||
import com.iformall.exception.MallinkException; | |||
import com.iformall.file.aliyun.AliyunOSS; | |||
import com.iformall.mapper.UserDigitalAvatarOrderMapper; | |||
import com.iformall.mapper.UserDigitalAvatarPhotoMapper; | |||
import com.iformall.service.UserBasicPropertyService; | |||
import com.iformall.service.sm.*; | |||
@@ -33,6 +34,9 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||
@Autowired | |||
UserDigitalAvatarPhotoMapper userDigitalAvatarPhotoMapper; | |||
@Autowired | |||
UserDigitalAvatarOrderMapper userDigitalAvatarOrderMapper; | |||
@Autowired | |||
UserBasicPropertyService userBasicPropertyService; | |||
@@ -75,8 +79,8 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||
Integer price = 0; | |||
record.setPrice(price); | |||
if(price > 0){ | |||
userBasicPropertyService.consumptionGlod(record.getUserId(),EnumProject.PROJECT_5.getCode(), EnumPropertyLogType.CONSUMPTION_11.getCode(), | |||
price,record.getId(),now); | |||
userBasicPropertyService.updUserGlod(record.getUserId(),EnumProject.PROJECT_5.getCode(), EnumPropertyLogType.CONSUMPTION_11.getCode(), | |||
record.getId(),price,now); | |||
} | |||
UserDigitalAvatarPhoto updPhoto = new UserDigitalAvatarPhoto(); | |||
@@ -126,11 +130,11 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||
@Override | |||
public void handleSuperPhoto(UserDigitalAvatarPhoto record, String img) { | |||
String lockKey = "digitalAvatar:superPhoto:"+record.getId(); | |||
long time = System.currentTimeMillis() + 5000; | |||
long time = System.currentTimeMillis() + 10000; | |||
String timeStr = String.valueOf(time); | |||
try{ | |||
while (!redisLock.lock2(lockKey, timeStr)){ | |||
Thread.sleep(2000); | |||
if(!redisLock.lock2(lockKey, timeStr)){ | |||
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"请稍后重试"); | |||
} | |||
UserDigitalAvatarPhoto userDigitalAvatarPhoto = userDigitalAvatarPhotoMapper.selectById(record.getId()); | |||
if(EnumDigitalAvatarPhotoStatus.finish.getCode().equals(userDigitalAvatarPhoto.getStatus())){ | |||
@@ -162,4 +166,55 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||
userDigitalAvatarPhotoMapper.updateById(updPhoto); | |||
} | |||
@Override | |||
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||
public void handlePhoto(UserDigitalAvatarOrder record,List<String> imgList){ | |||
String lockKey = "digitalAvatar:handlePhoto:"+record.getId(); | |||
long time = System.currentTimeMillis() + 10000; | |||
String timeStr = String.valueOf(time); | |||
try{ | |||
if (!redisLock.lock2(lockKey, timeStr)){ | |||
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"请稍后重试"); | |||
} | |||
UserDigitalAvatarOrder userDigitalAvatarOrder = userDigitalAvatarOrderMapper.selectById(record.getId()); | |||
if(EnumDigitalAvatarOrderStatus.finish.getCode().equals(userDigitalAvatarOrder.getStatus())){ | |||
return; | |||
} | |||
Date now = new Date(); | |||
UserDigitalAvatarOrder updOrder = new UserDigitalAvatarOrder(); | |||
updOrder.setId(record.getId()); | |||
updOrder.setStatus(EnumDigitalAvatarOrderStatus.finish.getCode()); | |||
updOrder.setMsg("success"); | |||
updOrder.setUpdateDate(now); | |||
userDigitalAvatarOrderMapper.updateById(updOrder); | |||
try{ | |||
final IdWorker idWorker = IdWorker.get(); | |||
for (String img: imgList) { | |||
InputStream inputStream = Base64Util.base2InputStream(img); | |||
String img_url = aliyunOSS.upload(record.getTenantId(), ".png", inputStream); | |||
UserDigitalAvatarPhoto userDigitalAvatarPhoto = new UserDigitalAvatarPhoto(); | |||
userDigitalAvatarPhoto.setId(idWorker.nextId()); | |||
userDigitalAvatarPhoto.setOrderId(record.getId()); | |||
userDigitalAvatarPhoto.setUserId(record.getUserId()); | |||
userDigitalAvatarPhoto.setImage(img_url); | |||
userDigitalAvatarPhoto.setStatus(EnumDigitalAvatarPhotoStatus.def.getCode()); | |||
userDigitalAvatarPhoto.setCreateDate(now); | |||
userDigitalAvatarPhoto.setUpdateDate(now); | |||
userDigitalAvatarPhotoMapper.insert(userDigitalAvatarPhoto); | |||
} | |||
}catch(Exception e){ | |||
throw new MallinkException(ErrorCode.PICTURE_ANALYZING_ERROR.getCode(),"上传图片异常"); | |||
} | |||
} catch(MallinkException e){ | |||
throw e; | |||
} catch(Exception e){ | |||
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); | |||
}finally { | |||
redisLock.unlock(lockKey, timeStr); | |||
} | |||
} | |||
} |
@@ -158,7 +158,7 @@ public class AiDigitalAvatarHelper { | |||
// log.info("生成照片start request:" + param.getBg_img()); | |||
String response = HttpUtil.doAiVideoPost(digital_avatar + "/logo_img", JSONObject.toJSONString(param)); | |||
log.info("照片超分end response:"+response); | |||
log.info("生成照片end response:"+response); | |||
ShareImgResult result = new ShareImgResult(); | |||
@@ -198,14 +198,16 @@ public class AiDigitalAvatarHelper { | |||
// System.out.println(result); | |||
DigitalAvatarParam param = new DigitalAvatarParam(); | |||
param.setBg_img("素白"); | |||
String img = Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/capi/2023-08-31/91f69a7fdac146159d2408baaad26619.jpg?x-oss-process=image/resize,w_10000/quality,q_60"); | |||
param.setImg_lift(img); | |||
param.setImg_middle("None"); | |||
param.setImg_right("None"); | |||
DigitalAvatarResult result = AiDigitalAvatarHelper.digitalAvatarPhoto(param,100001l); | |||
System.out.println(result); | |||
// DigitalAvatarParam param = new DigitalAvatarParam(); | |||
// param.setBg_img("素白"); | |||
// String img = Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/capi/2023-08-31/91f69a7fdac146159d2408baaad26619.jpg?x-oss-process=image/resize,w_10000/quality,q_60"); | |||
// param.setImg_lift(img); | |||
// param.setImg_middle("None"); | |||
// param.setImg_right("None"); | |||
// DigitalAvatarResult result = AiDigitalAvatarHelper.digitalAvatarPhoto(param,100001l); | |||
// System.out.println(result); | |||
} | |||
@@ -45,4 +45,12 @@ | |||
<include refid="dynamicWhereConditions" /> | |||
</select> | |||
<select id="selectGlodConfig" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||
select <include refid="allColumns" /> | |||
from user_basic_glod_config | |||
where `project_type` = #{projectType} | |||
and `type` = #{type} | |||
</select> | |||
</mapper> |
@@ -41,15 +41,17 @@ | |||
<include refid="dynamicWhereConditions" /> | |||
</select> | |||
<update id="addGlod" parameterType="com.iformall.domain.po.UserBasicProperty"> | |||
<update id="addDigitalAvatarGlod" parameterType="com.iformall.domain.po.UserBasicProperty"> | |||
update user_basic_property | |||
set `update_date` = #{updateDate} | |||
,`digital_avatar_glod` = digital_avatar_glod+#{addGlod} | |||
<if test=" null != addSumGlod "> | |||
,`digital_avatar_glod` = digital_avatar_glod+#{addSumGlod} | |||
</if> | |||
,`digital_avatar_residue_glod` = digital_avatar_residue_glod+#{addGlod} | |||
where id = #{id} | |||
</update> | |||
<update id="reduceGlod" parameterType="com.iformall.domain.po.UserBasicProperty"> | |||
<update id="reduceDigitalAvatarGlod" parameterType="com.iformall.domain.po.UserBasicProperty"> | |||
update user_basic_property | |||
set `update_date` = #{updateDate} | |||
,`digital_avatar_residue_glod` = digital_avatar_residue_glod-#{reduceGlod} | |||