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.GoldCornRecordManager;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
|
@Service
|
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 GoldCornAppInfo 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;
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void addGoldCorn(String appCode, String uid, GoldCornGetSource source) throws GoldAppException, GoldUserException, GoldTradeException {
|
GoldCornAppInfo app = validateAppAndUser(appCode, uid);
|
source = goldCornGetSourceMapper.selectByPrimaryKey(source.getId());
|
if (source == null) {
|
throw new GoldUserException(GoldTradeException.CODE_NOT_EXIST, "source is not exist");
|
}
|
|
//加记录
|
GoldCornRecord record = new GoldCornRecord();
|
record.setAppId(app.getId());
|
record.setGoldCorn(source.getGoldCorn());
|
record.setSourceId(source.getId());
|
record.setType(GoldCornRecord.TYPE_GET);
|
record.setUid(uid);
|
try {
|
goldCornRecordManager.addRecord(record);
|
} catch (GoldRecordException e) {
|
throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "添加记录失败");
|
}
|
//加余额
|
goldCornBalanceManager.addMoney(app.getId(), uid, source.getGoldCorn());
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void consumeGoldCorn(String appCode, String uid, GoldCornConsumeSource source) throws GoldAppException, GoldUserException, GoldTradeException {
|
GoldCornAppInfo app = validateAppAndUser(appCode, uid);
|
source = goldCornConsumeSourceMapper.selectByPrimaryKey(source.getId());
|
if (source == null) {
|
throw new GoldUserException(GoldTradeException.CODE_NOT_EXIST, "source is not exist");
|
}
|
//加记录
|
GoldCornRecord record = new GoldCornRecord();
|
record.setAppId(app.getId());
|
record.setGoldCorn(source.getGoldCorn());
|
record.setSourceId(source.getId());
|
record.setType(GoldCornRecord.TYPE_CONSUME);
|
record.setUid(uid);
|
try {
|
goldCornRecordManager.addRecord(record);
|
} catch (GoldRecordException e) {
|
throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "添加记录失败");
|
}
|
//减余额
|
goldCornBalanceManager.subMoney(app.getId(), uid, source.getGoldCorn());
|
}
|
}
|