package com.ks.goldcorn.service.remote;
|
|
import com.ks.goldcorn.exception.GoldAppException;
|
import com.ks.goldcorn.exception.GoldRecordException;
|
import com.ks.goldcorn.exception.GoldTradeException;
|
import com.ks.goldcorn.exception.GoldUserException;
|
import com.ks.goldcorn.mapper.GoldCornAppInfoMapper;
|
import com.ks.goldcorn.mapper.GoldCornBalanceMapper;
|
import com.ks.goldcorn.mapper.GoldCornConsumeSourceMapper;
|
import com.ks.goldcorn.mapper.GoldCornGetSourceMapper;
|
import com.ks.goldcorn.pojo.DO.*;
|
import com.ks.goldcorn.service.GoldCornBalanceManager;
|
import com.ks.goldcorn.service.GoldCornRecordManager;
|
import org.apache.dubbo.config.annotation.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
|
@Service(version = "1.0")
|
public class GoldCornTradeServiceImpl implements GoldCornTradeService {
|
|
@Resource
|
private GoldCornAppInfoMapper goldCornAppInfoMapper;
|
|
@Resource
|
private GoldCornBalanceMapper goldCornBalanceMapper;
|
|
@Resource
|
private GoldCornConsumeSourceMapper goldCornConsumeSourceMapper;
|
|
@Resource
|
private GoldCornBalanceManager goldCornBalanceManager;
|
|
@Resource
|
private GoldCornGetSourceMapper goldCornGetSourceMapper;
|
|
@Resource
|
private GoldCornRecordManager goldCornRecordManager;
|
|
/**
|
* 验证系统与用户
|
*
|
* @param appCode
|
* @param uid
|
* @return
|
* @throws GoldAppException
|
* @throws GoldUserException
|
*/
|
private Long validateAppAndUser(String appCode, String uid) throws GoldAppException, GoldUserException {
|
GoldCornAppInfo appInfo = goldCornAppInfoMapper.selectByAppCode(appCode);
|
if (appInfo == null) {
|
throw new GoldAppException(GoldAppException.CODE_NOT_EXIST, "app is not exist");
|
}
|
|
GoldCornBalance balance = goldCornBalanceMapper.selectByAppIdAndUid(appInfo.getId(), uid);
|
if (balance == null) {
|
throw new GoldUserException(GoldUserException.CODE_NOT_EXIST, "uid is not exist");
|
}
|
|
return appInfo.getId();
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void addGoldCorn(String appCode, String uid, String sourceCode, String title, String desc) throws GoldAppException, GoldUserException, GoldTradeException {
|
Long appId = validateAppAndUser(appCode, uid);
|
GoldCornGetSource source = goldCornGetSourceMapper.selectByAppIdAndSourceCode(appId, sourceCode);
|
if (source == null) {
|
throw new GoldUserException(GoldTradeException.CODE_NOT_EXIST, "source is not exist");
|
}
|
|
//加记录
|
GoldCornRecord record = new GoldCornRecord();
|
record.setAppId(appId);
|
record.setGoldCorn(source.getGoldCorn());
|
record.setSourceId(source.getId());
|
record.setType(GoldCornRecord.TYPE_GET);
|
record.setUid(uid);
|
if (title != null) {
|
record.setTitle(title);
|
} else {
|
record.setTitle(source.getSourceName());
|
}
|
if (desc != null) {
|
record.setDesc(desc);
|
} else {
|
record.setDesc(source.getSourceDesc());
|
}
|
try {
|
goldCornRecordManager.addRecord(record);
|
} catch (GoldRecordException e) {
|
throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "添加记录失败");
|
}
|
//加余额
|
goldCornBalanceManager.addMoney(appId, uid, source.getGoldCorn());
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void consumeGoldCorn(String appCode, String uid, String sourceCode, String title, String desc) throws GoldAppException, GoldUserException, GoldTradeException {
|
Long appId = validateAppAndUser(appCode, uid);
|
GoldCornConsumeSource source = goldCornConsumeSourceMapper.selectByAppIdAndSourceCode(appId, sourceCode);
|
if (source == null) {
|
throw new GoldUserException(GoldTradeException.CODE_NOT_EXIST, "source is not exist");
|
}
|
|
//减余额
|
goldCornBalanceManager.subMoney(appId, uid, source.getGoldCorn());
|
|
//加记录
|
GoldCornRecord record = new GoldCornRecord();
|
record.setAppId(appId);
|
record.setGoldCorn(source.getGoldCorn());
|
record.setSourceId(source.getId());
|
record.setType(GoldCornRecord.TYPE_CONSUME);
|
record.setUid(uid);
|
if (title != null) {
|
record.setTitle(title);
|
} else {
|
record.setTitle(source.getSourceName());
|
}
|
if (desc != null) {
|
record.setDesc(desc);
|
} else {
|
record.setDesc(source.getSourceDesc());
|
}
|
try {
|
goldCornRecordManager.addRecord(record);
|
} catch (GoldRecordException e) {
|
throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "添加记录失败");
|
}
|
|
|
}
|
}
|