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.BeanConvertUtil; 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.beans.factory.annotation.Autowired; 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 getBusinessCarInoutInfo(Map info) throws DAOException { logger.debug("查询进出场信息 入参 info : {}", info); List 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 * @throws DAOException DAO异常 */ @Override public List getCarInoutInfo(Map info) throws DAOException { logger.debug("查询进出场信息 入参 info : {}", info); List 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 businessCarInoutInfos = sqlSessionTemplate.selectList("carInoutServiceDaoImpl.queryCarInoutsCount", info); if (businessCarInoutInfos.size() < 1) { return 0; } return Integer.parseInt(businessCarInoutInfos.get(0).get("count").toString()); } @Autowired private CarInoutServiceDaoImpl carInoutServiceDaoImpl; @Override @Transactional(rollbackFor = Exception.class) public int[] batchSaveCarInout(List successRecords) { if (CollectionUtil.isEmpty(successRecords)) { return new int[0]; } int totalSize = successRecords.size(); int[] result = new int[totalSize]; // 存储每条记录的插入结果(0表示失败,1表示成功) for (int i = 0; i < totalSize; i++) { CarInoutPo record = successRecords.get(i); try { CarInoutPo filter = new CarInoutPo(); filter.setCarNum(record.getCarNum()); filter.setInTime(record.getInTime()); filter.setOutTime(record.getOutTime()); filter.setDirection(record.getDirection()); filter.setMerchantId(record.getMerchantId()); int existCount = carInoutServiceDaoImpl.queryCarInoutsCount(BeanConvertUtil.beanCovertMap(filter)); if (existCount > 0) { // 3. 记录已存在,标记为去重(可用2表示去重,与0/1区分) // record.setErrorTest("重复的内容"); continue; } // 逐条插入 int affectedRows = sqlSessionTemplate.insert( "carInoutServiceDaoImpl.batchInsert", // 注意这里需要改为单条插入的statement ID BeanConvertUtil.beanCovertMap(record) ); // 单条插入成功 if (affectedRows > 0) { result[i] = 1; } else { result[i] = 0; } } catch (Exception e) { // 捕获SQL异常,标记为失败 result[i] = 0; // 可以根据需要记录错误日志 record.setErrorTest("插入CarInoutPo失败,记录: "+e); } } return result; } @Override @Transactional(rollbackFor = Exception.class) public void batchSaveCarInout2(List successRecords) { for (CarInoutPo record : successRecords) { int affectedRows = sqlSessionTemplate.insert( "carInoutServiceDaoImpl.batchInsert", // 注意这里需要改为单条插入的statement ID BeanConvertUtil.beanCovertMap(record) ); if (affectedRows == 0) { throw new IllegalArgumentException("添加失败"+record.getCarNum()+record.getInTime()+record.getOutTime()); } } } }