|  |  | 
 |  |  | import com.dy.common.webUtil.BaseResponse; | 
 |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
 |  |  | import com.dy.common.webUtil.QueryResultVo; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.SeClientMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.SeGeneralMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper; | 
 |  |  | import com.dy.pipIrrGlobal.daoSe.*; | 
 |  |  | import com.dy.pipIrrGlobal.pojoSe.SeCardOperate; | 
 |  |  | import com.dy.pipIrrGlobal.pojoSe.SeClientCard; | 
 |  |  | import com.dy.pipIrrGlobal.pojoSe.SeManagerCard; | 
 |  |  | import com.dy.pipIrrGlobal.pojoSe.SePaymentMethod; | 
 |  |  | import com.dy.pipIrrGlobal.voSe.*; | 
 |  |  | import com.dy.pipIrrSell.cardOperate.dto.DtoRecharge; | 
 |  |  | import com.dy.pipIrrSell.cardOperate.enums.OperateTypeENUM; | 
 |  |  | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.dubbo.common.utils.PojoUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | import java.text.DecimalFormat; | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SeGeneralMapper seGeneralMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private BaSettingsMapper baSettingsMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SeManagerCardMapper seManagerCardMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SePaymentMethodMapper sePaymentMethodMapper; | 
 |  |  |  | 
 |  |  |     @Value("${project.projectNo}") | 
 |  |  |     private Integer projectNo; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 添加开卡记录 | 
 |  |  | 
 |  |  |      * @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); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |     public Long getAreaCodeById(Long clientId) { | 
 |  |  |         return seClientMapper.getAreaCodeById(clientId); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据行政区划串模块查询水卡编号,开卡使用 | 
 |  |  |      * @param areaCode | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     String getCardNumOfMax(String areaCode) { | 
 |  |  |     public String getCardNumOfMax(String areaCode) { | 
 |  |  |         return seClientCardMapper.getCardNumOfMax(areaCode); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据行政区划串模糊查询管理卡编号,创建管理卡使用 | 
 |  |  |      * @param areaCode | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public String getManagerCardNumOfMax(String areaCode) { | 
 |  |  |         return seManagerCardMapper.getManagerCardNumOfMax(areaCode); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 创建管理卡 | 
 |  |  |      * @param po | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public Long addManagerCard(SeManagerCard po) { | 
 |  |  |         seManagerCardMapper.insert(po); | 
 |  |  |         return po.getId(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         Long operator = po.getOperator(); | 
 |  |  |         Date rechargeTime = new Date(); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         // 验证水卡状态是否支持当前操作 | 
 |  |  |         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()); | 
 |  |  | 
 |  |  |          *      补卡时间 | 
 |  |  |          *      最后操作类型-2 | 
 |  |  |          */ | 
 |  |  |  | 
 |  |  |         // 根据支付方式ID获取支付方式名称 | 
 |  |  |         SePaymentMethod sePaymentMethod = sePaymentMethodMapper.selectByPrimaryKey(paymentId); | 
 |  |  |         String paymentName = sePaymentMethod.getName(); | 
 |  |  |  | 
 |  |  |         SeClientCard seClientCard = new SeClientCard(); | 
 |  |  |         seClientCard.setId(cardId); | 
 |  |  |         seClientCard.setMoney(afterRecharge); | 
 |  |  |         seClientCard.setRechargedt(rechargeTime); | 
 |  |  |         seClientCard.setLastoper(LastOperateENUM.RECHARGE.getCode ()); | 
 |  |  |         if(paymentName != null && paymentName.equals("换卡")) { | 
 |  |  |             seClientCard.setLastoper(LastOperateENUM.CHANGE_RECHARGE.getCode ()); | 
 |  |  |         }else { | 
 |  |  |             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()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /** | 
 |  |  | 
 |  |  |         seCardOperate.setMoney(money); | 
 |  |  |         seCardOperate.setTradeAmount(amount); | 
 |  |  |         seCardOperate.setGift(gift); | 
 |  |  |         seCardOperate.setOperateType(OperateTypeENUM.RECHARGE.getCode()); | 
 |  |  |         if(paymentName != null && paymentName.equals("换卡")) { | 
 |  |  |             seCardOperate.setOperateType(OperateTypeENUM.CHANGE_RECHARGE.getCode()); | 
 |  |  |         }else { | 
 |  |  |             seCardOperate.setOperateType(OperateTypeENUM.RECHARGE.getCode()); | 
 |  |  |         } | 
 |  |  |         seCardOperate.setPaymentId(paymentId); | 
 |  |  |         seCardOperate.setPrice(price); | 
 |  |  |         seCardOperate.setRemarks(remarks); | 
 |  |  | 
 |  |  |         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", projectNo)); | 
 |  |  |         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); | 
 |  |  |  | 
 |  |  | 
 |  |  |         // 获取符合条件的记录数 | 
 |  |  |         Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L); | 
 |  |  |  | 
 |  |  |         QueryResultVo rsVo = new QueryResultVo<>() ; | 
 |  |  |         rsVo.pageSize = vo.pageSize ; | 
 |  |  |         rsVo.pageCurr = vo.pageCurr ; | 
 |  |  |         rsVo.calculateAndSet(itemTotal, params); | 
 |  |  |  | 
 |  |  |         List<VoTradeDetails> list = seCardOperateMapper.getTransactions(params); | 
 |  |  |         if(list.size() == 0) { | 
 |  |  |             return new HashMap(); | 
 |  |  | 
 |  |  |         // 遍历交易明细记录,汇总购水金额、购卡金额 | 
 |  |  |         Double totalWaterCost = 0.0; | 
 |  |  |         Double totalCardCost = 0.0; | 
 |  |  |         Double totalGift = 0.0; | 
 |  |  |         Double totalRefund = 0.0; | 
 |  |  |  | 
 |  |  |         JSONArray array= JSONArray.parseArray(JSON.toJSONString(list)); | 
 |  |  |         for(int i = 0; i < array.size(); i++) { | 
 |  |  |             JSONObject job = array.getJSONObject(i); | 
 |  |  |             Double waterCost = Optional.ofNullable(job.getDouble("waterCost")).orElse(0.0); | 
 |  |  |             Double cardCost = Optional.ofNullable(job.getDouble("cardCost")).orElse(0.0); | 
 |  |  |             Double gift = Optional.ofNullable(job.getDouble("gift")).orElse(0.0); | 
 |  |  |             Double refundAmount = Optional.ofNullable(job.getDouble("refundAmount")).orElse(0.0); | 
 |  |  |  | 
 |  |  |             totalWaterCost = totalWaterCost + waterCost; | 
 |  |  |             totalCardCost = totalCardCost + cardCost; | 
 |  |  |             totalGift = totalGift + gift; | 
 |  |  |             totalRefund = totalRefund + refundAmount; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Map map_record = new HashMap(); | 
 |  |  | 
 |  |  |         Map map_result = new HashMap(); | 
 |  |  |         map_result.put("waterCost", df.format(totalWaterCost)); | 
 |  |  |         map_result.put("cardCost", df.format(totalCardCost)); | 
 |  |  |         map_result.put("gift", df.format(totalGift)); | 
 |  |  |         map_result.put("refund", df.format(totalRefund)); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         map_result.put("records", map_record); | 
 |  |  |  | 
 |  |  |         return map_result; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据指定条件获取IC卡注销记录 | 
 |  |  |      * 根据指定条件获取通用操作记录 | 
 |  |  |      * @param queryVo | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  | 
 |  |  |      * @return 是否已挂失未补卡 | 
 |  |  |      */ | 
 |  |  |     public Boolean isLostAndUnreplaced(Long cardNum) { | 
 |  |  |         Integer rec = seClientCardMapper.isLostAndUnreplaced(cardNum); | 
 |  |  |         if(rec != null && rec > 0) { | 
 |  |  |             return false; | 
 |  |  |         Integer lostCount = seClientCardMapper.getLostCount(cardNum); | 
 |  |  |         Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum); | 
 |  |  |         if(lostCount > 0 && replacedCount == 0) { | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  |         return true; | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |     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); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据水卡地址判断该卡是否可以开卡 | 
 |  |  |      * @param cardAddr | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public Boolean canActiveCard(String cardAddr) { | 
 |  |  |  | 
 |  |  |         // 指定水卡地址的水卡数量 | 
 |  |  |         Long cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddr(cardAddr)).orElse(0L); | 
 |  |  |         if(cardCount == 0) { | 
 |  |  |            return true; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 指定水卡地址且正常状态或挂失状态的水卡数量 | 
 |  |  |         cardCount = Optional.ofNullable(seClientCardMapper.getCountByCardAddrAndState(cardAddr)).orElse(0L); | 
 |  |  |         if(cardCount == 0) { | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  | } |