weaver-hrm-salary/src/com/engine/salary/service/impl/TaxDeclarationApiConfigServ...

130 lines
6.1 KiB
Java

package com.engine.salary.service.impl;
import com.engine.core.impl.Service;
import com.engine.salary.constant.SzyhApiConstant;
import com.engine.salary.entity.datacollection.response.QuerySpecialAmountFeedbackResponse;
import com.engine.salary.entity.taxagent.response.SzyhResponseHead;
import com.engine.salary.entity.taxapiflow.bo.TaxApiFlowBO;
import com.engine.salary.entity.taxapiflow.param.TaxDeclarationBillingConfigSaveParam;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiProfilePO;
import com.engine.salary.enums.SalaryOnOffEnum;
import com.engine.salary.enums.taxdeclaration.TaxDeclareApiProfileEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.taxdeclaration.TaxDeclarationApiProfileMapper;
import com.engine.salary.mapper.taxdeclaration.TaxDeclareApiConfigMapper;
import com.engine.salary.service.TaxDeclarationApiConfigService;
import com.engine.salary.util.*;
import com.engine.salary.util.db.MapperProxyFactory;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
/**
* chengliming
* <p>Copyright: Copyright (c) 2023</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Slf4j
public class TaxDeclarationApiConfigServiceImpl extends Service implements TaxDeclarationApiConfigService {
private TaxDeclareApiConfigMapper getTaxDeclareApiConfigMapper() {
return MapperProxyFactory.getProxy(TaxDeclareApiConfigMapper.class);
}
private TaxDeclarationApiProfileMapper getTaxDeclarationApiProfileMapper() {
return MapperProxyFactory.getProxy(TaxDeclarationApiProfileMapper.class);
}
@Override
public TaxDeclarationApiConfigPO getConfig(boolean needValid) {
TaxDeclarationApiConfigPO configPO = getTaxDeclareApiConfigMapper().getOne();
if (needValid) {
String tips1 = SalaryI18nUtil.getI18nLabel(183786, "当前用户智能算薪尚未配置,请先前往[设置] -> [智能算薪]中配置");
String tips2 = SalaryI18nUtil.getI18nLabel(183787, "当前用户智能算薪尚未启用,请先前往[设置] -> [智能算薪]中启用该配置");
String tips3 = SalaryI18nUtil.getI18nLabel(183788, "当前用户智能算薪账号或密码为空,请前往[设置] -> [智能算薪]中检查账号密码是否填写");
SalaryAssert.isTrue(configPO != null, tips1);
SalaryAssert.isTrue(SalaryOnOffEnum.ON.getValue().equals(configPO.getEnableUse()), tips2);
SalaryAssert.isTrue(StringUtils.isNotEmpty(StringUtils.trim(configPO.getAppKey()))
&& StringUtils.isNotEmpty(StringUtils.trim(configPO.getAppSecret())), tips3);
}
if (configPO != null) {
configPO.setAppKey(StringUtils.trim(configPO.getAppKey()));
configPO.setAppSecret(StringUtils.trim(configPO.getAppSecret()));
}
return configPO;
}
@Override
public void insert(TaxDeclarationApiConfigPO configPO) {
getTaxDeclareApiConfigMapper().insertIgnoreNull(configPO);
}
@Override
public void update(TaxDeclarationApiConfigPO config) {
getTaxDeclareApiConfigMapper().updateIgnoreNull(config);
}
@Override
public void enableConfig(TaxDeclarationBillingConfigSaveParam saveParam) {
TaxDeclarationApiConfigPO config = this.getConfig(false);
Date now = new Date();
if (config != null) {
config.setEnableUse(SalaryOnOffEnum.valueOf(saveParam.getEnable()).getValue())
.setUpdateTime(now);
update(config);
} else {
config = TaxApiFlowBO.buildTaxDeclarationApiConfigPO(saveParam, (long) user.getUID());
config.setHost(getApiHost());
insert(config);
}
}
@Override
public void saveConfig(TaxDeclarationBillingConfigSaveParam saveParam) {
TaxDeclarationApiConfigPO config = this.getConfig(false);
if (config != null) {
config.setAppKey(saveParam.getAppKey())
.setAppSecret(saveParam.getAppSecret())
.setEnableUse(SalaryOnOffEnum.valueOf(saveParam.getEnable()).getValue())
.setUpdateTime(new Date());
update(config);
} else {
config = TaxApiFlowBO.buildTaxDeclarationApiConfigPO(saveParam, (long) user.getUID());
config.setHost(getApiHost());
insert(config);
}
if (StringUtils.isNotEmpty(config.getAppKey()) && StringUtils.isNotEmpty(config.getAppSecret())) {
QuerySpecialAmountFeedbackResponse response = getQuerySpecialAmountFeedbackResponse(config);
// 校验请求结果
String responseCode = Optional.ofNullable(response).map(QuerySpecialAmountFeedbackResponse::getHead).map(SzyhResponseHead::getCode).orElse(null);
if (SzyhApiConstant.ERROR_CODE.equals(responseCode)
|| SzyhApiConstant.APP_DISABLED_CODE.equals(responseCode)
|| SzyhApiConstant.APP_PAUSED_CODE.equals(responseCode)) {
throw new SalaryRunTimeException("账号密码错误或账号已停用");
}
}
}
private String getApiHost() {
List<TaxDeclarationApiProfilePO> apiProfiles = getTaxDeclarationApiProfileMapper().listAll();
if (apiProfiles.isEmpty() || TaxDeclareApiProfileEnum.PROD.getValue().equals(apiProfiles.get(0).getApiProfile())) {
return SzyhApiConstant.HOST_URL;
}
return SzyhApiConstant.TEST_HOST_URL;
}
public QuerySpecialAmountFeedbackResponse getQuerySpecialAmountFeedbackResponse(TaxDeclarationApiConfigPO apiConfig) {
String url = apiConfig.getHost() + SzyhApiConstant.GET_QUERY_SPECIAL_AMOUNT_FEEDBACK;
Map<String, String> params = new HashMap<>(1);
params.put("requestId", "");
Map<String, String> header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret());
String res = HttpUtil.getRequest(url, header, params);
return JsonUtil.parseObject(res, QuerySpecialAmountFeedbackResponse.class);
}
}