package com.nmgs.service.impl ;
import com.alibaba.fastjson.JSONArray ;
import com.alibaba.fastjson.JSONObject ;
import com.nmgs.mapperset.oraclemapper.* ;
import com.nmgs.mapperset.mysqlmapper.IntegralSignMyMapper ;
import com.nmgs.mapperset.mysqlmapper.IntegrationListMyMapper ;
import com.nmgs.mapperset.mysqlmapper.UserTableMysqlMapper ;
import com.nmgs.mapperset.oraclemapper.IntegralSignMapper ;
import com.nmgs.mapperset.oraclemapper.IntegrationListMapper ;
import com.nmgs.mapperset.oraclemapper.UserTableMapper ;
import com.nmgs.service.IntegralSignService ;
import com.nmgs.util.LogUtil ;
import com.nmgs.util.PropertiesUtil ;
import com.nmgs.util.PubTools ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Isolation ;
import org.springframework.transaction.annotation.Transactional ;
import java.math.BigDecimal ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
@Service
public class IntegralSignServiceImpl implements IntegralSignService {
@Autowired
public Mapper mapperI ;
public IntegralSignMapper integralSignMapper ;
@Autowired
public void setIntegralSignMapper ( IntegralSignMapper integralSignMapper ) {
this . integralSignMapper = integralSignMapper ;
}
public IntegralSignMyMapper integralSignMyMapper ;
@Autowired
public void setIntegralSignMyMapper ( IntegralSignMyMapper integralSignMapper ) {
this . integralSignMyMapper = integralSignMapper ;
}
/ *
public IntegrationListMapper integrationListMapper ;
@Autowired
public void setIntegrationListMapper ( IntegrationListMapper integrationListMapper ) {
this . integrationListMapper = integrationListMapper ;
}
public IntegrationListMyMapper integrationListMyMapper ;
@Autowired
public void setIntegrationListMyMapper ( IntegrationListMyMapper integrationListMyMapper ) {
this . integrationListMyMapper = integrationListMyMapper ;
}
public UserTableMapper userTableMapper ;
@Autowired
public void setUserTableMapper ( UserTableMapper userTableMapper ) {
this . userTableMapper = userTableMapper ;
}
public UserTableMysqlMapper userTableMysqlMapper ;
@Autowired
public void setUserTableMysqlMapper ( UserTableMysqlMapper userTableMysqlMapper ) {
this . userTableMysqlMapper = userTableMysqlMapper ;
} * /
private static String DBType = PropertiesUtil . getValue ( "DBType" ) ;
private String sql = "SELECT ist.USERID,\n" +
"ist.MONTH,\n" +
"COALESCE(ist.DAY01,'N') AS DAY01,\n" +
"COALESCE(ist.DAY02,'N') AS DAY02,\n" +
"COALESCE(ist.DAY03,'N') AS DAY03,\n" +
"COALESCE(ist.DAY04,'N') AS DAY04,\n" +
"COALESCE(ist.DAY05,'N') AS DAY05,\n" +
"COALESCE(ist.DAY06,'N') AS DAY06,\n" +
"COALESCE(ist.DAY07,'N') AS DAY07,\n" +
"COALESCE(ist.DAY08,'N') AS DAY08,\n" +
"COALESCE(ist.DAY09,'N') AS DAY09,\n" +
"COALESCE(ist.DAY10,'N') AS DAY10,\n" +
"COALESCE(ist.DAY11,'N') AS DAY11,\n" +
"COALESCE(ist.DAY12,'N') AS DAY12,\n" +
"COALESCE(ist.DAY13,'N') AS DAY13,\n" +
"COALESCE(ist.DAY14,'N') AS DAY14,\n" +
"COALESCE(ist.DAY15,'N') AS DAY15,\n" +
"COALESCE(ist.DAY16,'N') AS DAY16,\n" +
"COALESCE(ist.DAY17,'N') AS DAY17,\n" +
"COALESCE(ist.DAY18,'N') AS DAY18,\n" +
"COALESCE(ist.DAY19,'N') AS DAY19,\n" +
"COALESCE(ist.DAY20,'N') AS DAY20,\n" +
"COALESCE(ist.DAY21,'N') AS DAY21,\n" +
"COALESCE(ist.DAY22,'N') AS DAY22,\n" +
"COALESCE(ist.DAY23,'N') AS DAY23,\n" +
"COALESCE(ist.DAY24,'N') AS DAY24,\n" +
"COALESCE(ist.DAY25,'N') AS DAY25,\n" +
"COALESCE(ist.DAY26,'N') AS DAY26,\n" +
"COALESCE(ist.DAY27,'N') AS DAY27,\n" +
"COALESCE(ist.DAY28,'N') AS DAY28,\n" +
"COALESCE(ist.DAY29,'N') AS DAY29,\n" +
"COALESCE(ist.DAY30,'N') AS DAY30,\n" +
"COALESCE(ist.DAY31,'N') AS DAY31\n" +
" FROM INTEGRAL_SIGN_TABLE ist where 1=1 " ;
@Override
public JSONArray getList ( String userId , String signDate , int countDay ) {
List list = null ;
String sqlTemp = sql ;
JSONArray ja = new JSONArray ( ) ;
try {
if ( ! PubTools . isNull ( userId ) ) {
sqlTemp + = " and ist.USERID=(SELECT ID FROM WEIXN_USER_TABLE WHERE OPENID='" + userId + "') " ;
}
if ( ! PubTools . isNull ( signDate ) ) {
sqlTemp + = " and ist.MONTH ='" + signDate + "'" ;
}
list = this . mapperI . selectforlist ( sqlTemp ) ;
for ( int k = 1 ; k < = countDay ; k + + ) {
JSONObject jo = new JSONObject ( ) ;
String signStatus = "N" ;
if ( list . size ( ) > 0 ) {
Map < String , Object > map = ( Map < String , Object > ) list . get ( 0 ) ;
if ( k < 10 ) {
signStatus = map . get ( "DAY0" + k ) . toString ( ) ;
} else {
signStatus = map . get ( "DAY" + k ) . toString ( ) ;
}
}
jo . put ( "name" , k ) ;
jo . put ( "value" , signStatus ) ;
ja . add ( jo ) ;
}
} catch ( Exception e ) {
LogUtil . WriteLog_Error ( "查询签到记录失败===>" + e . getMessage ( ) , "IntegralSignServiceImpl" ) ;
return ja = null ;
}
return ja ;
}
@Override
@Transactional ( value = "transactionManager" , timeout = 300 )
public int commit ( String userId , String signDate ) {
int ret = - 1 ;
String currentDate = PubTools . getCurrentDate ( ) . substring ( 0 , 10 ) ;
//判断是否是当前日
if ( ! signDate . equals ( currentDate ) ) {
return 2 ;
}
//先查询人员本月是否有签到记录
String yM = signDate . substring ( 0 , 7 ) ;
String date = signDate . substring ( 8 ) ;
String sqlExists = sql + " AND ist.USERID=(SELECT ID FROM WEIXN_USER_TABLE WHERE OPENID='" + userId + "') AND ist.MONTH ='" + yM + "' " ;
List list = this . mapperI . selectforlist ( sqlExists ) ;
if ( ! list . isEmpty ( ) ) { //说明已经有签到记录
Map < String , Object > paramsUpdate = new HashMap < > ( ) ;
paramsUpdate . put ( "dayvalue" , date ) ;
paramsUpdate . put ( "openId" , userId ) ;
paramsUpdate . put ( "month" , yM ) ;
ret = integralSignMapper . updateIntegralSign ( paramsUpdate ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
paramsUpdate . put ( "DBTYPEBAK" , bakDBType ) ;
integralSignMyMapper . updateIntegralSign ( paramsUpdate ) ;
}
} else {
Map < String , Object > paramsUpdate = new HashMap < > ( ) ;
paramsUpdate . put ( "dayvalue" , date ) ;
paramsUpdate . put ( "openId" , userId ) ;
paramsUpdate . put ( "month" , yM ) ;
ret = integralSignMapper . addIntegralSign ( paramsUpdate ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
paramsUpdate . put ( "DBTYPEBAK" , bakDBType ) ;
ret = integralSignMyMapper . addIntegralSign ( paramsUpdate ) ;
}
}
//查询签到一次加多少积分
/ * String signIntegral = "SELECT COALESCE(VALUE,0) AS PAYINTEGRAL FROM PAY_INTEGRATION_NUMBER_TABLE WHERE TYPE='AS'" ;
Map < String , Object > select = this . mapperI . select ( signIntegral ) ;
double payIntegral = Double . parseDouble ( select . get ( "PAYINTEGRAL" ) . toString ( ) ) ;
if ( payIntegral > 0.0 ) {
String payType = "AS" ;
String sqlMax = "select COALESCE(max(ID),0) AS ID from integration_list_table" ;
List selectforlistMax = this . mapperI . selectforlist ( sqlMax ) ;
int maxId = 1 ;
if ( selectforlistMax . size ( ) > 0 ) {
Map < String , Object > os = ( Map < String , Object > ) selectforlistMax . get ( 0 ) ;
maxId = Integer . parseInt ( os . get ( "ID" ) . toString ( ) ) ;
}
String sqlUser = "select " +
" ut.ID ,ut.OPENID ,COALESCE(ut.ENABLEINTEGRATION,0) AS ENABLEINTEGRATION," +
" COALESCE(ut.OGENABLEINTEGRATION,0) AS OGENABLEINTEGRATION," +
" COALESCE(ut.CPENABLEINTEGRATION,0) AS CPENABLEINTEGRATION" +
" from WEIXN_USER_TABLE ut " +
" where 1=1 AND ut.OPENID='" + userId + "'" ;
List userByOpenId = this . mapperI . selectforlist ( sqlUser ) ;
int userMainId = 0 ;
String ENABLEINTEGRATION = "0" ;
double OGENABLEINTEGRATION = 0.0 ;
double CPENABLEINTEGRATION = 0.0 ;
if ( userByOpenId . size ( ) > 0 ) {
Object obj = userByOpenId . get ( 0 ) ;
Map < String , Object > obj1 = ( Map < String , Object > ) obj ;
userMainId = Integer . parseInt ( obj1 . get ( "ID" ) . toString ( ) ) ; //用户主键
ENABLEINTEGRATION = obj1 . get ( "ENABLEINTEGRATION" ) . toString ( ) ; //用户可用公共积分
OGENABLEINTEGRATION = Double . parseDouble ( obj1 . get ( "OGENABLEINTEGRATION" ) . toString ( ) ) ; //用户可用加油、加气积分
CPENABLEINTEGRATION = Double . parseDouble ( obj1 . get ( "CPENABLEINTEGRATION" ) . toString ( ) ) ; //用户可用消费积分
}
String totalAddIntegralSql = "SELECT COALESCE(MAX(ilt.TOTALADDINTEGRATION),0) AS TOTALADDINTEGRATION FROM INTEGRATION_LIST_TABLE ilt,WEIXN_USER_TABLE ut WHERE ilt.USERID = ut.ID AND ut.ID=" + userMainId + "" ;
List selectforlistTotalAdd = this . mapperI . selectforlist ( totalAddIntegralSql ) ;
double totalAddIntegral = 0.0 ;
if ( selectforlistTotalAdd . size ( ) > 0 ) {
Map < String , Object > ot = ( Map < String , Object > ) selectforlistTotalAdd . get ( 0 ) ;
totalAddIntegral = Double . parseDouble ( ot . get ( "TOTALADDINTEGRATION" ) . toString ( ) ) ;
}
OGENABLEINTEGRATION = PubTools . doubleSave1 ( OGENABLEINTEGRATION + payIntegral * 0.6 ) ;
CPENABLEINTEGRATION = PubTools . doubleSave1 ( CPENABLEINTEGRATION + payIntegral * 0.4 ) ;
Map < String , Object > integralListParams = new HashMap < > ( ) ;
integralListParams . put ( "DBTYPE" , DBType ) ;
integralListParams . put ( "maxid" , ( maxId + 1 ) ) ;
integralListParams . put ( "userId" , userId ) ;
integralListParams . put ( "lastintegration" , PubTools . doubleSave1 ( Double . parseDouble ( ENABLEINTEGRATION ) ) ) ;
integralListParams . put ( "totalintegration" , PubTools . doubleSave1 ( totalAddIntegral + payIntegral ) ) ;
integralListParams . put ( "payintegration" , PubTools . doubleSave1 ( payIntegral ) ) ;
integralListParams . put ( "restintegration" , PubTools . doubleSave1 ( ( Double . parseDouble ( ENABLEINTEGRATION ) + payIntegral ) ) ) ;
integralListParams . put ( "payTime" , PubTools . getCurrentDate ( ) ) ;
integralListParams . put ( "payType" , payType ) ;
integralListParams . put ( "cpenableintegration" , PubTools . doubleSave1 ( CPENABLEINTEGRATION ) ) ;
integralListParams . put ( "ogenableintegration" , PubTools . doubleSave1 ( OGENABLEINTEGRATION ) ) ;
this . integrationListMapper . addIntegralList ( integralListParams ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
integralListParams . put ( "DBTYPEBAK" , bakDBType ) ;
ret = integrationListMyMapper . addIntegralList ( integralListParams ) ;
}
LogUtil . WriteLog_Info ( "人员签到积分流水记录已插入" , "IntegralSignServiceImpl" ) ;
//3、计算用户可用积分
String sql = "select " +
" ut.ID ,ut.OPENID ,COALESCE(ut.ENABLEINTEGRATION,0) AS ENABLEINTEGRATION,COALESCE(ut.CPENABLEINTEGRATION,0) AS CPENABLEINTEGRATION,COALESCE(ut.OGENABLEINTEGRATION,0) AS OGENABLEINTEGRATION" +
" from WEIXN_USER_TABLE ut " +
" where 1=1 AND ut.ID=" + userMainId + "" ;
List selectforlist1 = this . mapperI . selectforlist ( sql ) ;
if ( selectforlist1 . size ( ) > 0 ) {
Object objT = selectforlist1 . get ( 0 ) ;
Map < String , Object > obj1T = ( Map < String , Object > ) objT ;
Double enabledT = Double . parseDouble ( obj1T . get ( "ENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bd = BigDecimal . valueOf ( enabledT + payIntegral ) ;
bd = bd . setScale ( 1 , BigDecimal . ROUND_HALF_UP ) ;
double enabledTI = bd . doubleValue ( ) ;
Double enabledTCp = Double . parseDouble ( obj1T . get ( "CPENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bdcp = BigDecimal . valueOf ( enabledTCp + payIntegral * 0.4 ) ;
bdcp = bdcp . setScale ( 1 , BigDecimal . ROUND_HALF_UP ) ;
double enabledTICp = bdcp . doubleValue ( ) ;
Double enabledTOG = Double . parseDouble ( obj1T . get ( "OGENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bdco = BigDecimal . valueOf ( enabledTOG + payIntegral * 0.6 ) ;
bdco = bdco . setScale ( 1 , BigDecimal . ROUND_HALF_UP ) ;
double enabledTIOG = bdco . doubleValue ( ) ;
Map < String , Object > userTableParams = new HashMap < > ( ) ;
userTableParams . put ( "enabledTI" , enabledTI ) ;
userTableParams . put ( "enabledTICp" , enabledTICp ) ;
userTableParams . put ( "enabledTIOG" , enabledTIOG ) ;
userTableParams . put ( "userId" , userMainId ) ;
this . userTableMapper . updateUserById ( userTableParams ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
integralListParams . put ( "DBTYPEBAK" , bakDBType ) ;
ret = this . userTableMysqlMapper . updateUserById ( userTableParams ) ;
}
LogUtil . WriteLog_Info ( "用户更新可用积分完成" , "QCodeInfoServiceImpl" ) ;
}
} * /
return ret ;
}
}