package com.poteviohealth.cgp.integration.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.poteviohealth.cgp.common.filter.MiniJwtVO; import com.poteviohealth.cgp.common.filter.TokenContext; import com.poteviohealth.cgp.common.integrated.customer.model.CustomerIntegration; import com.poteviohealth.cgp.common.model.CommonPage; import com.poteviohealth.cgp.common.model.PageQuery; import com.poteviohealth.cgp.common.model.VaultsResponse; import com.poteviohealth.cgp.common.service.impl.BaseServiceImpl; import com.poteviohealth.cgp.common.utils.CgpTool; import com.poteviohealth.cgp.integration.mapper.IntegralDetailMapper; import com.poteviohealth.cgp.integration.mapstruct.IntegralConverter; import com.poteviohealth.cgp.integration.model.IntegralDetail; import com.poteviohealth.cgp.integration.model.invo.web.IntegralDetailWebInDTO; import com.poteviohealth.cgp.integration.model.outvo.app.IntegrationDetailOutDTO; import com.poteviohealth.cgp.integration.model.outvo.web.IntegralDetailWebOutDTO; import com.poteviohealth.cgp.integration.service.IIntegralDetailService; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.core.io.ClassPathResource; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.Properties; /** * @PackageName:com.poteviohealth.cgp.integration.service.impl * @className:IntegralDetailServiceImpl * @Description: * @author: QIN * @date: 2020/9/1 15:46 */ @Service @Log4j2 public class IntegralDetailServiceImpl extends BaseServiceImpl implements IIntegralDetailService { @Override @Transactional(rollbackFor = Exception.class) public VaultsResponse createTable(Connection conn, Integer mark) { //获取yml配置文件 StringBuilder stringBuilder = new StringBuilder(); try { YamlPropertiesFactoryBean yamlMapFactoryBean = new YamlPropertiesFactoryBean(); yamlMapFactoryBean.setResources(new ClassPathResource("integration-sql.yml")); Properties properties = yamlMapFactoryBean.getObject(); properties.forEach((k, v) -> { //获取执行次数 String tableName = k.toString().substring(0,k.toString().lastIndexOf('_')+1); tableName+= mark.toString(); //执行替换 String sql = v.toString().replace("$", mark.toString()); Statement statement = null; try { statement = conn.createStatement(); //执行创建表 statement.executeUpdate("DROP TABLE IF EXISTS `"+tableName+"`"); statement.executeUpdate(sql); } catch (SQLException e) { log.error("{createTable}创建表[" + k + "]时异常;"); stringBuilder.append("创建表[" + k + "]时异常;"); //break; } finally { if (statement != null) { try { statement.close(); } catch (SQLException e) { log.error("close statement error", e); } } } }); if (stringBuilder.length() == 0) { return VaultsResponse.success(); } } catch (Exception e) { log.error("创建表失败", e); return VaultsResponse.failed(stringBuilder.toString()); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { log.error("close connection error", e); } } return VaultsResponse.success(); } @Override public VaultsResponse> selectPage(IntegralDetailWebInDTO integralDetailWebInDTO) { CommonPage pageOrder = selectOrderIPage(integralDetailWebInDTO); return VaultsResponse.success(IntegralConverter.INSTANCE.model2WebDTO(pageOrder)); } @Override public VaultsResponse> selectPage(PageQuery pageQuery) { IntegralDetailWebInDTO integralDetailWebInDTO = new IntegralDetailWebInDTO(); integralDetailWebInDTO.setCustomerId(TokenContext.cureMiniUser().getCustomerId()); integralDetailWebInDTO.setPageSize(pageQuery.getPageSize()); integralDetailWebInDTO.setPageNum(pageQuery.getPageNum()); CommonPage pageOrder = selectOrderIPage(integralDetailWebInDTO); return VaultsResponse.success(IntegralConverter.INSTANCE.model2AppDTO(pageOrder)); } @Override @Transactional(rollbackFor = Exception.class) public VaultsResponse saveDetail(List customerIntegration) { List list = IntegralConverter.INSTANCE.model2FeginDTO(customerIntegration); for (IntegralDetail detail : list) { createOperator(detail.getOperatorId()); detail.setIntegralDetailId(CgpTool.generateKey()); super.save(detail); } return VaultsResponse.success(); } private CommonPage selectOrderIPage(IntegralDetailWebInDTO integralDetailWebInDTO) { IPage page = new Page<>(integralDetailWebInDTO.getPageNum(), integralDetailWebInDTO.getPageSize()); QueryWrapper orderQueryWrapper = new QueryWrapper<>(); orderQueryWrapper.eq("customer_id",integralDetailWebInDTO.getCustomerId()); if (null != integralDetailWebInDTO.getStartDate()) { orderQueryWrapper.ge("created_date", integralDetailWebInDTO.getStartDate()); } if (null != integralDetailWebInDTO.getEndDate()) { orderQueryWrapper.le("created_date", integralDetailWebInDTO.getEndDate()); } orderQueryWrapper.orderByDesc("created_date"); return super.commonPage(page, orderQueryWrapper); } private void createOperator(Integer operatorId){ MiniJwtVO jwtVO = new MiniJwtVO(); jwtVO.setOperatorId(operatorId); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(jwtVO, null, null); SecurityContextHolder.getContext().setAuthentication(authentication); } }