/** * */ package com.zteits.park.biz; import org.springframework.stereotype.Service; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.clouds.common.cache.sys.SysCodeValueCacheUtil; import com.clouds.common.constants.CodeValKindEnum; import com.clouds.common.utils.ListCopyUtil; import com.clouds.common.utils.MD5Utils; import com.clouds.common.utils.ResultUtils; import com.github.pagehelper.PageInfo; import com.xiaoleilu.hutool.date.DateUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.AccountTypeEnum; import com.zteits.clouds.api.apibase.constants.DataStatusEnum; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.clouds.param.*; import com.zteits.clouds.api.dto.park.dto.ChargerModifyParkRelDTO; import com.zteits.clouds.api.dto.park.dto.TpEEmployeeChargeDTO; import com.zteits.clouds.api.dto.park.dto.parksource.ParkSouceEmployeeStaDTO; import com.zteits.clouds.api.dto.park.param.*; import com.zteits.clouds.api.dto.park.param.employee.EmployeeAbnormalStaReq; import com.zteits.clouds.api.dto.park.param.parksource.QueryParkSourceByOrgIdsRequest; import com.zteits.clouds.api.dto.pay.AcctPersonDTO; import com.zteits.clouds.api.dto.pay.param.AccountRechargeForEmployeeRequest; import com.zteits.clouds.api.dto.pay.param.QueryAcctPersonByCustIdsAndAcctTypeReq; import com.zteits.clouds.api.service.clouds.TpEEmployeeChargeService; import com.zteits.clouds.api.service.order.acct.AcctService; import com.zteits.clouds.api.service.pay.TdCAcctPersonService; import com.zteits.clouds.api.service.pay.TdCAcctSourceService; import com.zteits.park.biz.business.ParkLotQueryBizService; import com.zteits.park.constant.ParkConstant; import com.zteits.park.constant.ParkConstant.PdaType; import com.zteits.park.dao.ChargerModifyParkRelDao; import com.zteits.park.dao.DutyRosterBaseDao; import com.zteits.park.dao.DutyRosterDao; import com.zteits.park.dao.TpEEmployeeChargeDao; import com.zteits.park.domain.TpEEmployeeCharge; import com.zteits.park.pagepager.PageBeanUtil; import com.zteits.park.service.dutyroster.oper.DutyRosterInnerService; import com.zteits.park.service.employee.oper.EmployeeChargeOperInnerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Service("com.zteits.park.biz.TpEEmployeeChargeServiceImpl") public class TpEEmployeeChargeServiceImpl implements TpEEmployeeChargeService { private static final Logger logger = LoggerFactory.getLogger(TpEEmployeeChargeServiceImpl.class); @Autowired private TpEEmployeeChargeDao tpEEmployeeChargeDao; @Autowired private ParkLotQueryBizService parkLotQueryBizService; @Autowired private EmployeeChargeOperInnerService chargeOperInnerService; @Autowired private DutyRosterInnerService dutyRosterInnerService; @Autowired private TdCAcctPersonService tdCAcctPersonService; @Autowired private TdCAcctSourceService tdCAcctSourceService; @Autowired private AcctService acctService; @Autowired private DutyRosterDao dutyRosterDao; @Autowired private DutyRosterBaseDao dutyRosterBaseDao; @Autowired private ChargerModifyParkRelDao chargerModifyParkRelDao; //收费员默认密码 private static final String DEFAULTPWD = "123456"; @Override @Transactional public BizResult insertEmployee(SaveEmployeeInfoRequest request) { //生成编号 String orgIdStr = request.getOrgId() + ""; orgIdStr = orgIdStr.substring(orgIdStr.length() - 3, orgIdStr.length()); if (request.getChargerType().equals(ParkConstant.PdaType.XUNJIANYUAN_PDA_TYPE)) { orgIdStr = "X" + orgIdStr; } if (request.getChargerType().equals(PdaType.REPAIR_PDA_TYPE)) { orgIdStr = "R" + orgIdStr; } String chargerCode = tpEEmployeeChargeDao.generateChargerCode(orgIdStr); //保存信息 TpEEmployeeCharge record = new TpEEmployeeCharge(); BeanUtils.copyProperties(request, record); record.setDataStatus(DataStatusEnum.DATA_STATUS_VALID.value()); record.setStatus(ParkConstant.SignRecord.STATIS_NO_SIGN); //初始化为默认密码 String defaultPwd = SysCodeValueCacheUtil.queryCodeValue(CodeValKindEnum.PDA_DEFAULT_PWD); if (StringUtils.isBlank(defaultPwd)) { defaultPwd = DEFAULTPWD; } String md5Pwd = MD5Utils.enMD5(defaultPwd); record.setChargerPwd(md5Pwd); record.setChargerCode(chargerCode); Integer l = tpEEmployeeChargeDao.insertSelective(record); return new BizResult(new Long(l)); } @Override @Transactional public BizResult updateEmployeeById(UpdateEmployeeInfoRequest request) { //更新收费员信息 TpEEmployeeCharge record = new TpEEmployeeCharge(); BeanUtils.copyProperties(request, record); record.setId(request.getId()); //不允许修改chargerCode record.setChargerCode(null); record.setModifyOp(request.getCreateOp()); record.setModifyTime(new Date()); record.setCreateOp(null); //如果修改了收费员名称,同时更新排班计划中的收费员信息 if (StringUtils.isNotEmpty(request.getChargerName())) { String chargerCode = request.getChargerCode(); if (StringUtils.isBlank(chargerCode)) { TpEEmployeeCharge charger = tpEEmployeeChargeDao.queryChargerInfoById(request.getId()); if (null != charger) { chargerCode = charger.getChargerCode(); } } if (StringUtils.isNotEmpty(chargerCode)) { dutyRosterInnerService.updateDutyRosterChargerNameByChargerCodeForAsync(chargerCode, request.getChargerName()); } } tpEEmployeeChargeDao.updateByPrimaryKeySelective(record); return new BizResult(true); } @Override public BizResult> queryEmployeesForPage(QueryEmployeeRequest request) { PageBean pageBean = new PageBean(); if (StringUtils.isBlank(request.getChargerType()) && CollectionUtils.isEmpty(request.getChargerTypes())) { //0:收费员 1:巡查员 2:运维人员 request.setChargerType(ParkConstant.PdaType.CHARGER_PDA_TYPE); } PageInfo pageInfo = tpEEmployeeChargeDao.queryEmployeesForPage(request); if (pageInfo != null && pageInfo.getList() != null && pageInfo.getList().size() > 0) { PageBeanUtil.copyProperties(pageInfo, pageBean, TpEEmployeeChargeDTO.class); } return new BizResult>(pageBean); } @Override public BizResult> queryEmployerByPlNo(EmployeeChargeQueryByPlNoReq req) { if (CollectionUtils.isEmpty(req.getPlNos())) { throw new BizException(ErrorType.PARAMM_NULL, "停车场编号"); } List charges = tpEEmployeeChargeDao.queryChargerByPlNo(req.getPlNos()); List dtos = new ArrayList<>(); if (CollectionUtils.isNotEmpty(charges)) { TpEEmployeeChargeDTO dto; for (TpEEmployeeCharge charge : charges) { dto = new TpEEmployeeChargeDTO(); BeanUtils.copyProperties(charge, dto); dtos.add(dto); } } return new BizResult<>(dtos); } @Override public BizResult resetPwd(GetEmployeeRequest request) { //默认密码 String defaultPwd = SysCodeValueCacheUtil.queryCodeValue(CodeValKindEnum.PDA_DEFAULT_PWD); if (StringUtils.isBlank(defaultPwd)) { defaultPwd = DEFAULTPWD; } String md5Pwd = MD5Utils.enMD5(defaultPwd); TpEEmployeeCharge record = new TpEEmployeeCharge(); record.setId(request.getId()); record.setChargerPwd(md5Pwd); tpEEmployeeChargeDao.updateByPrimaryKeySelective(record); return new BizResult(true); } @Override @Transactional public BizResult deleteChargers(DeleteChargerRequest request) { List chargeList = tpEEmployeeChargeDao.queryChargerInfoByIds(request.getIds()); if (CollectionUtils.isEmpty(chargeList) || chargeList.size() != request.getIds().size()) { throw new BizException(ErrorType.BIZ_ERROR, "Id数据数量不正确,有数据不存在"); } List chargerCodes = chargeList.parallelStream().map(a -> a.getChargerCode()).collect( Collectors.toList()); //删除排班 dutyRosterDao.deleteDutyRosterByChargerCodes(request.getOrgId(), chargerCodes, DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -1)), DateUtil.parseDate("2999-01-01 00:00:00"), null); //删除排班 dutyRosterBaseDao.deleteutyRosterBaseByChargerCodes(request.getOrgId(), chargerCodes, null); //删除收费员 tpEEmployeeChargeDao.deleteChargerByIds(request.getIds(), request.getOpId()); if ((ParkConstant.PdaType.XUNJIANYUAN_PDA_TYPE).equals(request.getChargerType())) { return new BizResult(true); } return new BizResult(true); } @Override @Transactional public BizResult forceSignOut(ForceSignOutRequest request) { for (String chargerCode : request.getChargerCodes()) { logger.info("管理员强制签退收费员:" + chargerCode); chargeOperInnerService.pdaSignOut(chargerCode, null, ParkConstant.SignRecord.SIGN_OUT_TYPE_0); } return new BizResult(true); } @Override public BizResult queryEmployeByChargeCode(GetEmployeeRequest request) { TpEEmployeeCharge eEmployeeCharge = tpEEmployeeChargeDao.queryChargerByChargerCode(request.getChargeCode()); TpEEmployeeChargeDTO chargeDTO = new TpEEmployeeChargeDTO(); if (eEmployeeCharge != null) { BeanUtils.copyProperties(eEmployeeCharge, chargeDTO); } return new BizResult(chargeDTO); } @Override public BizResult queryEmployeeNumByPlNo(QueryEmployeeRequest request) { Integer result = tpEEmployeeChargeDao.queryEmployeeNumByPlNo(request); return new BizResult(result); } @Override public BizResult updateEmployeeAccountStatus(UpdateEmployeeAccountRequest request) { //更新收费员信息 TpEEmployeeCharge record = new TpEEmployeeCharge(); BeanUtils.copyProperties(request, record); record.setModifyOp(request.getOpId()); record.setModifyTime(new Date()); tpEEmployeeChargeDao.updateByPrimaryKeySelective(record); return new BizResult(true); } @Override public BizResult> queryChargerByChargerCodes(QueryEmployeeRequest request) { List result = new ArrayList<>(); List list = tpEEmployeeChargeDao.queryChargerByChargerCodes(request.getChargerCodes()); if (CollectionUtils.isNotEmpty(list)) { ListCopyUtil.listCopyProperties(list, result, TpEEmployeeChargeDTO.class); } return new BizResult<>(result); } @Override @Transactional public BizResult closeEmployerAccount(EmployerAccountCloseReq req) { /** * 1、查询收费员账户余额 */ QueryAcctPersonByCustIdsAndAcctTypeReq queryAcctPersonByCustIdsAndAcctTypeReq = new QueryAcctPersonByCustIdsAndAcctTypeReq(); queryAcctPersonByCustIdsAndAcctTypeReq.setSysCode(req.getSysCode()); queryAcctPersonByCustIdsAndAcctTypeReq.setCustId(req.getChargerCode()); queryAcctPersonByCustIdsAndAcctTypeReq.setAcctTypeList( Arrays.asList(AccountTypeEnum.ACCT_EMPLOYEE_RECHARGE.value())); queryAcctPersonByCustIdsAndAcctTypeReq.setOrgId(req.getOrgId()); List acctPersonDTOList = ResultUtils.getBizResultData( tdCAcctPersonService.queryAcctPersonByCustIdAndAcctType(queryAcctPersonByCustIdsAndAcctTypeReq)); if (CollectionUtils.isEmpty(acctPersonDTOList) || acctPersonDTOList.size() > 1) { throw new BizException(ErrorType.BIZ_ERROR, "收费员账户异常"); } AcctPersonDTO acctPersonDTO = acctPersonDTOList.get(0); //收费员账户余额 BigDecimal balance = acctPersonDTO.getAcctBalance(); /** * 2、收费员收入表中 插入一条 负数余额的收入 */ AccountRechargeForEmployeeRequest accountRechargeForEmployeeRequest = new AccountRechargeForEmployeeRequest(); accountRechargeForEmployeeRequest.setSysCode(req.getSysCode()); accountRechargeForEmployeeRequest.setCustId(req.getChargerCode()); accountRechargeForEmployeeRequest.setCreateEmpid(req.getsOpId().toString()); accountRechargeForEmployeeRequest.setCreateEmpName(req.getsOpName()); accountRechargeForEmployeeRequest.setsOpId(req.getsOpId()); accountRechargeForEmployeeRequest.setsOpName(req.getsOpName()); //更新后账户余额为0 accountRechargeForEmployeeRequest.setRechargeFee(BigDecimal.ZERO.subtract(balance)); accountRechargeForEmployeeRequest.setRechargeRemark("收费员账户销户,余额冲退!"); accountRechargeForEmployeeRequest.setRechargeTime(new Date()); accountRechargeForEmployeeRequest.setOrgId(req.getOrgId()); Boolean flag = ResultUtils.getBizResultData( acctService.accountEmployeeRechargeByXJ(accountRechargeForEmployeeRequest)); if (!flag) { throw new BizException(ErrorType.BIZ_ERROR, "收费员账户余额冲退失败"); } /** * 3、更改收费员账户状态 为关闭 */ TpEEmployeeCharge record = new TpEEmployeeCharge(); record.setModifyOp(req.getsOpId()); record.setChargerCode(req.getChargerCode()); record.setId(req.getId()); record.setAccountStatus(0); record.setModifyTime(new Date()); int i = tpEEmployeeChargeDao.updateByPrimaryKeySelective(record); flag = i == 1 ? true : false; if (!flag) { throw new BizException(ErrorType.BIZ_ERROR, "关闭收费员账户失败"); } return new BizResult<>(true); } @Override public BizResult queryEmployeeStaByOrgIds(QueryParkSourceByOrgIdsRequest request) { ParkSouceEmployeeStaDTO employeeStaDTO = new ParkSouceEmployeeStaDTO(); if (CollectionUtils.isEmpty(request.getOrgIds())) { employeeStaDTO.setAllTollCollector(0); employeeStaDTO.setSignInTollCollector(0); employeeStaDTO.setUnSignInTollCollector(0); } employeeStaDTO = tpEEmployeeChargeDao.queryEmployeeStaByOrgIds(request); return new BizResult<>(employeeStaDTO); } @Override public BizResult updateEmployerAuthState(EmployerAuthStateReq req) { if (req.getId() == null) { throw new BizException(ErrorType.PARAMM_NULL, "id不能为空!"); } Boolean flag = false; TpEEmployeeCharge record = new TpEEmployeeCharge(); record.setModifyOp(req.getsOpId()); record.setId(req.getId()); record.setAuthStatus(req.getAuthStatus()); record.setModifyTime(new Date()); int i = tpEEmployeeChargeDao.updateByPrimaryKeySelective(record); flag = i == 1 ? true : false; if (!flag) { throw new BizException(ErrorType.BIZ_ERROR, "修改收费员审核状态失败"); } return new BizResult<>(true); } /** * 更新收费员与可以修改车牌号的泊位区间的关联关系 * 删除旧的,添加新的 * */ @Transactional(rollbackFor = Exception.class) @Override public BizResult updateBindRegions(UpdateBindRegionReq regionReq) { // 先删除 this.chargerModifyParkRelDao.deleteChargerModifyParkRelByChargerCode(regionReq.getChargerCode()); // 再插入 this.chargerModifyParkRelDao.saveChargerParkRel(regionReq); return new BizResult<>(true); } /** * 根据收费员编号,获取其绑定的泊位区间列表 * */ @Override public BizResult> queryBindRegions(EmployeeHeadPicQueryReq employeeHeadPicQueryReq) { List relDTOList = this.chargerModifyParkRelDao.queryChargerParkRelByChargerCode(employeeHeadPicQueryReq.getChargerCode()); return new BizResult<>(relDTOList); } /** * 收费员列表查询 * @param req * @return */ @Override public BizResult> queryEmployeeChargeList(EmployeeAbnormalStaReq req) { List result = new ArrayList<>(); List list = tpEEmployeeChargeDao.queryChargerByChargerCodes(req.getChargerCodes()); if (CollectionUtils.isNotEmpty(list)) { ListCopyUtil.listCopyProperties(list, result, TpEEmployeeChargeDTO.class); } return new BizResult<>(result); } }