123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- package cn.fastfun.service.impl;
- import cn.fastfun.controller.param.*;
- import cn.fastfun.service.AppDeviceLogService;
- import cn.fastfun.service.AppDeviceService;
- import cn.fastfun.service.UtilService;
- import cn.fastfun.service.entity.AppDevice;
- import cn.fastfun.service.entity.AppDeviceLog;
- import cn.fastfun.service.entity.AppImeiHistory;
- import cn.fastfun.util.ObjectUtil;
- import com.bridge.dto.ApiDTO;
- import com.bridge.dto.ApiPageDTO;
- import com.bridge.dto.QueryParam;
- import com.bridge.dto.QueryParamExp;
- import com.bridge.exception.ApiRuntimeException;
- import com.bridge.service.JpaService;
- import com.bridge.service.impl.JpaServiceImp;
- import io.swagger.annotations.ApiOperation;
- import io.swagger.annotations.ApiParam;
- import io.swagger.models.auth.In;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.BooleanUtils;
- import org.springframework.dao.EmptyResultDataAccessException;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.stereotype.Service;
- import org.springframework.util.CollectionUtils;
- import org.springframework.util.StringUtils;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import javax.annotation.Resource;
- import javax.persistence.Query;
- import javax.transaction.Transactional;
- import java.math.BigInteger;
- //import java.sql.Timestamp;
- import java.sql.Timestamp;
- import java.util.*;
- import java.util.concurrent.atomic.AtomicBoolean;
- @Slf4j
- @Service
- public class AppDeviceLogServiceImpl extends JpaServiceImp<AppDeviceLog, String> implements AppDeviceLogService {
- @Resource
- AppDeviceService appDeviceService;
- @Resource
- AppDeviceLogService appDeviceLogService;
- @Resource
- UtilService utilService;
- @Resource
- JdbcTemplate jdbcTemplate;
- //业务类
- @Resource(name = "appImeiHistoryService")
- JpaService<AppImeiHistory, String> appImeiHistoryService;
- @Override
- @Transactional
- public void putInStorage(LibraryInFormParam param) {
- List<AppDevice> deviceList = appDeviceService.findAll(QueryParamExp.in("sn", param.getSn().toArray(new String[]{})));
- param.setSn(new ArrayList<>());
- deviceList.forEach(p -> param.getSn().add(p.getSn()));
- if (!CollectionUtils.isEmpty(param.getSn())) {
- // 查询当前操作id的最大值
- StringBuffer sql = new StringBuffer();
- sql.append("SELECT COALESCE(MAX(operate_id),0) as max_opid from app_device_log where operate_id is not null");
- log.info("SQL: {}", sql.toString());
- ApiPageDTO page = appDeviceLogService.getListBySQL(sql.toString(), new HashMap<>(), new QueryParam());
- List<Map<String, Object>> data = (List<Map<String, Object>>) page.getData();
- BigInteger operateID = (BigInteger) data.get(0).get("max_opid");
- operateID = operateID.add(BigInteger.valueOf(1));
- Date time = new Date();
- BigInteger finalOperateID = operateID;
- param.getSn().forEach(p -> {
- String batchNum;
- AppDevice appDevice = appDeviceService.getOne(QueryParamExp.eq("sn", p));
- if (null == appDevice) throw new ApiRuntimeException("设备信息不存在!");
- batchNum = appDevice.getBatchNum();
- if (appDevice.getStatus() < 1) {
- appDevice.setStatus(1); // 已入库
- Map<String, Boolean> checkRes = appDeviceLogService.selfCheck(p);
- appDevice.setCheckStatus(BooleanUtils.toInteger(checkRes.get("checkResult"))); //自检
- appDevice.setCheckStatusDataConnect(BooleanUtils.toInteger(checkRes.get("checkDataConnectResult"))); //自检
- appDevice.setCheckStatusLocation(BooleanUtils.toInteger(checkRes.get("checkLocationResult"))); //自检
- appDevice.setCheckStatusLock(BooleanUtils.toInteger(checkRes.get("checkLockResult"))); //自检
- appDevice.setCheckStatusFault(BooleanUtils.toInteger(checkRes.get("checkFaultResult"))); //自检
- appDevice.setCheckStatusVoltage(BooleanUtils.toInteger(checkRes.get("checkVoltageResult"))); //自检
- //TODO 发送解锁指令
- appDevice.setInstorageTime(time);
- appDeviceService.save(appDevice);
- AppDeviceLog appDeviceLog = new AppDeviceLog(p, appDevice.getImei()).toInStorage(time, batchNum, finalOperateID);
- appDeviceLog.setOperator(utilService.getUserName());
- save(appDeviceLog); // 记录入库日志
- } else if (deviceList.size() == 1) { //如果只有1个,认为是单个入库,检测是否重复入库;批次入库只跳过
- throw new ApiRuntimeException(p + "设备已入库,不能重复入库!");
- }
- });
- } else {
- throw new ApiRuntimeException("设备未录入!");
- }
- }
- @Override
- @Transactional
- public Map<String, Boolean> selfCheck(String sn) {
- Map<String, Boolean> res = new HashMap<>();
- Boolean checkResult = true;
- Boolean checkDataConnectResult = true;
- Boolean checkLocationResult = true;
- Boolean checkLockResult = true;
- Boolean checkFaultResult = true;
- Boolean checkVoltageResult = true;
- Map<String, Object> bmsData = new HashMap<>();
- Map<String, Object> gpsData = new HashMap<>();
- try {
- bmsData = jdbcTemplate.queryForMap("select devcode,error_code, locked_state, status_time, cell_voltages from ff_battery_status where devcode='" + sn + "'");
- } catch (EmptyResultDataAccessException e) {
- bmsData.put("devcode", null);
- }
- try {
- gpsData = jdbcTemplate.queryForMap("select devcode from ff_location where devcode='" + sn + "'");
- } catch (EmptyResultDataAccessException e) {
- gpsData.put("devcode", null);
- }
- if (StringUtils.isEmpty(bmsData.get("devcode"))) {
- checkLockResult = false;
- checkFaultResult = false;
- checkVoltageResult = false;
- checkDataConnectResult = false;
- } else {
- if (StringUtils.isEmpty(bmsData.get("locked_state"))) {
- checkFaultResult = true;
- } else {
- //锁定 0=解锁,1=锁定
- if (bmsData.get("locked_state").equals(0)) {
- checkFaultResult = true;
- }
- }
- if (StringUtils.isEmpty(bmsData.get("error_code"))) {
- checkFaultResult = true;
- } else {
- if (bmsData.get("error_code").equals(0)) {
- checkFaultResult = true;
- }
- }
- List<Double> voltage = ObjectUtil.StringToArrayList((String) bmsData.get("cell_voltages"), ",");
- if (!StringUtils.isEmpty(bmsData.get("cell_voltages")) && (Collections.max(voltage) > 4.5 || Collections.min(voltage) < 2.5)) {
- checkVoltageResult = false;
- }
- Calendar cal = Calendar.getInstance();
- cal.setTime(new Date());
- Long time1 = cal.getTimeInMillis();
- cal.setTime((Date) bmsData.get("status_time"));
- Long time2 = cal.getTimeInMillis();
- if (!StringUtils.isEmpty(bmsData.get("status_time")) && (time1 - time2) / 1000.0 / 3600 > 6) {
- checkDataConnectResult = false;
- }
- new Timestamp(System.currentTimeMillis());
- }
- if (!StringUtils.isEmpty(gpsData.get("devcode"))) {
- checkLocationResult = false;
- }
- checkResult = checkDataConnectResult && checkLocationResult && checkLockResult && checkFaultResult && checkVoltageResult;
- res.put("checkResult", checkResult);
- res.put("checkDataConnectResult", checkDataConnectResult);
- res.put("checkLocationResult", checkLocationResult);
- res.put("checkLockResult", checkLockResult);
- res.put("checkFaultResult", checkFaultResult);
- res.put("checkVoltageResult", checkVoltageResult);
- return res;
- }
- @Override
- @Transactional
- public void transfer(TransferFormParam param) {
- if (CollectionUtils.isEmpty(param.getSn()) && !CollectionUtils.isEmpty(param.getBatchNum())) {
- List<AppDevice> deviceList = appDeviceService.findAll(QueryParamExp.in("operateID", param.getBatchNum().toArray(new Integer[]{})));
- param.setSn(new ArrayList<>());
- deviceList.forEach(p -> param.getSn().add(p.getSn()));
- }
- if (!CollectionUtils.isEmpty(param.getSn())) {
- // 查询当前操作id的最大值
- StringBuffer sql = new StringBuffer();
- sql.append("SELECT COALESCE(MAX(operate_id),0) as max_opid from app_device_log where operate_id is not null");
- log.info("SQL: {}", sql.toString());
- ApiPageDTO page = appDeviceLogService.getListBySQL(sql.toString(), new HashMap<>(), new QueryParam());
- List<Map<String, Object>> data = (List<Map<String, Object>>) page.getData();
- BigInteger operateID = (BigInteger) data.get(0).get("max_opid");
- operateID = operateID.add(BigInteger.valueOf(1));
- Date time = new Date();
- BigInteger finalOperateID = operateID;
- //批量调拨时,若有不符合调拨条件的电池,则停止本次批量调拨
- param.getSn().forEach(p -> {
- AppDevice appDevice = appDeviceService.getOne(QueryParamExp.eq("sn", p));
- if (null == appDevice) {
- throw new ApiRuntimeException(p + "设备信息不存在!");
- }
- // @TODO: 自建不通过
- // if (1 != appDevice.getStatus() && 2 != appDevice.getStatus()) {
- // throw new ApiRuntimeException(p + "不是入库状态,不能调拨!");
- // }
- // if (1 != appDevice.getCheckStatus()) {
- // throw new ApiRuntimeException(p + "自检未通过,不能调拨!");
- // }
- });
- param.getSn().forEach(p -> {
- String batchNum;
- AppDevice appDevice = appDeviceService.getOne(QueryParamExp.eq("sn", p));
- batchNum = appDevice.getBatchNum();
- // 将可调拨的电池进行调拨
- if (1 == appDevice.getStatus()) {
- appDevice.setStatus(2); // 已划拨
- appDevice.setTransferTime(time);
- appDevice.setOwnerId(param.getCustomId()); // 设置归属
- appDevice.setCustomer(param.getCustomId()); // 设置归属
- appDevice.setTfDescribe(param.getDescribe());
- appDevice.setTfUsed(param.getUsed());
- appDeviceService.save(appDevice);
- AppDeviceLog appDeviceLog = new AppDeviceLog(p, appDevice.getImei()).toTransfer(param, time, batchNum, finalOperateID);
- appDeviceLog.setOperator(utilService.getUserName());
- appDeviceLog.setOutCustomId(param.getCustomId());
- save(appDeviceLog); // 记录划拨日志
- } else {
- throw new ApiRuntimeException(p + "不是入库状态或自检未通过,不能调拨!");
- }
- });
- }
- }
- @Override
- @Transactional
- public void transferBack(TransferFormParam param) {
- AppDevice appDevice = appDeviceService.getOne(QueryParamExp.eq("sn", param.getSn().get(0)));
- // 查询当前操作id的最大值
- StringBuffer sql = new StringBuffer();
- sql.append("SELECT COALESCE(MAX(operate_id),0) as max_opid from app_device_log where operate_id is not null");
- log.info("SQL: {}", sql.toString());
- ApiPageDTO page = appDeviceLogService.getListBySQL(sql.toString(), new HashMap<>(), new QueryParam());
- List<Map<String, Object>> data = (List<Map<String, Object>>) page.getData();
- BigInteger operateID = (BigInteger) data.get(0).get("max_opid");
- operateID = operateID.add(BigInteger.valueOf(1));
- Date time = new Date();
- BigInteger finalOperateID = operateID;
- String batchNum;
- if (null == appDevice) throw new ApiRuntimeException("设备信息不存在!");
- if (3 != appDevice.getStatus()) throw new ApiRuntimeException("设备不是出库状态!");
- batchNum = appDevice.getBatchNum();
- appDevice.setInstorageTime(time);
- appDevice.setStatus(1); // 已入库
- appDevice.setTransferBackTime(time);
- appDeviceService.save(appDevice);
- AppDeviceLog appDeviceLog = new AppDeviceLog(appDevice.getSn(), appDevice.getImei()).transferBack(param, time, batchNum, finalOperateID);
- appDeviceLog.setOperator(utilService.getUserName());
- save(appDeviceLog); // 记录调回日志
- }
- @Override
- @Transactional
- public void outStorage(LibraryOutFormParam param) {
- if (CollectionUtils.isEmpty(param.getSn()) && !CollectionUtils.isEmpty(param.getBatchNum())) {
- List<AppDevice> deviceList = appDeviceService.findAll(QueryParamExp.in("operateID", param.getBatchNum().toArray(new Integer[]{})));
- param.setSn(new ArrayList<>());
- deviceList.forEach(p -> param.getSn().add(p.getSn()));
- }
- if (!CollectionUtils.isEmpty(param.getSn())) {
- // 查询当前操作id的最大值
- StringBuffer sql = new StringBuffer();
- sql.append("SELECT COALESCE(MAX(operate_id),0) as max_opid from app_device_log where operate_id is not null");
- log.info("SQL: {}", sql.toString());
- ApiPageDTO page = appDeviceLogService.getListBySQL(sql.toString(), new HashMap<>(), new QueryParam());
- List<Map<String, Object>> data = (List<Map<String, Object>>) page.getData();
- BigInteger operateID = (BigInteger) data.get(0).get("max_opid");
- operateID = operateID.add(BigInteger.valueOf(1));
- Date time = new Date();
- //批量出库时,若有不符合出库条件的电池,则停止本次批量出库
- param.getSn().forEach(p -> {
- AppDevice appDevice = appDeviceService.getOne(QueryParamExp.eq("sn", p));
- if (null == appDevice) {
- throw new ApiRuntimeException(p + "设备信息不存在!");
- }
- if (2 != appDevice.getStatus() && 3 != appDevice.getStatus()) {
- throw new ApiRuntimeException(p + "不是调拨状态,不能出库!");
- }
- });
- BigInteger finalOperateID = operateID;
- param.getSn().forEach(p -> {
- String batchNum;
- AppDevice appDevice = appDeviceService.getOne(QueryParamExp.eq("sn", p));
- // 将可出库的电池出库
- if (2 == appDevice.getStatus()) {
- batchNum = appDevice.getBatchNum();
- appDevice.setOutstorageTime(time);
- appDevice.setStatus(3); // 已出库
- appDeviceService.save(appDevice);
- AppDeviceLog appDeviceLog = new AppDeviceLog(p, appDevice.getImei()).outStorage(param, time, batchNum, finalOperateID);
- appDeviceLog.setOperator(utilService.getUserName());
- save(appDeviceLog); // 记录出库日志
- } else {
- throw new ApiRuntimeException(p + "不是调拨状态,不能出库!");
- }
- });
- }
- }
- @Override
- @Transactional
- public void handle(HandelFormParam param) {
- // 查询当前操作id的最大值
- StringBuffer sql = new StringBuffer();
- sql.append("SELECT COALESCE(MAX(operate_id),0) as max_opid from app_device_log where operate_id is not null");
- log.info("SQL: {}", sql.toString());
- ApiPageDTO page = appDeviceLogService.getListBySQL(sql.toString(), new HashMap<>(), new QueryParam());
- List<Map<String, Object>> data = (List<Map<String, Object>>) page.getData();
- BigInteger operateID = (BigInteger) data.get(0).get("max_opid");
- operateID = operateID.add(BigInteger.valueOf(1));
- Date time = new Date();
- BigInteger finalOperateID = operateID;
- param.getSn().forEach(p -> {
- String batchNum;
- AppDevice appDevice = appDeviceService.getOne(QueryParamExp.eq("sn", p));
- if (null == appDevice) throw new ApiRuntimeException("设备信息不存在!");
- if (1 != appDevice.getStatus()) throw new ApiRuntimeException("设备不是入库状态!");
- if (StringUtils.isEmpty(appDevice.getTransferTime())) throw new ApiRuntimeException("设备未被调拨过!");
- batchNum = appDevice.getBatchNum();
- appDevice.setHandleTime(time);
- appDevice.setStatus(4); // 处置
- appDeviceService.save(appDevice);
- //TODO 发送上锁指令
- AppDeviceLog appDeviceLog = new AppDeviceLog(p, appDevice.getImei()).toHandle(param, time, batchNum, finalOperateID);
- appDeviceLog.setOperator(utilService.getUserName());
- save(appDeviceLog); // 记录处置日志
- });
- }
- /**
- * 获取客户列表
- *
- * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
- */
- @Override
- public List<Map<String, Object>> getCustomList() {
- StringBuilder sql = new StringBuilder();
- sql.append("SELECT id,organ_code,title from app_custom where organ_code is not null");
- log.info("SQL: {}", sql.toString());
- List<Map<String, Object>> mapList = this.getListBySQL(sql.toString(), new HashMap<>());
- return mapList;
- }
- }
|