package com.java110.common.dao.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.java110.common.dao.ICarInoutServiceDao;
|
import com.java110.core.base.dao.BaseServiceDao;
|
import com.java110.po.car.CarInoutPo;
|
import com.java110.utils.constant.ResponseConstant;
|
import com.java110.utils.exception.DAOException;
|
import com.java110.utils.util.DateUtil;
|
import org.activiti.engine.impl.util.CollectionUtil;
|
import org.slf4j.Logger;
|
import com.java110.core.log.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 进出场服务 与数据库交互
|
* Created by wuxw on 2017/4/5.
|
*/
|
@Service("carInoutServiceDaoImpl")
|
//@Transactional
|
public class CarInoutServiceDaoImpl extends BaseServiceDao implements ICarInoutServiceDao {
|
|
private static Logger logger = LoggerFactory.getLogger(CarInoutServiceDaoImpl.class);
|
|
/**
|
* 进出场信息封装
|
*
|
* @param businessCarInoutInfo 进出场信息 封装
|
* @throws DAOException DAO异常
|
*/
|
@Override
|
public void saveBusinessCarInoutInfo(Map businessCarInoutInfo) throws DAOException {
|
businessCarInoutInfo.put("month", DateUtil.getCurrentMonth());
|
// 查询business_user 数据是否已经存在
|
logger.debug("保存进出场信息 入参 businessCarInoutInfo : {}", businessCarInoutInfo);
|
int saveFlag = sqlSessionTemplate.insert("carInoutServiceDaoImpl.saveBusinessCarInoutInfo", businessCarInoutInfo);
|
|
if (saveFlag < 1) {
|
throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存进出场数据失败:" + JSONObject.toJSONString(businessCarInoutInfo));
|
}
|
}
|
|
|
/**
|
* 查询进出场信息
|
*
|
* @param info bId 信息
|
* @return 进出场信息
|
* @throws DAOException DAO异常
|
*/
|
@Override
|
public List<Map> getBusinessCarInoutInfo(Map info) throws DAOException {
|
|
logger.debug("查询进出场信息 入参 info : {}", info);
|
|
List<Map> businessCarInoutInfos = sqlSessionTemplate.selectList("carInoutServiceDaoImpl.getBusinessCarInoutInfo", info);
|
|
return businessCarInoutInfos;
|
}
|
|
|
/**
|
* 保存进出场信息 到 instance
|
*
|
* @param info bId 信息
|
* @throws DAOException DAO异常
|
*/
|
@Override
|
public void saveCarInoutInfoInstance(Map info) throws DAOException {
|
logger.debug("保存进出场信息Instance 入参 info : {}", info);
|
|
int saveFlag = sqlSessionTemplate.insert("carInoutServiceDaoImpl.saveCarInoutInfoInstance", info);
|
|
if (saveFlag < 1) {
|
throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存进出场信息Instance数据失败:" + JSONObject.toJSONString(info));
|
}
|
}
|
|
|
/**
|
* 查询进出场信息(instance)
|
*
|
* @param info bId 信息
|
* @return List<Map>
|
* @throws DAOException DAO异常
|
*/
|
@Override
|
public List<Map> getCarInoutInfo(Map info) throws DAOException {
|
logger.debug("查询进出场信息 入参 info : {}", info);
|
|
List<Map> businessCarInoutInfos = sqlSessionTemplate.selectList("carInoutServiceDaoImpl.getCarInoutInfo", info);
|
|
return businessCarInoutInfos;
|
}
|
|
|
/**
|
* 修改进出场信息
|
*
|
* @param info 修改信息
|
* @throws DAOException DAO异常
|
*/
|
@Override
|
public void updateCarInoutInfoInstance(Map info) throws DAOException {
|
logger.debug("修改进出场信息Instance 入参 info : {}", info);
|
|
int saveFlag = sqlSessionTemplate.update("carInoutServiceDaoImpl.updateCarInoutInfoInstance", info);
|
|
if (saveFlag < 1) {
|
throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "修改进出场信息Instance数据失败:" + JSONObject.toJSONString(info));
|
}
|
}
|
|
/**
|
* 查询进出场数量
|
*
|
* @param info 进出场信息
|
* @return 进出场数量
|
*/
|
@Override
|
public int queryCarInoutsCount(Map info) {
|
logger.debug("查询进出场数据 入参 info : {}", info);
|
|
List<Map> businessCarInoutInfos = sqlSessionTemplate.selectList("carInoutServiceDaoImpl.queryCarInoutsCount", info);
|
if (businessCarInoutInfos.size() < 1) {
|
return 0;
|
}
|
|
return Integer.parseInt(businessCarInoutInfos.get(0).get("count").toString());
|
}
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int[] batchSaveCarInout(List<CarInoutPo> successRecords) {
|
if (CollectionUtil.isEmpty(successRecords)) {
|
return new int[0];
|
}
|
|
int totalSize = successRecords.size();
|
int[] result = new int[totalSize]; // 存储每条记录的插入结果(默认 0 表示失败)
|
int batchSize = 500; // 每批插入 500 条
|
int batchCount = 0; // 记录当前处理到第几批
|
|
for (int i = 0; i < totalSize; i += batchSize) {
|
// 截取当前批次数据
|
List<CarInoutPo> batchList = successRecords.subList(i, Math.min(i + batchSize, totalSize));
|
|
// 执行批量插入,返回当前批次总影响行数
|
int batchAffectedRows = sqlSessionTemplate.insert(
|
"carInoutServiceDaoImpl.batchInsert",
|
batchList
|
);
|
|
// 标记当前批次记录为成功(简单处理:假设要么全成功,要么全失败)
|
if (batchAffectedRows == batchList.size()) {
|
for (int j = i; j < i + batchSize && j < totalSize; j++) {
|
result[j] = 1; // 1 表示插入成功
|
}
|
} else {
|
// 批次插入失败(如主键冲突、字段错误),标记为 0
|
for (int j = i; j < i + batchSize && j < totalSize; j++) {
|
result[j] = 0; // 0 表示插入失败
|
}
|
}
|
|
batchCount++;
|
}
|
|
return result;
|
}
|
|
|
}
|