package com.nmgs.service.impl ;
import com.alibaba.fastjson.JSONObject ;
import com.nmgs.entity.Consistant ;
import com.nmgs.mappercommon.Mapper ;
import com.nmgs.mapperset.mysqlmapper.AppointmentInfoMyMapper ;
import com.nmgs.mapperset.mysqlmapper.CafterTableMyMapper ;
import com.nmgs.mapperset.mysqlmapper.IntegrationListMyMapper ;
import com.nmgs.mapperset.mysqlmapper.UserTableMysqlMapper ;
import com.nmgs.mapperset.oraclemapper.AppointmentInfoMapper ;
import com.nmgs.mapperset.oraclemapper.CafterTableMapper ;
import com.nmgs.mapperset.oraclemapper.IntegrationListMapper ;
import com.nmgs.mapperset.oraclemapper.UserTableMapper ;
import com.nmgs.service.UserTableService ;
import com.nmgs.util.* ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.jdbc.core.JdbcTemplate ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.transaction.interceptor.TransactionAspectSupport ;
import java.math.BigDecimal ;
import java.math.BigInteger ;
import java.math.RoundingMode ;
import java.text.SimpleDateFormat ;
import java.util.* ;
@Service
@Transactional
public class QCodeInfoServiceImpl {
SimpleDateFormat df = new SimpleDateFormat ( "yyyyMMdd" ) ;
@Autowired
public Mapper mapperI ;
private static String DBType = PropertiesUtil . getValue ( "DBType" ) ;
public UserTableService userTableService ;
@Autowired
public void setUserTableService ( UserTableService userTableService ) {
this . userTableService = userTableService ;
}
public IntegralStarSetupServiceImpl integralStarSetupServiceImpl ;
@Autowired
public void setIntegralStarSetupServiceImpl ( IntegralStarSetupServiceImpl integralStarSetupServiceImplT ) {
this . integralStarSetupServiceImpl = integralStarSetupServiceImplT ;
}
public MessagePushServiceImpl messagePushServiceImpl ;
@Autowired
public void setMessagePushServiceImpl ( MessagePushServiceImpl messagePushServiceImpl ) {
this . messagePushServiceImpl = messagePushServiceImpl ;
}
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 userTableMyMapper ;
@Autowired
public void setUserTableMyMapper ( UserTableMysqlMapper userTableMapper ) {
this . userTableMyMapper = userTableMapper ;
}
public UserTableMysqlMapper userTableMysqlMapper ;
@Autowired
public void setUserTableMysqlMapper ( UserTableMysqlMapper userTableMysqlMapper ) {
this . userTableMysqlMapper = userTableMysqlMapper ;
}
public CafterTableMapper cafterTableMapper ;
@Autowired
public void setCafterTableMapper ( CafterTableMapper cafterTableMapper ) {
this . cafterTableMapper = cafterTableMapper ;
}
public CafterTableMyMapper cafterTableMyMapper ;
@Autowired
public void setCafterTableMyMapper ( CafterTableMyMapper cafterTableMyMapper ) {
this . cafterTableMyMapper = cafterTableMyMapper ;
}
public AppointmentInfoMyMapper appointmentInfoMyMapper ;
@Autowired
public void setAppointmentInfoMyMapper ( AppointmentInfoMyMapper appointmentInfoMyMapper ) {
this . appointmentInfoMyMapper = appointmentInfoMyMapper ;
}
public AppointmentInfoMapper appointmentInfoMapper ;
@Autowired
public void setAppointmentInfoMapper ( AppointmentInfoMapper appointmentInfoMapper ) {
this . appointmentInfoMapper = appointmentInfoMapper ;
}
/ * *
* 利 用 redis 做 缓 存
* @param openId 用 户 微 信 iD
* @param integrateType 积 分 类 型
* @param rebateIntegrate 兑 换 积 分
* @return
* /
public String getQcodeInfoByUserIdRedis ( String openId , String integrateType , String rebateIntegrate ) {
JSONObject jo = new JSONObject ( ) ;
jo . put ( "openId" , openId ) ;
jo . put ( "integrateType" , integrateType ) ;
jo . put ( "rebateIntegrate" , rebateIntegrate ) ;
jo . put ( "createTime" , PubTools . getCurrentDate ( ) ) ; //二维码生成时间, 20s之后过期
//判断用户是否被冻结
List userStarByOepnIdTemp = this . userTableService . getUserByOpenId ( openId ) ;
if ( userStarByOepnIdTemp . size ( ) < 1 ) {
return "-2" ;
} else {
Object obj = userStarByOepnIdTemp . get ( 0 ) ;
Map < String , Object > obj1 = ( Map < String , Object > ) obj ;
String certification = obj1 . get ( "CERTIFICATION" ) . toString ( ) ; //认证状态
if ( "5" . equals ( certification ) ) {
return "-3" ;
}
}
//生成一个二维码流水号
//xxxx xxxx( 8位时间戳16进制) |xxxx(4位流水序号16进制)|xxxx( 4位兑换积分16进制) |xxxx( 4位校验码, 16进制) "}
String content = "" ;
String dateTimes = df . format ( new Date ( ) ) ;
String serialsT = "" ;
String rebateIntegrateT = rebateIntegrate ;
Random random = new Random ( ) ;
int res = 1000 + random . nextInt ( 9000 ) ;
int serials = Consistant . serials + 1 ;
Consistant . serials = serials ;
if ( serials < 10 ) {
serialsT = "000" + serials ;
} else if ( serials > = 10 & & serials < 100 ) {
serialsT = "00" + serials ;
Consistant . serials = serials ;
} else if ( serials > = 10 & & serials < 100 ) {
serialsT = "00" + serials ;
} else if ( serials > = 100 & & serials < 1000 ) {
serialsT = "0" + serials ;
} else if ( serials > = 1000 & & serials < 10000 ) {
serialsT = "" + serials ;
} else {
serialsT = "1000" ;
Consistant . serials = 999 ;
}
Long seconds = ( new Date ( ) ) . getTime ( ) / 1000 ;
String dataStr = Long . toHexString ( seconds ) ;
String serialsTStr = Integer . toHexString ( Integer . parseInt ( serialsT ) ) ;
if ( serialsTStr . length ( ) < 4 ) {
int diff = 4 - serialsTStr . length ( ) ;
if ( diff = = 3 ) {
serialsTStr = "000" + serialsTStr ;
} else if ( diff = = 2 ) {
serialsTStr = "00" + serialsTStr ;
} else if ( diff = = 1 ) {
serialsTStr = "0" + serialsTStr ;
}
}
String rebateIntegrateTStr = Integer . toHexString ( Integer . parseInt ( rebateIntegrateT ) ) ;
if ( rebateIntegrateTStr . length ( ) < 4 ) {
int diff = 4 - rebateIntegrateTStr . length ( ) ;
if ( diff = = 3 ) {
rebateIntegrateTStr = "000" + rebateIntegrateTStr ;
} else if ( diff = = 2 ) {
rebateIntegrateTStr = "00" + rebateIntegrateTStr ;
} else if ( diff = = 1 ) {
rebateIntegrateTStr = "0" + rebateIntegrateTStr ;
}
}
String resStr = Integer . toHexString ( res ) ;
if ( resStr . length ( ) < 4 ) {
int diff = 4 - resStr . length ( ) ;
if ( diff = = 3 ) {
resStr = "000" + resStr ;
} else if ( diff = = 2 ) {
resStr = "00" + resStr ;
} else if ( diff = = 1 ) {
resStr = "0" + resStr ;
}
}
content = dataStr + "|" + serialsTStr + "|" + rebateIntegrateTStr + "|" + resStr ;
// content= dateTimes+"|" +serialsT +"|"+rebateIntegrateT+"|"+res;
LogUtil . WriteLog_Info ( "用户:" + openId + "---->核销积分" + integrateType + "生成的流水号======" + content , "QCodeInfoServiceImpl" ) ;
// Consistant.map.put(content,jo);
Long l = redisConfigUtil . setIntegral ( content , jo . toJSONString ( ) ) ;
if ( l < 0 ) {
return "5" ;
}
return content ;
}
/ * *
* @param content 二 维 码 内 容
* @return
* /
public String removeContent ( String content ) {
Object content1 = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( content1 ) ) {
Consistant . map . remove ( content ) ;
}
Long l = redisConfigUtil . delIntegral ( content ) ;
if ( l < 0 ) {
LogUtil . WriteLog_Error ( "removeContent 删除缓存中key失败, redis 连接失败了" , "QCodeInfoServiceImpl" ) ;
}
return "1" ;
}
public int failBackMoney ( String content , String serverOperationId , String orderId ) throws Exception {
return rollBackIntegral ( content , serverOperationId , orderId ) ;
}
@Transactional ( value = "jtatransactionManager" , timeout = 100 )
public int rollBackIntegral ( String content , String serverOperationId , String orderId ) throws Exception {
int ret = 1 ; // -1 代表接口处理失败 1 处理成功 2 商户不存在 3订单已经退回 4 用户信息未找到
LogUtil . WriteLog_Info ( "调用红冲接口开始=====" , "QCodeInfoServiceImpl" ) ;
String sqlTemp = "select t.ID,COALESCE(to_char(t.INTEGRATIONLISTID),'') AS INTEGRATIONLISTID,COALESCE(to_char(t.INTEGRALROLLBACK),'') AS INTEGRALROLLBACK,t.USERID from CAFTER_TABLE t where t.ORDERID = '" + orderId + "' AND t.USERJOBNUMBER='" + serverOperationId + "'" ;
if ( "4" . equals ( DBType ) ) {
sqlTemp = "select t.ID,COALESCE(CONVERT(t.INTEGRATIONLISTID,CHAR),'') AS INTEGRATIONLISTID,COALESCE(CONVERT(t.INTEGRALROLLBACK,CHAR),'') AS INTEGRALROLLBACK,t.USERID from CAFTER_TABLE t where t.ORDERID = '" + orderId + "' AND t.USERJOBNUMBER='" + serverOperationId + "'" ;
}
List selectforlist = this . mapperI . selectforlist ( sqlTemp ) ;
if ( selectforlist . isEmpty ( ) ) {
ret = 2 ;
return ret ;
} else {
//判断订单是否已经取消过
Map < String , Object > o = ( Map < String , Object > ) selectforlist . get ( 0 ) ;
String integralIdRoll = PubTools . isEmpty ( o . get ( "INTEGRALROLLBACK" ) ) ? "" : o . get ( "INTEGRALROLLBACK" ) . toString ( ) ;
String userId = PubTools . isEmpty ( o . get ( "USERID" ) ) ? "" : o . get ( "USERID" ) . toString ( ) ;
//判断用户是否被锁定
String sqlUserTemp = "SELECT ut.CERTIFICATION FROM WEIXN_USER_TABLE ut WHERE ID=" + userId + "" ;
List userByOpenIdTemp = this . mapperI . selectforlist ( sqlUserTemp ) ;
if ( userByOpenIdTemp . isEmpty ( ) ) {
ret = 4 ;
return ret ;
} else {
Object obj = userByOpenIdTemp . get ( 0 ) ;
Map < String , Object > obj1 = ( Map < String , Object > ) obj ;
String certification = obj1 . get ( "CERTIFICATION" ) . toString ( ) ; //认证状态
if ( "5" . equals ( certification ) ) {
ret = 5 ;
return ret ;
}
}
if ( ! PubTools . isNull ( integralIdRoll ) ) {
ret = 3 ;
return ret ;
}
String openId = "" ;
//查询积分流水
String integralId = o . get ( "INTEGRATIONLISTID" ) . toString ( ) ;
String integralSql = "select " +
" ilt.ID,ilt.USERID ,ilt.ACARNO ,ilt.LASTINTEGRATION AS LASTINTEGRATION ,ilt.PAYTYPE,ilt.PAYINTEGRATION AS PAYINTEGRATION , " +
" ilt.RESTINTEGRATION AS RESTINTEGRATION,ilt.OGENABLEINTEGRATION AS OGENABLEINTEGRATION,ilt.CPENABLEINTEGRATION AS CPENABLEINTEGRATION " +
" from integration_list_table ilt where ilt.ID=" + integralId + " " ;
List selectforlistInt = this . mapperI . selectforlist ( integralSql ) ;
String rollbackTime = PubTools . getCurrentDate ( ) ;
if ( ! selectforlistInt . isEmpty ( ) ) {
Map < String , Object > oIntegral = ( Map < String , Object > ) selectforlistInt . get ( 0 ) ;
String userid = PubTools . isEmpty ( oIntegral . get ( "USERID" ) ) ? "" : oIntegral . get ( "USERID" ) . toString ( ) ;
String payType = PubTools . isEmpty ( oIntegral . get ( "PAYTYPE" ) ) ? "" : oIntegral . get ( "PAYTYPE" ) . toString ( ) ;
String aCarNo = PubTools . isEmpty ( oIntegral . get ( "ACARNO" ) ) ? "" : oIntegral . get ( "ACARNO" ) . toString ( ) ;
String payIntegral = PubTools . isEmpty ( oIntegral . get ( "PAYINTEGRATION" ) ) ? "0" : oIntegral . get ( "PAYINTEGRATION" ) . toString ( ) ;
String sqlMax = "select COALESCE(max(t.ID),0) AS ID from integration_list_table t" ;
List selectforlistMax = this . mapperI . selectforlist ( sqlMax ) ;
int maxId = 1 ;
if ( ! selectforlistMax . isEmpty ( ) ) {
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.ID=" + userid + "" ;
List userByOpenId = this . mapperI . selectforlist ( sqlUser ) ;
String ENABLEINTEGRATION = "0" ;
double OGENABLEINTEGRATION = 0.0 ;
double CPENABLEINTEGRATION = 0.0 ;
if ( ! userByOpenId . isEmpty ( ) ) {
Object obj = userByOpenId . get ( 0 ) ;
Map < String , Object > obj1 = ( Map < String , Object > ) obj ;
ENABLEINTEGRATION = obj1 . get ( "ENABLEINTEGRATION" ) . toString ( ) ; //用户可用公共积分
OGENABLEINTEGRATION = Double . parseDouble ( obj1 . get ( "OGENABLEINTEGRATION" ) . toString ( ) ) ; //用户可用加油、加气积分
CPENABLEINTEGRATION = Double . parseDouble ( obj1 . get ( "CPENABLEINTEGRATION" ) . toString ( ) ) ; //用户可用消费积分
}
if ( "FG" . equals ( payType ) | | "FP" . equals ( payType ) ) { //加油加气
OGENABLEINTEGRATION = PubTools . doubleSave1 ( OGENABLEINTEGRATION + Double . parseDouble ( payIntegral ) ) ;
} else { //消费
CPENABLEINTEGRATION = PubTools . doubleSave1 ( CPENABLEINTEGRATION + Double . parseDouble ( payIntegral ) ) ;
}
Map < String , Object > integralList = new HashMap < > ( ) ;
integralList . put ( "maxid" , ( maxId + 10 ) ) ;
integralList . put ( "userId" , userid ) ;
integralList . put ( "acarNo" , "" ) ;
integralList . put ( "lastintegration" , PubTools . doubleSave1 ( Double . parseDouble ( ENABLEINTEGRATION ) ) ) ;
integralList . put ( "payintegration" , PubTools . doubleSave1 ( Double . parseDouble ( payIntegral ) ) ) ;
integralList . put ( "restintegration" , PubTools . doubleSave1 ( ( Double . parseDouble ( ENABLEINTEGRATION ) + Double . parseDouble ( payIntegral ) ) ) ) ;
integralList . put ( "payTime" , rollbackTime ) ;
integralList . put ( "paytype" , "TK" ) ;
integralList . put ( "DBTYPE" , DBType ) ;
integralList . put ( "cpenableintegration" , PubTools . doubleSave1 ( CPENABLEINTEGRATION ) ) ;
integralList . put ( "ogenableintegration" , PubTools . doubleSave1 ( OGENABLEINTEGRATION ) ) ;
this . integrationListMapper . addIntegralList ( integralList ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
integralList . put ( "DBTYPEBAK" , bakDBType ) ;
this . integrationListMyMapper . addIntegralList ( integralList ) ;
}
LogUtil . WriteLog_Info ( "积分恢复=====流水记录已插入" , "QCodeInfoServiceImpl" ) ;
Map < String , Object > updateCafe = new HashMap < > ( ) ;
updateCafe . put ( "rollback" , "SUCCESS" ) ;
updateCafe . put ( "integralrollback" , ( maxId + 1 ) ) ;
updateCafe . put ( "rollbackTime" , rollbackTime ) ;
updateCafe . put ( "orderId" , orderId ) ;
updateCafe . put ( "serverOperationId" , serverOperationId ) ;
updateCafe . put ( "DBTYPE" , DBType ) ;
this . cafterTableMapper . updatecafter ( updateCafe ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
updateCafe . put ( "DBTYPEBAK" , bakDBType ) ;
this . cafterTableMyMapper . updatecafter ( updateCafe ) ;
}
LogUtil . WriteLog_Info ( "积分恢复=====消费记录已更新完成" , "QCodeInfoServiceImpl" ) ;
//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=" + userid + "" ;
List selectforlist1 = this . mapperI . selectforlist ( sql ) ;
double enabledIntegral = 0.0 ;
if ( ! selectforlist1 . isEmpty ( ) ) {
Object objT = selectforlist1 . get ( 0 ) ;
Map < String , Object > obj1T = ( Map < String , Object > ) objT ;
openId = obj1T . get ( "OPENID" ) . toString ( ) ;
double enabledT = Double . parseDouble ( obj1T . get ( "ENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bd = BigDecimal . valueOf ( enabledT + Double . parseDouble ( payIntegral ) ) ;
bd = bd . setScale ( 1 , RoundingMode . HALF_UP ) ;
double enabledTI = bd . doubleValue ( ) ;
double enabledTCp = Double . parseDouble ( obj1T . get ( "CPENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bdcp = BigDecimal . valueOf ( enabledTCp + Double . parseDouble ( payIntegral ) ) ;
bdcp = bdcp . setScale ( 1 , RoundingMode . HALF_UP ) ;
double enabledTICp = 0.0 ;
if ( "FC" . equals ( payType ) | | "FS" . equals ( payType ) ) {
enabledTICp = bdcp . doubleValue ( ) ;
enabledIntegral = enabledTICp ;
} else {
enabledTICp = enabledTCp ;
}
double enabledTOG = Double . parseDouble ( obj1T . get ( "OGENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bdco = BigDecimal . valueOf ( enabledTOG + Double . parseDouble ( payIntegral ) ) ;
bdco = bdco . setScale ( 1 , RoundingMode . HALF_UP ) ;
double enabledTIOG = 0.0 ;
if ( "FG" . equals ( payType ) | | "FP" . equals ( payType ) ) {
enabledTIOG = bdco . doubleValue ( ) ;
enabledIntegral = enabledTIOG ;
} else {
enabledTIOG = enabledTOG ;
}
/ * String sqlUpdate = "update WEIXN_USER_TABLE SET ENABLEINTEGRATION=" + enabledTI + ",CPENABLEINTEGRATION=" + enabledTICp + ",OGENABLEINTEGRATION=" + enabledTIOG + " " +
" where ID=" + userid ;
this . mapperI . update ( sqlUpdate ) ; * /
Map < String , Object > userParams = new HashMap < String , Object > ( ) ;
userParams . put ( "userId" , openId ) ;
userParams . put ( "enabledTI" , enabledTI ) ;
userParams . put ( "enabledTICp" , enabledTICp ) ;
userParams . put ( "enabledTIOG" , enabledTIOG ) ;
userParams . put ( "DBTYPE" , DBType ) ;
this . userTableMapper . updateUserById ( userParams ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
userParams . put ( "DBTYPEBAK" , bakDBType ) ;
this . userTableMyMapper . updateUserById ( userParams ) ;
}
LogUtil . WriteLog_Info ( "用户更新可用积分完成" , "QCodeInfoServiceImpl" ) ;
}
//发送消息
String integralTypePu = "" ;
if ( "FP" . equals ( payType ) ) {
integralTypePu = "加油(恢复积分)" ;
} else if ( "FG" . equals ( payType ) ) {
integralTypePu = "加气(恢复积分)" ;
} else if ( "FC" . equals ( payType ) ) {
integralTypePu = "餐饮(恢复积分)" ;
} else if ( "FS" . equals ( payType ) ) {
integralTypePu = "商超(恢复积分)" ;
}
this . messagePushServiceImpl . pushMsg ( openId , integralTypePu , "+" + PubTools . doubleSave1 ( Double . parseDouble ( payIntegral ) / 100 ) + "" , ( enabledIntegral / 100 ) + "" ) ;
}
}
return ret ;
}
public String getStatusByOrderId ( String orderId , String checkType ) {
String ret = "1" ; // -1 代表接口处理失败 1 处理成功 2 根据订单id未找到积分消费记录
try {
String sqlTemp = "select t.ID,t.ORDERID,COALESCE(t.INTEGRATIONLISTID,'') AS INTEGRATIONLISTID,COALESCE(t.INTEGRALROLLBACK,'') AS INTEGRALROLLBACK from CAFTER_TABLE t where t.ORDERID = '" + orderId + "' " ;
List selectforlist = this . mapperI . selectforlist ( sqlTemp ) ;
if ( selectforlist . size ( ) < 1 ) {
ret = "2" ;
return ret ;
} else {
Map < String , Object > o = ( Map < String , Object > ) selectforlist . get ( 0 ) ;
String integralId = o . get ( "INTEGRATIONLISTID" ) . toString ( ) ;
String integralrollbacklId = o . get ( "INTEGRALROLLBACK" ) . toString ( ) ;
if ( "TRIMINTEGRAL" . equals ( checkType ) ) { //积分核减结果
if ( PubTools . isNull ( integralId ) ) {
ret = "0" ;
}
} else if ( "ROLLBACK" . equals ( checkType ) ) { //退款结果
if ( PubTools . isNull ( integralrollbacklId ) ) {
ret = "0" ;
}
}
}
} catch ( Exception e ) {
LogUtil . WriteLog_Error ( "查询积分核减(退款)结果操作失败" , "QCodeInfoServiceImpl" ) ;
ret = "-1" ;
return ret ;
}
return ret ;
}
public List getIntegralListByServiceId ( String serverOperationId , String checkType , String payBeginTime , String payEndTime ) {
List ret = null ; // -1 代表接口处理失败 1 处理成功
try {
String sqlTemp = "SELECT\n" +
"\tct.ORDERID,\n" +
"\tct.USERJOBNUMBER,\n" +
"\tCOALESCE(TO_CHAR(ct.CAFTERTIME,'YYYY-MM-dd HH24:mi:ss'),'') AS CAFTERTIMEBAK,\n" +
"\t\tCOALESCE(TO_CHAR(ct.ROLLBACKTIME,'YYYY-MM-dd HH24:mi:ss'),'') AS ROLLBACKTIME,\n" +
"\t\tCOALESCE(TO_CHAR(ilt.PAYTIME,'YYYY-MM-dd HH24:mi:ss'),'') AS CAFTERTIME,\n" +
"\tROUND(ilt.PAYINTEGRATION/100,1) AS PAYINTEGRATION,\n" +
"\tilt.PAYTYPE,\n" +
"\tpt.TEXT AS PAYTYPENAME\n" +
"FROM\n" +
"\tCAFTER_TABLE ct,\n" +
"\tINTEGRATION_LIST_TABLE ilt,\n" +
" PEYTYPE_TEXT pt\t\n" +
"WHERE\n" +
"\t( ct.INTEGRATIONLISTID = ilt.ID OR ct.INTEGRALROLLBACK = ilt.ID ) \n" +
"\tAND ilt.PAYTYPE = pt.VALUE\n" +
"\tAND ct.USERJOBNUMBER = '" + serverOperationId + "'\n" ;
if ( "4" . equals ( DBType ) ) {
sqlTemp = "SELECT\n" +
"\tct.ORDERID,\n" +
"\tct.USERJOBNUMBER,\n" +
"\tCOALESCE(date_format(ct.CAFTERTIME, '%Y-%m-%d %H:%i:%s'),'') AS CAFTERTIMEBAK,\n" +
"\t\tCOALESCE(date_format(ct.ROLLBACKTIME,'%Y-%m-%d %H:%i:%s'),'') AS ROLLBACKTIME,\n" +
"\t\tCOALESCE(date_format(ilt.PAYTIME,'%Y-%m-%d %H:%i:%s'),'') AS CAFTERTIME,\n" +
"\tROUND(ilt.PAYINTEGRATION/100,1) AS PAYINTEGRATION,\n" +
"\tilt.PAYTYPE,\n" +
"\tpt.TEXT AS PAYTYPENAME\n" +
"FROM\n" +
"\tCAFTER_TABLE ct,\n" +
"\tINTEGRATION_LIST_TABLE ilt,\n" +
" PEYTYPE_TEXT pt\t\n" +
"WHERE\n" +
"\t( ct.INTEGRATIONLISTID = ilt.ID OR ct.INTEGRALROLLBACK = ilt.ID ) \n" +
"\tAND ilt.PAYTYPE = pt.VALUE\n" +
"\tAND ct.USERJOBNUMBER = '" + serverOperationId + "'\n" ;
}
if ( ! PubTools . isNull ( payBeginTime ) & & ! PubTools . isNull ( payEndTime ) ) {
if ( "2" . equals ( DBType ) ) {
sqlTemp + = " \tAND (\n" +
"\t\t (TO_CHAR( ct.CAFTERTIME, 'YYYY-MM-dd HH24:mi:ss' )>= '" + payBeginTime + "' AND TO_CHAR( ct.CAFTERTIME, 'YYYY-MM-dd HH24:mi:ss' )<= '" + payEndTime + "')\n" +
"\t\tOR (TO_CHAR( ct.ROLLBACKTIME, 'YYYY-MM-dd HH24:mi:ss' ) >= '" + payBeginTime + "' AND TO_CHAR( ct.ROLLBACKTIME, 'YYYY-MM-dd HH24:mi:ss' )<= '" + payEndTime + "')\n" +
"\t) " ;
} else if ( "4" . equals ( DBType ) ) {
sqlTemp + = " \tAND (\n" +
"\t\t (date_format( ct.CAFTERTIME, '%Y-%m-%d %H:%i:%s' )>= '" + payBeginTime + "' AND date_format( ct.CAFTERTIME, '%Y-%m-%d %H:%i:%s' )<= '" + payEndTime + "')\n" +
"\t\tOR (date_format( ct.ROLLBACKTIME, '%Y-%m-%d %H:%i:%s' ) >= '" + payBeginTime + "' AND date_format( ct.ROLLBACKTIME, '%Y-%m-%d %H:%i:%s' )<= '" + payEndTime + "')\n" +
"\t) " ;
} else { }
} else if ( ! PubTools . isNull ( payBeginTime ) & & PubTools . isNull ( payEndTime ) ) {
if ( "2" . equals ( DBType ) ) {
sqlTemp + = "\tAND (\n" +
"\t\t TO_CHAR( ct.CAFTERTIME, 'YYYY-MM-dd HH24:mi:ss' )>= '" + payBeginTime + "' \n" +
"\t\tOR TO_CHAR( ct.ROLLBACKTIME, 'YYYY-MM-dd HH24:mi:ss' ) >= '" + payBeginTime + "' \n" +
"\t)" ;
} else if ( "4" . equals ( DBType ) ) {
sqlTemp + = "\tAND (\n" +
"\t\t date_format( ct.CAFTERTIME, '%Y-%m-%d %H:%i:%s' )>= '" + payBeginTime + "' \n" +
"\t\tOR date_format( ct.ROLLBACKTIME, '%Y-%m-%d %H:%i:%s' ) >= '" + payBeginTime + "' \n" +
"\t)" ;
} else {
}
} else if ( PubTools . isNull ( payBeginTime ) & & ! PubTools . isNull ( payEndTime ) ) {
if ( "2" . equals ( DBType ) ) {
sqlTemp + = "AND (\n" +
"\t\tTO_CHAR( ct.CAFTERTIME, 'YYYY-MM-dd HH24:mi:ss' )<= '" + payEndTime + "'\n" +
"\t\tOR TO_CHAR( ct.ROLLBACKTIME, 'YYYY-MM-dd HH24:mi:ss' )<= '" + payEndTime + "'\n" +
"\t) " ;
} else if ( "4" . equals ( DBType ) ) {
sqlTemp + = "AND (\n" +
"\t\tdate_format( ct.CAFTERTIME, '%Y-%m-%d %H:%i:%s' )<= '" + payEndTime + "'\n" +
"\t\tOR date_format( ct.ROLLBACKTIME, '%Y-%m-%d %H:%i:%s' )<= '" + payEndTime + "'\n" +
"\t) " ;
} else {
}
} else {
}
if ( ! PubTools . isNull ( checkType ) ) {
if ( "TK" . equals ( checkType ) ) {
sqlTemp + = " AND ilt.PAYTYPE='TK' " ;
} else {
sqlTemp + = " AND substr(ilt.PAYTYPE,1,1)='F' " ;
}
}
sqlTemp + = " order by ct.CAFTERTIME,ct.ROLLBACKTIME" ;
ret = this . mapperI . selectforlist ( sqlTemp ) ;
} catch ( Exception e ) {
LogUtil . WriteLog_Error ( "根据商户查询积分明细失败" , "QCodeInfoServiceImpl" ) ;
ret = null ;
return ret ;
}
return ret ;
}
public List getIntegralTotalByServiceId ( String serverOperationId ) {
List ret = null ; // -1 代表接口处理失败 1 处理成功
try {
String sqlTemp = "SELECT\n" +
"\tCOALESCE(ROUND(sum(ilt.PAYINTEGRATION)/100,1),0) AS PAYINTEGRATION\n" +
"FROM\n" +
"\tCAFTER_TABLE ct,\n" +
"\tINTEGRATION_LIST_TABLE ilt,\n" +
"\tSERVICE_AREA_OPERATORS_TABLE soat,\n" +
" PEYTYPE_TEXT pt\t\n" +
"WHERE\n" +
"\t( ct.INTEGRATIONLISTID = ilt.ID OR ct.INTEGRALROLLBACK = ilt.ID ) \n" +
"\tAND ilt.PAYTYPE = pt.VALUE\n" +
"\tAND ct.USERJOBNUMBER = soat.JOBNUMBER\n" +
"\tAND ct.USERJOBNUMBER = '" + serverOperationId + "' AND (ct.INTEGRALROLLBACK is null or ct.INTEGRALROLLBACK ='') group by ct.USERJOBNUMBER" ;
ret = this . mapperI . selectforlist ( sqlTemp ) ;
} catch ( Exception e ) {
LogUtil . WriteLog_Error ( "根据商户查询总积分失败" , "QCodeInfoServiceImpl" ) ;
ret = null ;
return ret ;
}
return ret ;
}
public String hexToString ( String hexStr ) {
String [ ] split = hexStr . replace ( "|" , "," ) . split ( "," ) ;
Long dataStr = Long . valueOf ( split [ 0 ] , 16 ) ;
BigInteger bigint = new BigInteger ( split [ 1 ] , 16 ) ;
int series = bigint . intValue ( ) ;
BigInteger bigint2 = new BigInteger ( split [ 2 ] , 16 ) ;
int rebateInteger = bigint2 . intValue ( ) ;
BigInteger bigint3 = new BigInteger ( split [ 3 ] , 16 ) ;
int checkStr = bigint3 . intValue ( ) ;
return dataStr + "|" + series + "|" + rebateInteger + "|" + checkStr ;
}
/ * *
*
* @param content 二 维 码 流 水 号
* @param serverOperationId 商 超 用 户 ID
* @param payMoney 实 际 支 付 金 额
* @return
* /
@Transactional ( value = "jtatransactionManager" , timeout = 100 )
public JSONObject solveQcodeRedis ( String content , String serverOperationId , String orderId , Double payMoney , Double discountMoneyBefore , Double discountMoney ) {
String ret = "-2" ; // -1 代表接口处理失败 1 处理成功 2 用户不存在 3 兑换积分大于用户可用积分 4 二维码信息过期 5 商户不存在 6 积分类型与消费方式不匹配 7 商户角色未设置 8 用户已冻结 9 折扣金额与消费积分不一致 10 请重新生成二维码 11 订单中商户与核销中的商户不匹配 12 订单已核销
JSONObject retJo = new JSONObject ( ) ;
String openId = "" ;
LogUtil . WriteLog_Info ( "积分核减操作开始=====" + PubTools . getCurrentDate ( ) + "=======params==={content:" + content + ",serverOperationId:" + serverOperationId + ",discountMoney:" + discountMoney + "}" , "QCodeInfoServiceImpl" ) ;
//查询金额与积分的兑换比例
String sqlTemp = "select t.VALUE/100 AS VALUE ,t.EVERYMONEY/100 AS EVERYMONEY from PAY_INTEGRATION_NUMBER_TABLE t where t.TYPE='@TYPE@'" ;
String rollbackTime = PubTools . getCurrentDate ( ) ;
Object content1 = Consistant . map . get ( content ) ;
if ( PubTools . isEmpty ( content1 ) ) {
content1 = redisConfigUtil . getIntegral ( content ) ;
}
if ( content1 ! = null & & ! "-1" . equals ( content1 . toString ( ) ) ) {
JSONObject joMap = null ;
if ( content1 instanceof JSONObject ) {
joMap = ( JSONObject ) content1 ;
} else if ( content1 instanceof String ) {
joMap = JSONObject . parseObject ( content1 . toString ( ) ) ;
}
if ( joMap = = null ) {
ret = "4" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
openId = PubTools . isEmpty ( joMap . get ( "openId" ) ) ? "" : joMap . get ( "openId" ) . toString ( ) ;
String integrateTypeParam = PubTools . isEmpty ( joMap . get ( "integrateType" ) ) ? "" : joMap . get ( "integrateType" ) . toString ( ) ;
String rebateIntegrate = PubTools . isEmpty ( joMap . get ( "rebateIntegrate" ) ) ? "" : joMap . get ( "rebateIntegrate" ) . toString ( ) ;
String createTime = PubTools . isEmpty ( joMap . get ( "createTime" ) ) ? "" : joMap . get ( "createTime" ) . toString ( ) ;
Long s = PubTools . dateDiff ( createTime , rollbackTime , "S" ) ;
LogUtil . WriteLog_Info ( "二维码生成时间长度=====" + s , "QCodeInfoServiceImpl" ) ;
retJo . put ( "openId" , openId ) ;
String integrateType = "" ;
String enabledIntegral = "" ;
int userIdNew = 0 ;
//校验用户状态
List userByOpenId = userTableService . getUserByOpenId ( openId ) ;
Object obj = userByOpenId . get ( 0 ) ;
Map < String , Object > obj1 = ( Map < String , Object > ) obj ;
String certification = obj1 . get ( "CERTIFICATION" ) . toString ( ) ; //认证状态
if ( userByOpenId . isEmpty ( ) ) {
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
Long l = redisConfigUtil . delIntegral ( content ) ;
ret = "2" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
if ( "5" . equals ( certification ) ) {
ret = "8" ;
retJo . put ( "ret" , ret ) ;
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
Long l = redisConfigUtil . delIntegral ( content ) ;
return retJo ;
}
//先查询商户角色
String serviceRole = "" ;
String inputMoney = "" ; //是否需要商户端输入金额
String serivceOperatorRole = "SELECT saot.ID,saot.USERNAME,saot.ROLEID,saot.SERVICEAREAID,saoc.INPUTMENEY FROM SERVICE_AREA_OPERATORS_TABLE saot,SERVICE_AREA_OPERATORS_COMPANY_TEXT saoc " +
" WHERE saoc.ID = saot.COMPANYID AND saot.JOBNUMBER='" + serverOperationId + "'" ;
List serviceOperatorList = this . mapperI . selectforlist ( serivceOperatorRole ) ;
if ( serviceOperatorList . isEmpty ( ) ) { //商户不存在
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
ret = "5" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
boolean isCheckDiscountMoney = false ;
if ( ! userByOpenId . isEmpty ( ) ) {
String ENABLEINTEGRATION = obj1 . get ( "ENABLEINTEGRATION" ) . toString ( ) ; //用户可用公共积分
String OGENABLEINTEGRATION = obj1 . get ( "OGENABLEINTEGRATION" ) . toString ( ) ; //加油、加气可用积分
String CPENABLEINTEGRATION = obj1 . get ( "CPENABLEINTEGRATION" ) . toString ( ) ; //餐饮、消费可用积分
userIdNew = Integer . parseInt ( obj1 . get ( "ID" ) . toString ( ) ) ; //人员id
if ( s > 30 ) {
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
Long l = redisConfigUtil . delIntegral ( content ) ;
ret = "4" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
//核验商户角色与积分消费类型是否匹配
if ( ! serviceOperatorList . isEmpty ( ) ) {
//校验用户与角色出示二维码积分消费类型是否匹配
Map < String , Object > mapServiceOperator = ( Map < String , Object > ) serviceOperatorList . get ( 0 ) ;
serviceRole = mapServiceOperator . get ( "ROLEID" ) . toString ( ) ;
/* serviceAreaId = mapServiceOperator.get("SERVICEAREAID").toString();*/
inputMoney = mapServiceOperator . get ( "INPUTMENEY" ) . toString ( ) ;
}
if ( "1" . equals ( inputMoney ) ) {
isCheckDiscountMoney = true ;
}
//根据商户角色判断消费类型
if ( PubTools . isNull ( serviceRole ) ) {
LogUtil . WriteLog_Info ( "商户角色未设置" , "QCodeInfoServiceImpl" ) ;
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
Long l = redisConfigUtil . delIntegral ( content ) ;
ret = "7" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
} else {
if ( "3" . equals ( serviceRole ) | | "1" . equals ( serviceRole ) ) { //加油加气
if ( ! "FPG" . equals ( integrateTypeParam ) ) {
ret = "6" ;
retJo . put ( "ret" , ret ) ;
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
return retJo ;
}
}
if ( "2" . equals ( serviceRole ) | | "4" . equals ( serviceRole ) ) { //餐饮、商超
if ( ! "FCS" . equals ( integrateTypeParam ) & & ! "FCA" . equals ( integrateTypeParam ) ) {
ret = "6" ;
retJo . put ( "ret" , ret ) ;
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
return retJo ;
}
}
if ( "1" . equals ( serviceRole ) ) {
integrateType = "FP" ;
} else if ( "2" . equals ( serviceRole ) ) {
integrateType = "FC" ;
} else if ( "3" . equals ( serviceRole ) ) {
integrateType = "FG" ;
} else if ( "4" . equals ( serviceRole ) ) {
integrateType = "FS" ;
} else {
}
}
//查询用户累积获取的总积分
double rebateIntegrateSave = 0.0 ;
switch ( integrateType ) {
case "FP" : //加油
retJo . put ( "ENABLEINTEGRATIONBEFORE" , PubTools . doubleSave1 ( Double . parseDouble ( OGENABLEINTEGRATION ) ) ) ;
String sqlFp = sqlTemp . replace ( "@TYPE@" , integrateType ) ;
List selectforlist = this . mapperI . selectforlist ( sqlFp ) ;
//判断兑换积分是否够本次折扣
int rebateIn = 1 ;
if ( ! selectforlist . isEmpty ( ) ) {
Map < String , Object > o = ( Map < String , Object > ) selectforlist . get ( 0 ) ;
BigDecimal bd = BigDecimal . valueOf ( Double . parseDouble ( o . get ( "VALUE" ) . toString ( ) ) ) ;
bd = bd . setScale ( 1 , BigDecimal . ROUND_HALF_UP ) ;
rebateIn = bd . intValue ( ) ;
}
//根据折扣金额计算积分
Double rebateIntegrateI = Double . parseDouble ( rebateIntegrate ) ;
Double rebateIntegrateIZK = PubTools . doubleSave1 ( discountMoney * rebateIn ) ;
if ( isCheckDiscountMoney ) {
if ( ( rebateIntegrateIZK - rebateIntegrateI ) ! = 0 ) {
ret = "9" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateI ) ;
retJo . put ( "discountMoney" , rebateIntegrateIZK ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
}
double enabledInteg = Double . parseDouble ( OGENABLEINTEGRATION ) ;
if ( rebateIntegrateI > enabledInteg ) {
ret = "3" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateI ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
} else {
rebateIntegrateSave = rebateIntegrateI ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateI ) ;
}
break ;
case "FG" : //加气
retJo . put ( "ENABLEINTEGRATIONBEFORE" , PubTools . doubleSave1 ( Double . parseDouble ( OGENABLEINTEGRATION ) ) ) ;
String sqlFg = sqlTemp . replace ( "@TYPE@" , integrateType ) ;
List selectforlistFg = this . mapperI . selectforlist ( sqlFg ) ;
//判断兑换积分是否够本次折扣
int rebateInFg = 1 ;
if ( ! selectforlistFg . isEmpty ( ) ) {
Map < String , Object > o = ( Map < String , Object > ) selectforlistFg . get ( 0 ) ;
BigDecimal bd = BigDecimal . valueOf ( Double . parseDouble ( o . get ( "VALUE" ) . toString ( ) ) ) ;
bd = bd . setScale ( 1 , BigDecimal . ROUND_HALF_UP ) ;
rebateInFg = bd . intValue ( ) ;
}
//根据折扣金额计算积分
Double rebateIntegrateIFgZk = PubTools . doubleSave1 ( discountMoney * rebateInFg ) ;
Double rebateIntegrateIFg = Double . parseDouble ( rebateIntegrate ) ;
//折扣金额与输入的积分是否一致
if ( isCheckDiscountMoney ) {
if ( ( rebateIntegrateIFgZk - rebateIntegrateIFg ) ! = 0 ) {
ret = "9" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFg ) ;
retJo . put ( "discountMoney" , rebateIntegrateIFgZk ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
}
double enabledIntegFg = Double . parseDouble ( OGENABLEINTEGRATION ) ;
if ( rebateIntegrateIFg > enabledIntegFg ) {
ret = "3" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFg ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
} else {
rebateIntegrateSave = rebateIntegrateIFg ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFg ) ;
}
break ;
case "FC" : //餐饮
retJo . put ( "ENABLEINTEGRATIONBEFORE" , PubTools . doubleSave1 ( Double . parseDouble ( CPENABLEINTEGRATION ) ) ) ;
String sqlFc = sqlTemp . replace ( "@TYPE@" , integrateType ) ;
List selectforlistFc = this . mapperI . selectforlist ( sqlFc ) ;
//判断兑换积分是否够本次折扣
int rebateInFc = 1 ;
if ( selectforlistFc . size ( ) > 0 ) {
Map < String , Object > o = ( Map < String , Object > ) selectforlistFc . get ( 0 ) ;
BigDecimal bd = BigDecimal . valueOf ( Double . parseDouble ( o . get ( "VALUE" ) . toString ( ) ) ) ;
bd = bd . setScale ( 1 , BigDecimal . ROUND_HALF_UP ) ;
rebateInFc = bd . intValue ( ) ;
}
//根据折扣金额计算积分
Double rebateIntegrateIFcZK = discountMoney * rebateInFc ;
Double rebateIntegrateIFc = Double . parseDouble ( rebateIntegrate ) ;
if ( isCheckDiscountMoney ) {
if ( ( rebateIntegrateIFcZK - rebateIntegrateIFc ) ! = 0 ) {
ret = "9" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFc ) ;
retJo . put ( "discountMoney" , rebateIntegrateIFcZK ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
}
double enabledIntegFc = Double . parseDouble ( CPENABLEINTEGRATION ) ;
if ( rebateIntegrateIFc > enabledIntegFc ) {
ret = "3" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFc ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
} else {
//进行积分核减
rebateIntegrateSave = rebateIntegrateIFc ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFc ) ;
}
break ;
case "FS" : //消费
retJo . put ( "ENABLEINTEGRATIONBEFORE" , PubTools . doubleSave1 ( Double . parseDouble ( CPENABLEINTEGRATION ) ) ) ;
String sqlFs = sqlTemp . replace ( "@TYPE@" , integrateType ) ;
List selectforlistFs = this . mapperI . selectforlist ( sqlFs ) ;
//判断兑换积分是否够本次折扣
int rebateInFs = 1 ;
if ( selectforlistFs . size ( ) > 0 ) {
Map < String , Object > o = ( Map < String , Object > ) selectforlistFs . get ( 0 ) ;
BigDecimal bd = BigDecimal . valueOf ( Double . parseDouble ( o . get ( "VALUE" ) . toString ( ) ) ) ;
bd = bd . setScale ( 1 , BigDecimal . ROUND_HALF_UP ) ;
rebateInFs = bd . intValue ( ) ;
}
//根据折扣金额计算积分
Double rebateIntegrateIFsZK = discountMoney * rebateInFs ;
Double rebateIntegrateIFs = Double . parseDouble ( rebateIntegrate ) ;
if ( isCheckDiscountMoney ) {
if ( ( rebateIntegrateIFsZK - rebateIntegrateIFs ) ! = 0 ) {
ret = "9" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFs ) ;
retJo . put ( "discountMoney" , rebateIntegrateIFsZK ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
}
double enabledIntegFs = Double . parseDouble ( CPENABLEINTEGRATION ) ;
if ( rebateIntegrateIFs > enabledIntegFs ) {
ret = "3" ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFs ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
} else {
//进行积分核减
rebateIntegrateSave = rebateIntegrateIFs ;
retJo . put ( "PAYINTEGRAL" , rebateIntegrateIFs ) ;
}
break ;
default :
break ;
}
//进行积分核减
//1、积分流水记录新加
String sqlMax = "select COALESCE(max(ID),0) AS ID from integration_list_table" ;
List selectforlistMax = this . mapperI . selectforlist ( sqlMax ) ;
//判断兑换积分是否够本次折扣
int maxId = 1 ;
if ( ! selectforlistMax . isEmpty ( ) ) {
Map < String , Object > o = ( Map < String , Object > ) selectforlistMax . get ( 0 ) ;
maxId = Integer . parseInt ( o . get ( "ID" ) . toString ( ) ) ;
}
Map < String , Object > integralList = new HashMap < > ( ) ;
integralList . put ( "maxid" , ( maxId + 10 ) ) ;
integralList . put ( "userId" , userIdNew ) ;
integralList . put ( "acarNo" , "" ) ;
integralList . put ( "lastintegration" , PubTools . doubleSave1 ( Double . parseDouble ( ENABLEINTEGRATION ) * 100 ) ) ;
integralList . put ( "payintegration" , PubTools . doubleSave1 ( rebateIntegrateSave * 100 ) ) ;
integralList . put ( "restintegration" , PubTools . doubleSave1 ( ( ( Double . parseDouble ( ENABLEINTEGRATION ) - rebateIntegrateSave ) * 100 ) ) ) ;
integralList . put ( "payTime" , rollbackTime ) ;
integralList . put ( "paytype" , integrateType ) ;
integralList . put ( "DBTYPE" , DBType ) ;
if ( "FP" . equals ( integrateType ) | | "FG" . equals ( integrateType ) ) {
integralList . put ( "cpenableintegration" , PubTools . doubleSave1 ( ( ( Double . parseDouble ( OGENABLEINTEGRATION ) - rebateIntegrateSave ) * 100 ) ) ) ;
integralList . put ( "ogenableintegration" , PubTools . doubleSave1 ( Double . parseDouble ( CPENABLEINTEGRATION ) * 100 ) ) ;
} else if ( "FC" . equals ( integrateType ) | | "FS" . equals ( integrateType ) ) {
integralList . put ( "cpenableintegration" , PubTools . doubleSave1 ( ( ( Double . parseDouble ( OGENABLEINTEGRATION ) ) * 100 ) ) ) ;
integralList . put ( "ogenableintegration" , PubTools . doubleSave1 ( ( Double . parseDouble ( CPENABLEINTEGRATION ) - rebateIntegrateSave ) * 100 ) ) ;
}
this . integrationListMapper . addIntegralList ( integralList ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
integralList . put ( "DBTYPEBAK" , bakDBType ) ;
this . integrationListMyMapper . addIntegralList ( integralList ) ;
}
LogUtil . WriteLog_Info ( "积分核减=====积分流水已插入" , "QCodeInfoServiceImpl" ) ;
//2、新加一条消费记录
String maxIdCafeSql = "select COALESCE(max(t.ID),0)+1 as ID from CAFTER_TABLE t" ;
List maxIdCafeSqlMax = this . mapperI . selectforlist ( maxIdCafeSql ) ;
//判断兑换积分是否够本次折扣
int maxIdCafe = 1 ;
if ( ! maxIdCafeSqlMax . isEmpty ( ) ) {
Map < String , Object > o = ( Map < String , Object > ) maxIdCafeSqlMax . get ( 0 ) ;
maxIdCafe = Integer . parseInt ( o . get ( "ID" ) . toString ( ) ) ;
}
Map < String , Object > cafetparam = new HashMap < > ( ) ;
cafetparam . put ( "maxId" , maxIdCafe ) ;
cafetparam . put ( "acarNo" , "" ) ;
cafetparam . put ( "userId" , userIdNew ) ;
cafetparam . put ( "cafterTime" , rollbackTime ) ;
cafetparam . put ( "userJobnumber" , serverOperationId ) ;
cafetparam . put ( "trimintegral" , "SUCCESS" ) ;
cafetparam . put ( "integrationListId" , ( maxId + 10 ) ) ;
cafetparam . put ( "orderId" , orderId ) ;
cafetparam . put ( "content" , content ) ;
cafetparam . put ( "DBTYPE" , DBType ) ;
this . cafterTableMapper . addcafter ( cafetparam ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
cafetparam . put ( "DBTYPEBAK" , bakDBType ) ;
this . cafterTableMyMapper . addcafter ( cafetparam ) ;
}
LogUtil . WriteLog_Info ( "积分核减=====消费记录已插入" , "QCodeInfoServiceImpl" ) ;
//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.OPENID='" + openId + "'" ;
List selectforlist1 = this . mapperI . selectforlist ( sql ) ;
if ( ! selectforlist1 . isEmpty ( ) ) {
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 - rebateIntegrateSave * 100 ) ;
bd = bd . setScale ( 1 , RoundingMode . HALF_UP ) ;
double enabledTI = bd . doubleValue ( ) ;
double enabledTCp = Double . parseDouble ( obj1T . get ( "CPENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bdcp = BigDecimal . valueOf ( enabledTCp - rebateIntegrateSave * 100 ) ;
bdcp = bdcp . setScale ( 1 , RoundingMode . HALF_UP ) ;
double enabledTICp = bdcp . doubleValue ( ) ;
double enabledTPG = Double . parseDouble ( obj1T . get ( "OGENABLEINTEGRATION" ) . toString ( ) ) ;
BigDecimal bdcpPG = BigDecimal . valueOf ( enabledTPG - rebateIntegrateSave * 100 ) ;
BigDecimal bdcpPg = bdcpPG . setScale ( 1 , RoundingMode . HALF_UP ) ;
double enabledTIPG = bdcpPg . doubleValue ( ) ;
Map < String , Object > userParams = new HashMap < String , Object > ( ) ;
userParams . put ( "userId" , openId ) ;
userParams . put ( "enabledTI" , enabledTI ) ;
if ( "FP" . equals ( integrateType ) | | "FG" . equals ( integrateType ) ) {
userParams . put ( "enabledTIPG" , enabledTIPG ) ;
enabledIntegral = PubTools . doubleSave1 ( enabledTIPG / 100 ) + "" ;
retJo . put ( "ENABLEINTEGRATION" , enabledIntegral ) ;
} else if ( "FC" . equals ( integrateType ) | | "FS" . equals ( integrateType ) ) {
userParams . put ( "enabledTICp" , enabledTICp ) ;
enabledIntegral = PubTools . doubleSave1 ( enabledTICp / 100 ) + "" ;
retJo . put ( "ENABLEINTEGRATION" , enabledIntegral ) ;
} else {
}
userParams . put ( "DBTYPE" , DBType ) ;
this . userTableMapper . updateUserById ( userParams ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
userParams . put ( "DBTYPEBAK" , bakDBType ) ;
this . userTableMyMapper . updateUserById ( userParams ) ;
}
LogUtil . WriteLog_Info ( "用户更新可用积分完成" , "QCodeInfoServiceImpl" ) ;
}
Object contentNew = Consistant . map . get ( content ) ;
if ( ! PubTools . isEmpty ( contentNew ) ) {
Consistant . map . remove ( content ) ;
}
Long l = redisConfigUtil . delIntegral ( content ) ;
//发送消息
String integralTypePu = "" ;
if ( "FP" . equals ( integrateType ) ) {
integralTypePu = "加油" ;
} else if ( "FG" . equals ( integrateType ) ) {
integralTypePu = "加气" ;
} else if ( "FC" . equals ( integrateType ) ) {
integralTypePu = "餐饮" ;
} else if ( "FS" . equals ( integrateType ) ) {
integralTypePu = "商超" ;
}
this . messagePushServiceImpl . pushMsg ( openId , integralTypePu , "-" + rebateIntegrateSave , enabledIntegral ) ;
}
//积分核减成功
} else {
if ( ! content . contains ( "|" ) ) {
//需要判断是否是餐饮预约
String appointMentSql = "select t.ID,t.SERVICEOPERATIONID,tt.JOBNUMBER,t.COMPLETESTATUS,wut.OPENID from APPOINTMENT_INFO_TABLE t,SERVICE_AREA_OPERATORS_TABLE tt,WEIXN_USER_TABLE wut where wut.ID=t.USERID AND t.SERVICEOPERATIONID = tt.ID AND t.ORDERID='" + content + "'" ;
List appointMentList = this . mapperI . selectforlist ( appointMentSql ) ;
if ( appointMentList ! = null & & appointMentList . size ( ) > 0 ) {
Map < String , Object > appointment = ( Map < String , Object > ) appointMentList . get ( 0 ) ;
String appomintJob = appointment . get ( "JOBNUMBER" ) . toString ( ) ;
String completeStatus = appointment . get ( "COMPLETESTATUS" ) . toString ( ) ;
openId = appointment . get ( "OPENID" ) . toString ( ) ;
if ( "Y" . equals ( completeStatus ) ) {
if ( ! appomintJob . equals ( serverOperationId ) ) { //数据已核销
ret = "12" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
}
if ( ! appomintJob . equals ( serverOperationId ) ) { //说明订单中商户与核销的商户不符
ret = "11" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
//先查询商户角色
String serivceOperatorRole = "SELECT saot.ID,saot.USERNAME,saot.ROLEID,saot.SERVICEAREAID,saoc.INPUTMENEY FROM SERVICE_AREA_OPERATORS_TABLE saot,SERVICE_AREA_OPERATORS_COMPANY_TEXT saoc " +
" WHERE saoc.ID = saot.COMPANYID AND saot.JOBNUMBER='" + serverOperationId + "'" ;
List serviceOperatorList = this . mapperI . selectforlist ( serivceOperatorRole ) ;
if ( serviceOperatorList . isEmpty ( ) ) { //商户不存在
ret = "5" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
//如果是餐饮预约, 则直接改了状态即可
Map < String , Object > updateCafe = new HashMap < > ( ) ;
updateCafe . put ( "completeStatus" , "Y" ) ;
updateCafe . put ( "orderId" , content ) ;
this . appointmentInfoMapper . updateConpleteStatus ( updateCafe ) ;
if ( "Y" . equals ( PropertiesUtil . getValue ( "BAKEnabled" ) ) ) {
String bakDBType = PropertiesUtil . getValue ( "BakDBType" ) ;
updateCafe . put ( "DBTYPEBAK" , bakDBType ) ;
this . appointmentInfoMyMapper . updateConpleteStatus ( updateCafe ) ;
}
LogUtil . WriteLog_Info ( "积分核减=====修改预约记录为已核销" , "QCodeInfoServiceImpl" ) ;
ret = "1" ;
retJo . put ( "openId" , openId ) ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
} else {
ret = "4" ;
retJo . put ( "ret" , ret ) ;
return retJo ;
}
}
retJo . put ( "ret" , ret ) ;
return retJo ;
}
}