|  |  | 
 |  |  | import com.dy.common.webUtil.BaseResponse; | 
 |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
 |  |  | import com.dy.common.webUtil.QueryResultVo; | 
 |  |  | import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.SeClientMapper; | 
 |  |  | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | import java.text.DecimalFormat; | 
 |  |  | import java.text.ParseException; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SeGeneralMapper seGeneralMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private BaSettingsMapper baSettingsMapper; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 添加开卡记录 | 
 |  |  | 
 |  |  |      * @param clientNum 农户编号 | 
 |  |  |      * @return 5级行政区划代码 | 
 |  |  |      */ | 
 |  |  |     public Long getAreaCodeByNum(String clientNum) { | 
 |  |  |         return seClientMapper.getAreaCodeByNum(clientNum); | 
 |  |  |     public String getAreaCodeByNum(String clientNum) { | 
 |  |  |         Long areaCode = seClientMapper.getAreaCodeByNum(clientNum); | 
 |  |  |         if (areaCode == null) { | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return String.valueOf(areaCode); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |          */ | 
 |  |  |         Long cardId = 0L; | 
 |  |  |         Long clientId = 0L; | 
 |  |  |         String cardNum = po.getCardNum(); | 
 |  |  |         Long cardNum = po.getCardNum(); | 
 |  |  |         Float money = po.getMoney(); | 
 |  |  |         Float amount = po.getAmount(); | 
 |  |  |         Float gift = po.getGift(); | 
 |  |  | 
 |  |  |         Long operator = po.getOperator(); | 
 |  |  |         Date rechargeTime = new Date(); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         // 验证水卡状态是否支持当前操作 | 
 |  |  |         String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(Long.parseLong(cardNum))).orElse(""); | 
 |  |  |         String stateName = Optional.ofNullable(clientCardSv.getCardStateByCardNum(cardNum)).orElse(""); | 
 |  |  |         if(stateName.length() == 0 || !stateName.equals("正常")) { | 
 |  |  |             return BaseResponseUtils.buildFail(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); | 
 |  |  |             return BaseResponseUtils.buildErrorMsg(stateName + ", " + SellResultCode.THE_CARD_NOT_SUPPORT_THIS_OPERATION.getMessage()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /** | 
 |  |  | 
 |  |  |          */ | 
 |  |  |         Map map = Optional.ofNullable(clientCardSv.getCardIdAndClientNum(cardNum)).orElse(new HashMap()); | 
 |  |  |         if(map == null || map.size() <= 0) { | 
 |  |  |             return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); | 
 |  |  |             return BaseResponseUtils.buildErrorMsg(SellResultCode.CARD_NUMBER_MISTAKE.getMessage()); | 
 |  |  |         } | 
 |  |  |         cardId = Long.parseLong(map.get("cardId").toString()); | 
 |  |  |         clientId = Long.parseLong(map.get("clientId").toString()); | 
 |  |  | 
 |  |  |         seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ()); | 
 |  |  |         Integer rec_updateClientCard = Optional.ofNullable(clientCardSv.UpdateClientCard(seClientCard)).orElse(0); | 
 |  |  |         if(rec_updateClientCard == 0) { | 
 |  |  |             return BaseResponseUtils.buildFail(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); | 
 |  |  |             return BaseResponseUtils.buildErrorMsg(SellResultCode.RECHARGE_FAIL_WRITE_CLIENT_CARD_ERROR.getMessage()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /** | 
 |  |  | 
 |  |  |         seCardOperateMapper.insert(seCardOperate); | 
 |  |  |         Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L); | 
 |  |  |         if(rec == 0) { | 
 |  |  |             return BaseResponseUtils.buildFail(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); | 
 |  |  |             return BaseResponseUtils.buildErrorMsg(SellResultCode.REPLACE_FAIL_WRITE_RECHARGE_ERROR.getMessage()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return BaseResponseUtils.buildSuccess(true) ; | 
 |  |  |         Map map_response = new HashMap(); | 
 |  |  |         map_response.put("projectNo", String.format("%02x", Integer.parseInt(getProjectNo()))); | 
 |  |  |         map_response.put("orderNumber", rec); | 
 |  |  |         map_response.put("cardNum", cardNum); | 
 |  |  |         return BaseResponseUtils.buildSuccess(map_response) ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据指定条件获取充值记录 | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public QueryResultVo<List<VoRecharge>> getRecharges(QoRecharge queryVo) { | 
 |  |  |         //完善查询充值记录的起止时间 | 
 |  |  |         String rechargeTimeStart = queryVo.rechargeTimeStart; | 
 |  |  |         String rechargeTimeStop = queryVo.rechargeTimeStop; | 
 |  |  |         if(rechargeTimeStart != null) { | 
 |  |  |             rechargeTimeStart = rechargeTimeStart + " 00:00:00"; | 
 |  |  |             queryVo.setRechargeTimeStart(rechargeTimeStart); | 
 |  |  |         } | 
 |  |  |         if(rechargeTimeStop != null) { | 
 |  |  |             rechargeTimeStop = rechargeTimeStop + " 23:59:59"; | 
 |  |  |             queryVo.setRechargeTimeStop(rechargeTimeStop); | 
 |  |  |         } | 
 |  |  |         //String rechargeTimeStart = queryVo.rechargeTimeStart; | 
 |  |  |         //String rechargeTimeStop = queryVo.rechargeTimeStop; | 
 |  |  |         //if(rechargeTimeStart != null) { | 
 |  |  |         //    rechargeTimeStart = rechargeTimeStart + " 00:00:00"; | 
 |  |  |         //    queryVo.setRechargeTimeStart(rechargeTimeStart); | 
 |  |  |         //} | 
 |  |  |         //if(rechargeTimeStop != null) { | 
 |  |  |         //    rechargeTimeStop = rechargeTimeStop + " 23:59:59"; | 
 |  |  |         //    queryVo.setRechargeTimeStop(rechargeTimeStop); | 
 |  |  |         //} | 
 |  |  |  | 
 |  |  |         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); | 
 |  |  |  | 
 |  |  | 
 |  |  |         rsVo.obj = seCardOperateMapper.getRecharges(params); | 
 |  |  |         return rsVo ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据指定条件获取交易记录 | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获取交易统计记录 | 
 |  |  |      * 1.交易统计记录 | 
 |  |  |      * 2.笔数合计、实收金额合计、赠送金额合计 | 
 |  |  |      * 3.每一天、各种支付方式实收金额合计 | 
 |  |  |      * @param vo | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public Map getTransactionStatistics(QoTransactionStatistics vo) throws ParseException { | 
 |  |  |         /** | 
 |  |  |          * 遍历查询日期,取出每天三种支付方式(现金、扫码、转账)实收金额 | 
 |  |  |          * 每天一个对象 | 
 |  |  |          * 对象组成JSONArray添加到返回对象中 | 
 |  |  |          */ | 
 |  |  |         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); | 
 |  |  |         Date startDate = dateFormat.parse(vo.getOperateTimeStart()); | 
 |  |  |         Date stopDate = dateFormat.parse(vo.getOperateTimeStop()); | 
 |  |  |         Calendar calendar = Calendar.getInstance(); | 
 |  |  |         calendar.setTime(startDate); | 
 |  |  |  | 
 |  |  |         JSONArray array_paymentSums = new JSONArray(); | 
 |  |  |         while (calendar.getTime().before(stopDate) || calendar.getTime().equals(stopDate)) { | 
 |  |  |             String tradeDate = dateFormat.format(calendar.getTime()) ; | 
 |  |  |             Float receivedCash = Optional.ofNullable(seCardOperateMapper.getPaymentSums(tradeDate ,1L)).orElse(0f); | 
 |  |  |             Float receivedQRCode = Optional.ofNullable(seCardOperateMapper.getPaymentSums(tradeDate,2L)).orElse(0f); | 
 |  |  |             Float receivedTransfer = Optional.ofNullable(seCardOperateMapper.getPaymentSums(tradeDate, 3L)).orElse(0f); | 
 |  |  |             JSONObject job = new JSONObject(); | 
 |  |  |             job.put("tradeDate", tradeDate); | 
 |  |  |             job.put("receivedCash", receivedCash); | 
 |  |  |             job.put("receivedQRCode", receivedQRCode); | 
 |  |  |             job.put("receivedTransfer", receivedTransfer); | 
 |  |  |  | 
 |  |  |             array_paymentSums.add(job); | 
 |  |  |             calendar.add(Calendar.DAY_OF_MONTH, 1); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         // 补齐查询时间 | 
 |  |  |         String operateTimeStart = vo.operateTimeStart; | 
 |  |  |         String operateTimeStop = vo.operateTimeStop; | 
 |  |  |         if(operateTimeStart != null) { | 
 |  |  |             operateTimeStart = operateTimeStart + " 00:00:00"; | 
 |  |  |             vo.setOperateTimeStart(operateTimeStart); | 
 |  |  |         } | 
 |  |  |         if(operateTimeStop != null) { | 
 |  |  |             operateTimeStop = operateTimeStop + " 23:59:59"; | 
 |  |  |             vo.setOperateTimeStop(operateTimeStop); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 生成查询参数 | 
 |  |  |         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ; | 
 |  |  |  | 
 |  |  |         //获取笔数合计、实收金额合计、赠送金额合计 | 
 |  |  |         Integer totalCount = 0; | 
 |  |  |         Float totalReceived = 0f; | 
 |  |  |         Float totalGift = 0f; | 
 |  |  |         Map map_sum = Optional.ofNullable(seCardOperateMapper.getTransactionStatisticsSums(params)).orElse(new HashMap()); | 
 |  |  |         if(map_sum.size() > 0) { | 
 |  |  |             totalCount = Integer.parseInt(map_sum.get("totalCount").toString()); | 
 |  |  |             totalReceived = Float.parseFloat(map_sum.get("totalReceived").toString()); | 
 |  |  |             totalGift = Float.parseFloat(map_sum.get("totalGift").toString()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 获取符合条件的记录数 | 
 |  |  |         Long itemTotal = seCardOperateMapper.getTransactionStatisticsRecordCount(params); | 
 |  |  |  | 
 |  |  |         Integer pageSize = vo.getPageSize(); | 
 |  |  |         // 计算总页数 | 
 |  |  |         Integer pageTotal ; | 
 |  |  |         pageTotal = (int)Math.ceil((itemTotal==null?0.0D:itemTotal.doubleValue())/pageSize); | 
 |  |  |  | 
 |  |  |         // 根据当前页码及每页数量计算偏移量 | 
 |  |  |         Integer pageCurr = (Integer.parseInt(params.get("pageCurr").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString()); | 
 |  |  |         params.put("pageCurr", pageCurr); | 
 |  |  |  | 
 |  |  |         List<VoTransactionStatistics> list = seCardOperateMapper.getTransactionStatistics(params); | 
 |  |  |         Map map_record = new HashMap(); | 
 |  |  |         map_record.put("itemTotal", itemTotal); | 
 |  |  |         map_record.put("pageCurr", vo.pageCurr); | 
 |  |  |         map_record.put("pageSize", pageSize); | 
 |  |  |         map_record.put("pageTotal", pageTotal); | 
 |  |  |         map_record.put("list", list); | 
 |  |  |  | 
 |  |  |         Map map_result = new HashMap(); | 
 |  |  |         map_result.put("totalCount", totalCount); | 
 |  |  |         map_result.put("totalReceived", totalReceived); | 
 |  |  |         map_result.put("totalGift", totalGift); | 
 |  |  |         map_result.put("records", map_record); | 
 |  |  |         map_result.put("paymentSums", array_paymentSums); | 
 |  |  |  | 
 |  |  |         return map_result; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据指定条件获取开卡记录 | 
 |  |  |      * @param queryVo | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public QueryResultVo<List<VoActiveCardNew>> getActiveCards(QoActiveCard queryVo) { | 
 |  |  |     public QueryResultVo<List<VoActiveCard>> getActiveCards(QoActiveCard queryVo) { | 
 |  |  |         //完善查询充值记录的起止时间 | 
 |  |  |         String activeTimeStart = queryVo.activeTimeStart; | 
 |  |  |         String activeTimeStop = queryVo.activeTimeStop; | 
 |  |  | 
 |  |  |  | 
 |  |  |         Long itemTotal = seCardOperateMapper.getActiveCardRecordCount(params); | 
 |  |  |  | 
 |  |  |         QueryResultVo<List<VoActiveCardNew>> rsVo = new QueryResultVo<>() ; | 
 |  |  |         QueryResultVo<List<VoActiveCard>> rsVo = new QueryResultVo<>() ; | 
 |  |  |  | 
 |  |  |         rsVo.pageSize = queryVo.pageSize ; | 
 |  |  |         rsVo.pageCurr = queryVo.pageCurr ; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据指定条件获取IC卡注销记录 | 
 |  |  |      * @param queryVo | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public QueryResultVo<List<VoOperate>> getCommonOperations(QoCommonOperate queryVo) { | 
 |  |  |         //完善查询充值记录的起止时间 | 
 |  |  |         String timeStart = queryVo.getTimeStart(); | 
 |  |  |         String timeStop = queryVo.getTimeStop(); | 
 |  |  |         if(timeStart != null) { | 
 |  |  |             timeStart = timeStart + " 00:00:00"; | 
 |  |  |             queryVo.setTimeStart(timeStart); | 
 |  |  |         } | 
 |  |  |         if(timeStop != null) { | 
 |  |  |             timeStop = timeStop + " 23:59:59"; | 
 |  |  |             queryVo.setTimeStop(timeStop); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); | 
 |  |  |  | 
 |  |  |         Long itemTotal = Optional.ofNullable(seCardOperateMapper.getCommonOperationRecordCount(params)).orElse(0L); | 
 |  |  |  | 
 |  |  |         QueryResultVo<List<VoOperate>> rsVo = new QueryResultVo<>() ; | 
 |  |  |  | 
 |  |  |         rsVo.pageSize = queryVo.pageSize ; | 
 |  |  |         rsVo.pageCurr = queryVo.pageCurr ; | 
 |  |  |  | 
 |  |  |         rsVo.calculateAndSet(itemTotal, params); | 
 |  |  |         rsVo.obj = seCardOperateMapper.getCommonOperations(params); | 
 |  |  |         return rsVo ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据指定条件获取收据列表 | 
 |  |  |      * @param queryVo | 
 |  |  |      * @return | 
 |  |  | 
 |  |  |  | 
 |  |  |         return map_result; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 判断指定水卡是否为挂失状态且无补卡记录 | 
 |  |  |      * @param cardNum 水卡编号 | 
 |  |  |      * @return 是否已挂失未补卡 | 
 |  |  |      */ | 
 |  |  |     public Boolean isLostAndUnreplaced(Long cardNum) { | 
 |  |  |         Integer lostCount = seClientCardMapper.getLostCount(cardNum); | 
 |  |  |         Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum); | 
 |  |  |         if(lostCount > 0 && replacedCount == 0) { | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 修改农户水卡 | 
 |  |  |      * @param po | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public Integer updateClientCard(SeClientCard po) { | 
 |  |  |         return seClientCardMapper.updateByPrimaryKeySelective(po); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获取项目编号 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public String getProjectNo() { | 
 |  |  |         return baSettingsMapper.getItemValue("projectNo"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据水卡编号获取其挂失时退款金额(补卡时判断使用) | 
 |  |  |      * @param cardNum | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public Double getTradeAmountByCardNo(Long cardNum) { | 
 |  |  |         return seCardOperateMapper.getTradeAmountByCardNo(cardNum); | 
 |  |  |     } | 
 |  |  | } |