diff --git a/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java b/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java index 41091f6..bafe798 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java @@ -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()); diff --git a/suimangService/src/main/java/com/iformall/common/ErrorCode.java b/suimangService/src/main/java/com/iformall/common/ErrorCode.java index 597e91e..5fde228 100644 --- a/suimangService/src/main/java/com/iformall/common/ErrorCode.java +++ b/suimangService/src/main/java/com/iformall/common/ErrorCode.java @@ -449,7 +449,7 @@ public enum ErrorCode{ MEM_MONTH_IS_USED(13105, "该用户本月已领取或未到领取条件"), - GLOD_NOT_ENOUGH(13200, "金币不足"), + GLOD_NOT_UPDATE(13200, "金币修改失败"), /** diff --git a/suimangService/src/main/java/com/iformall/domain/po/UserBasicProperty.java b/suimangService/src/main/java/com/iformall/domain/po/UserBasicProperty.java index 1824b23..20414be 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/UserBasicProperty.java +++ b/suimangService/src/main/java/com/iformall/domain/po/UserBasicProperty.java @@ -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; diff --git a/suimangService/src/main/java/com/iformall/mapper/UserBasicGlodConfigMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserBasicGlodConfigMapper.java index 76ddae1..8092c64 100644 --- a/suimangService/src/main/java/com/iformall/mapper/UserBasicGlodConfigMapper.java +++ b/suimangService/src/main/java/com/iformall/mapper/UserBasicGlodConfigMapper.java @@ -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 findList(UserBasicGlodConfig record); + UserBasicGlodConfig selectGlodConfig(@Param("projectType")Integer projectType, @Param("type")Integer type); + } diff --git a/suimangService/src/main/java/com/iformall/mapper/UserBasicPropertyMapper.java b/suimangService/src/main/java/com/iformall/mapper/UserBasicPropertyMapper.java index 47d89d4..5e609c4 100644 --- a/suimangService/src/main/java/com/iformall/mapper/UserBasicPropertyMapper.java +++ b/suimangService/src/main/java/com/iformall/mapper/UserBasicPropertyMapper.java @@ -9,8 +9,8 @@ public interface UserBasicPropertyMapper extends CommonMapper findList(UserBasicProperty record); - int addGlod(UserBasicProperty record); + int addDigitalAvatarGlod(UserBasicProperty record); - int reduceGlod(UserBasicProperty record); + int reduceDigitalAvatarGlod(UserBasicProperty record); } diff --git a/suimangService/src/main/java/com/iformall/service/UserBasicPropertyService.java b/suimangService/src/main/java/com/iformall/service/UserBasicPropertyService.java index 8fb8e92..74c4560 100644 --- a/suimangService/src/main/java/com/iformall/service/UserBasicPropertyService.java +++ b/suimangService/src/main/java/com/iformall/service/UserBasicPropertyService.java @@ -19,24 +19,14 @@ public interface UserBasicPropertyService { PageInfo 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); } diff --git a/suimangService/src/main/java/com/iformall/service/impl/ProductOrderServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/ProductOrderServiceImpl.java index ddd2bfc..f36144b 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/ProductOrderServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/ProductOrderServiceImpl.java @@ -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); diff --git a/suimangService/src/main/java/com/iformall/service/impl/UserBasicFromServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/UserBasicFromServiceImpl.java index c4ee7e6..1c0fcf4 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/UserBasicFromServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/UserBasicFromServiceImpl.java @@ -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 listAsPage(UserBasicFrom record, Integer pageIndex, Integer pageSize) { PageInfo 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); diff --git a/suimangService/src/main/java/com/iformall/service/impl/UserBasicPropertyServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/UserBasicPropertyServiceImpl.java index e365017..ec1d9d7 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/UserBasicPropertyServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/UserBasicPropertyServiceImpl.java @@ -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 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; } diff --git a/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarOrderService.java b/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarOrderService.java index e6468cb..6085c12 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarOrderService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarOrderService.java @@ -60,6 +60,5 @@ public interface UserDigitalAvatarOrderService { void createPhoto(UserDigitalAvatarOrder record); - void handlePhoto(UserDigitalAvatarOrder record,List imgList); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java b/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java index 231cb0f..1f632a5 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java @@ -20,4 +20,6 @@ public interface UserDigitalAvatarPhotoService { void handleSuperPhoto(UserDigitalAvatarPhoto record, String img); void updateById(UserDigitalAvatarPhoto updPhoto); + + void handlePhoto(UserDigitalAvatarOrder record,List imgList); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java index fcb4e9e..e1fa002 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarOrderServiceImpl.java @@ -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 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); - } - } - } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java index 0a0a4bd..ea01f73 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java @@ -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 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); + } + } } diff --git a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java index bb90c26..af88e03 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java @@ -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); + + } diff --git a/suimangService/src/main/resources/mapper/UserBasicGlodConfigMapper.xml b/suimangService/src/main/resources/mapper/UserBasicGlodConfigMapper.xml index bd44b5b..c46d782 100644 --- a/suimangService/src/main/resources/mapper/UserBasicGlodConfigMapper.xml +++ b/suimangService/src/main/resources/mapper/UserBasicGlodConfigMapper.xml @@ -45,4 +45,12 @@ + + + diff --git a/suimangService/src/main/resources/mapper/UserBasicPropertyMapper.xml b/suimangService/src/main/resources/mapper/UserBasicPropertyMapper.xml index 0e03c9d..f7b1ee1 100644 --- a/suimangService/src/main/resources/mapper/UserBasicPropertyMapper.xml +++ b/suimangService/src/main/resources/mapper/UserBasicPropertyMapper.xml @@ -41,15 +41,17 @@ - + update user_basic_property set `update_date` = #{updateDate} - ,`digital_avatar_glod` = digital_avatar_glod+#{addGlod} + + ,`digital_avatar_glod` = digital_avatar_glod+#{addSumGlod} + ,`digital_avatar_residue_glod` = digital_avatar_residue_glod+#{addGlod} where id = #{id} - + update user_basic_property set `update_date` = #{updateDate} ,`digital_avatar_residue_glod` = digital_avatar_residue_glod-#{reduceGlod}