From a8f31c8b9c1e9bb7644e27b8baa476e1593790c0 Mon Sep 17 00:00:00 2001 From: Administrator <zhubaomin> Date: 星期四, 11 七月 2024 14:50:39 +0800 Subject: [PATCH] 2024-07-11 朱宝民 优化开卡接口、补卡接口,灌溉单元农户关联接口,轮灌组农户关联接口 --- pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java | 344 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 185 insertions(+), 159 deletions(-) diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java index a1c8156..c695e7c 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/virtualCard/VirtualCardCtrl.java @@ -1,52 +1,29 @@ package com.dy.pipIrrSell.virtualCard; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; -import com.dy.common.webUtil.ResultCodeMsg; -import com.dy.pipIrrGlobal.pojoSe.SeVcRefund; -import com.dy.pipIrrGlobal.pojoSe.SeVcRefundItem; +import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; +import com.dy.pipIrrGlobal.voSe.VoVcRecharge; +import com.dy.pipIrrGlobal.voSe.VoVirtualCard; import com.dy.pipIrrSell.result.SellResultCode; import com.dy.pipIrrSell.util.PayHelper; -import com.dy.pipIrrSell.virtualCard.dto.DtoAudit; -import com.dy.pipIrrSell.virtualCard.dto.DtoRefund; import com.dy.pipIrrSell.virtualCard.dto.DtoRegist; +import com.dy.pipIrrSell.virtualCard.dto.DtoVcRecharge; import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM; -import com.dy.pipIrrSell.virtualCard.enums.RefundItemStateENUM; -import com.dy.pipIrrSell.virtualCard.enums.RefundStateENUM; -import com.dy.pipIrrSell.wechatpay.dto.Refund; -import com.dy.pipIrrSell.wechatpay.dto.ToRefund; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.MediaType; -import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import javax.crypto.NoSuchPaddingException; -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.SignatureException; -import java.security.spec.InvalidKeySpecException; import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.Optional; /** * @author ZhuBaoMin @@ -66,38 +43,73 @@ private final PayHelper payHelper; /** + * 鑾峰彇鍐滄埛鍏ㄩ儴铏氭嫙鍗� + * @return + */ + @GetMapping(path = "/get") + @SsoAop() + public BaseResponse<List<VoVirtualCard>> getVCs(Long clientId){ + try { + List<VoVirtualCard> res = virtualCardSv.getVCs(clientId); + return BaseResponseUtils.buildSuccess(res); + } catch (Exception e) { + log.error("鑾峰彇鏀粯鏂瑰紡璁板綍寮傚父", e); + return BaseResponseUtils.buildException(e.getMessage()) ; + } + } + + /** + * 鏍规嵁铏氭嫙鍗D鑾峰彇铏氭嫙鍗″璞� + * @param vcId + * @return + */ + @GetMapping(path = "/getVcById") + @SsoAop() + public BaseResponse<VoVirtualCard> getVcById(@RequestParam Long vcId){ + try { + return BaseResponseUtils.buildSuccess(virtualCardSv.getVcById(vcId)); + } catch (Exception e) { + log.error("鑾峰彇鏀粯鏂瑰紡璁板綍寮傚父", e); + return BaseResponseUtils.buildException(e.getMessage()) ; + } + } + + /** * 铏氭嫙鍗¤处鍙锋敞鍐� * @param po * @param bindingResult * @return */ - @Operation(summary = "娉ㄥ唽铏氭嫙鍗�", description = "娉ㄥ唽铏氭嫙鍗�") - @ApiResponses(value = { - @ApiResponse( - responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, - description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�", - content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, - schema = @Schema(implementation = Boolean.class))} - ) - }) @PostMapping(path = "add_vc") @SsoAop() - //public BaseResponse<Boolean> addVC(@RequestParam("clientId") @NotNull(message = "鍐滄埛缂栧彿涓嶈兘涓虹┖") Long clientId){ public BaseResponse<Boolean> addVC(@RequestBody @Valid DtoRegist po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long clientId = po.getClientId(); - String vcName = po.getVcName(); - // 鍚嶇О楠岄噸 - Integer rc = virtualCardSv.getRecordCountByName(po); - if(rc != null && rc > 0) { - return BaseResponseUtils.buildFail(SellResultCode.CARD_NAME_ESIST.getMessage()); + // 鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode + String areaCode = String.valueOf(virtualCardSv.getAreaCodeById(clientId)); + /** + * 鏍规嵁琛屾斂鍖哄垝涓诧紙areaCode锛夊湪铏氭嫙鍗¤〃涓拡瀵硅櫄鎷熷崱缂栧彿锛坴cNum锛夎繘琛屾ā绯婃煡璇� + * 濡傛灉5浣嶉『搴忓彿宸茬粡杈惧埌鏈�澶у�硷紝鎻愮ず鐢ㄦ埛鑱旂郴绯荤粺绠$悊鍛� + * 濡傛灉5浣嶉『搴忓彿鏈揪鍒版渶澶у�硷紝鍒欏姞1 + * cardNum涓烘柊鐨勫崱鍙� + */ + String vcNum = Optional.ofNullable(virtualCardSv.getVcCardNumOfMax(areaCode)).orElse(""); + if(vcNum != null && vcNum.trim().length() > 0) { + Integer number = Integer.parseInt(vcNum.substring(12)); + number = number + 1; + if(number > 65535) { + return BaseResponseUtils.buildFail(SellResultCode.CARD_NUMBER_OVERRUN.getMessage()); + } + vcNum = vcNum.substring(0, 12) + String.format("%05d", number); + } else { + vcNum = areaCode + "00001"; } SeVirtualCard seVirtualCard = new SeVirtualCard(); - seVirtualCard.setVcName(vcName); + seVirtualCard.setVcNum(Long.parseLong(vcNum)); seVirtualCard.setClientId(clientId); seVirtualCard.setMoney(0d); seVirtualCard.setLastOperate(LastOperateENUM.OPEN_ACCOUNT.getCode()); @@ -106,11 +118,10 @@ seVirtualCard.setCreateTime(new Date()); Long rec = virtualCardSv.insertVirtualCard(seVirtualCard); if(rec == null) { - return BaseResponseUtils.buildFail(SellResultCode.WALLET_OPEN_ACCOUNT_FAIL.getMessage()); + return BaseResponseUtils.buildFail(SellResultCode.VC_OPEN_ACCOUNT_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess(true) ; } - /** * 鐢ㄦ埛鐢宠閫�娆� @@ -118,57 +129,57 @@ * @param bindingResult * @return */ - @Operation(summary = "铏氭嫙鍗$敵璇烽��娆�", description = "铏氭嫙鍗$敵璇烽��娆�") - @ApiResponses(value = { - @ApiResponse( - responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, - description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�", - content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, - schema = @Schema(implementation = Boolean.class))} - ) - }) - @PostMapping(path = "add_refund", consumes = MediaType.APPLICATION_JSON_VALUE) - @Transactional(rollbackFor = Exception.class) - @SsoAop() - public BaseResponse<Boolean> addRefund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult){ - if(bindingResult != null && bindingResult.hasErrors()){ - return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); - } - - Long virtualId = po.getVirtualId(); - Integer refundAmount = po.getRefundAmount(); - - // 鏍规嵁铏氭嫙鍗D鑾峰彇铏氭嫙鍗″璞� - SeVirtualCard seVirtualCard = virtualCardSv.selectVirtuCardById(virtualId); - if(seVirtualCard == null) { - return BaseResponseUtils.buildFail(SellResultCode.VIRTUAL_CARD_NOT_EXIST.getMessage()); - } - Long clientId = seVirtualCard.getClientId(); - Double money = seVirtualCard.getMoney(); - - // 楠岃瘉閫�娆鹃噾棰濇槸鍚﹀ぇ浜庝綑棰� - if(refundAmount > money) { - return BaseResponseUtils.buildFail(SellResultCode.REFUND_AMOUNT_CANNOT_GREATER_THAN_MONEY.getMessage()); - } - - // 璁$畻娑堣垂鍚庝綑棰� - Double afterRefund = money - refundAmount; - - SeVcRefund seVcRefund = new SeVcRefund(); - seVcRefund.setVcId(virtualId); - seVcRefund.setClientId(clientId); - seVcRefund.setMoney(money); - seVcRefund.setRefundAmount(refundAmount); - seVcRefund.setAfterRefund(afterRefund); - seVcRefund.setApplicationTime(new Date()); - seVcRefund.setRefundStatus(RefundStateENUM.TO_AUDIT.getCode()); - - Long rec = virtualCardSv.addRefund(seVcRefund); - if(rec == 0) { - return BaseResponseUtils.buildFail(SellResultCode.APPLICATION_REFUND_FAIL.getMessage()); - } - return BaseResponseUtils.buildSuccess(true) ; - } + //@Operation(summary = "铏氭嫙鍗$敵璇烽��娆�", description = "铏氭嫙鍗$敵璇烽��娆�") + //@ApiResponses(value = { + // @ApiResponse( + // responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, + // description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�", + // content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, + // schema = @Schema(implementation = Boolean.class))} + // ) + //}) + //@PostMapping(path = "add_refund", consumes = MediaType.APPLICATION_JSON_VALUE) + //@Transactional(rollbackFor = Exception.class) + //@SsoAop() + //public BaseResponse<Boolean> addRefund(@RequestBody @Valid DtoRefund po, BindingResult bindingResult){ + // if(bindingResult != null && bindingResult.hasErrors()){ + // return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + // } + // + // Long virtualId = po.getVirtualId(); + // Integer refundAmount = po.getRefundAmount(); + // + // // 鏍规嵁铏氭嫙鍗D鑾峰彇铏氭嫙鍗″璞� + // SeVirtualCard seVirtualCard = virtualCardSv.selectVirtuCardById(virtualId); + // if(seVirtualCard == null) { + // return BaseResponseUtils.buildFail(SellResultCode.VIRTUAL_CARD_NOT_EXIST.getMessage()); + // } + // Long clientId = seVirtualCard.getClientId(); + // Double money = seVirtualCard.getMoney(); + // + // // 楠岃瘉閫�娆鹃噾棰濇槸鍚﹀ぇ浜庝綑棰� + // if(refundAmount > money) { + // return BaseResponseUtils.buildFail(SellResultCode.REFUND_AMOUNT_CANNOT_GREATER_THAN_MONEY.getMessage()); + // } + // + // // 璁$畻娑堣垂鍚庝綑棰� + // Double afterRefund = money - refundAmount; + // + // SeVcRefund seVcRefund = new SeVcRefund(); + // seVcRefund.setVcId(virtualId); + // seVcRefund.setClientId(clientId); + // seVcRefund.setMoney(money); + // seVcRefund.setRefundAmount(refundAmount); + // seVcRefund.setAfterRefund(afterRefund); + // seVcRefund.setApplicationTime(new Date()); + // seVcRefund.setRefundStatus(RefundStateENUM.TO_AUDIT.getCode()); + // + // Long rec = virtualCardSv.addRefund(seVcRefund); + // if(rec == 0) { + // return BaseResponseUtils.buildFail(SellResultCode.APPLICATION_REFUND_FAIL.getMessage()); + // } + // return BaseResponseUtils.buildSuccess(true) ; + //} /** * 瀹℃牳閫�娆剧敵璇� @@ -176,68 +187,83 @@ * @param bindingResult * @return */ - @Operation(summary = "瀹℃牳閫�娆剧敵璇�", description = "瀹℃牳閫�娆剧敵璇�") - @ApiResponses(value = { - @ApiResponse( - responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, - description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�", - content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, - schema = @Schema(implementation = Boolean.class))} - ) - }) - @PostMapping(path = "audit_refund", consumes = MediaType.APPLICATION_JSON_VALUE) - @Transactional(rollbackFor = Exception.class) + //@Operation(summary = "瀹℃牳閫�娆剧敵璇�", description = "瀹℃牳閫�娆剧敵璇�") + //@ApiResponses(value = { + // @ApiResponse( + // responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, + // description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�", + // content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, + // schema = @Schema(implementation = Boolean.class))} + // ) + //}) + //@PostMapping(path = "audit_refund", consumes = MediaType.APPLICATION_JSON_VALUE) + //@Transactional(rollbackFor = Exception.class) + //@SsoAop() + //public BaseResponse<Boolean> auditRefund(@RequestBody @Valid DtoAudit po, BindingResult bindingResult) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, IOException, SignatureException, InvalidKeyException { + // if(bindingResult != null && bindingResult.hasErrors()){ + // return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + // } + // + // // 鏍规嵁閫�娆綢D鑾峰彇閫�娆惧璞★紝骞舵洿鏂板鏍镐汉銆佸鏍告椂闂淬�佸鏍稿娉ㄣ�侀��娆剧姸鎬佸瓧娈� + // SeVcRefund seVcRefund = virtualCardSv.selectRefundByRefundId(po.getRefundId()); + // Long virtualId = seVcRefund.getVcId(); + // Integer refundAmount = seVcRefund.getRefundAmount(); + // seVcRefund.setAuditor(po.getAuditor()); + // seVcRefund.setAuditTime(new Date()); + // seVcRefund.setRemarks(po.getRemarks()); + // seVcRefund.setRefundStatus(RefundStateENUM.TO_REFUND.getCode()); + // Integer rec = virtualCardSv.updateRefund(seVcRefund); + // if(rec == 0) { + // return BaseResponseUtils.buildFail(SellResultCode.AUDIT_REFUND_FAIL.getMessage()); + // } + // + // // 瀹屾垚瀹℃牳鍚庤幏鍙栧緟閫�娆捐鍗曞垪琛� + // List<ToRefund> list_ToRefund = payHelper.getToRefunds(virtualId, refundAmount); + // if(list_ToRefund == null || list_ToRefund.size() <=0) + // return BaseResponseUtils.buildFail(SellResultCode.NOT_SUFFICIENT_FUNDS.getMessage()); + // + // //閬嶅巻寰呴��娆惧垪琛� + // JSONArray array_ToRefund = (JSONArray) JSON.toJSON(list_ToRefund); + // for(int i = 0; i < array_ToRefund.size(); i++) { + // JSONObject job_ToRefund = array_ToRefund.getJSONObject(i); + // String orderNumber_ToRefund = job_ToRefund.getString("orderNumber"); + // Integer refundAmount_ToRefund = job_ToRefund.getInteger("refundAmount"); + // + // // 鐢熸垚閫�娆惧垎椤硅褰� + // SeVcRefundItem seVcRefundItem = new SeVcRefundItem(); + // seVcRefundItem.setRefundId(po.getRefundId()); + // seVcRefundItem.setOrderNumber(orderNumber_ToRefund); + // String refundNumber = virtualCardSv.generateRefundNumber(orderNumber_ToRefund); + // seVcRefundItem.setRefundNumber(refundNumber); + // seVcRefundItem.setRefundAmount(refundAmount_ToRefund); + // seVcRefundItem.setCreateTime(new Date()); + // seVcRefundItem.setRefundStatus(RefundItemStateENUM.NO_REFUND.getCode()); + // Long refundItemId = virtualCardSv.addRefundItem(seVcRefundItem); + // + // // 璋冪敤寰俊閫�娆剧敵璇锋帴鍙� + // Refund refund = new Refund(); + // refund.setTradeNo(orderNumber_ToRefund); + // refund.setRefundNo(refundNumber); + // refund.setRefund(refundAmount_ToRefund); + // BaseResponse rep = payHelper.refunds(refund); + // } + // + // return BaseResponseUtils.buildSuccess(true) ; + //} + + /** + * 鑾峰彇铏氭嫙鍗″厖鍊艰褰� + * @return + */ + @GetMapping(path = "/getVcRechargeRecords") @SsoAop() - public BaseResponse<Boolean> auditRefund(@RequestBody @Valid DtoAudit po, BindingResult bindingResult) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, IOException, SignatureException, InvalidKeyException { - if(bindingResult != null && bindingResult.hasErrors()){ - return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + public BaseResponse<QueryResultVo<List<VoVcRecharge>>> getVcRechargeRecords(DtoVcRecharge dtoVcRecharge){ + try { + QueryResultVo<List<VoVcRecharge>> res = virtualCardSv.getVcRechargeRecords(dtoVcRecharge); + return BaseResponseUtils.buildSuccess(res); + } catch (Exception e) { + log.error("鑾峰彇铏氭嫙鍗″厖鍊艰褰曞紓甯�", e); + return BaseResponseUtils.buildException(e.getMessage()) ; } - - // 鏍规嵁閫�娆綢D鑾峰彇閫�娆惧璞★紝骞舵洿鏂板鏍镐汉銆佸鏍告椂闂淬�佸鏍稿娉ㄣ�侀��娆剧姸鎬佸瓧娈� - SeVcRefund seVcRefund = virtualCardSv.selectRefundByRefundId(po.getRefundId()); - Long virtualId = seVcRefund.getVcId(); - Integer refundAmount = seVcRefund.getRefundAmount(); - seVcRefund.setAuditor(po.getAuditor()); - seVcRefund.setAuditTime(new Date()); - seVcRefund.setRemarks(po.getRemarks()); - seVcRefund.setRefundStatus(RefundStateENUM.TO_REFUND.getCode()); - Integer rec = virtualCardSv.updateRefund(seVcRefund); - if(rec == 0) { - return BaseResponseUtils.buildFail(SellResultCode.AUDIT_REFUND_FAIL.getMessage()); - } - - // 瀹屾垚瀹℃牳鍚庤幏鍙栧緟閫�娆捐鍗曞垪琛� - List<ToRefund> list_ToRefund = payHelper.getToRefunds(virtualId, refundAmount); - if(list_ToRefund == null || list_ToRefund.size() <=0) - return BaseResponseUtils.buildFail(SellResultCode.NOT_SUFFICIENT_FUNDS.getMessage()); - - //閬嶅巻寰呴��娆惧垪琛� - JSONArray array_ToRefund = (JSONArray) JSON.toJSON(list_ToRefund); - for(int i = 0; i < array_ToRefund.size(); i++) { - JSONObject job_ToRefund = array_ToRefund.getJSONObject(i); - String orderNumber_ToRefund = job_ToRefund.getString("orderNumber"); - Integer refundAmount_ToRefund = job_ToRefund.getInteger("refundAmount"); - - // 鐢熸垚閫�娆惧垎椤硅褰� - SeVcRefundItem seVcRefundItem = new SeVcRefundItem(); - seVcRefundItem.setRefundId(po.getRefundId()); - seVcRefundItem.setOrderNumber(orderNumber_ToRefund); - String refundNumber = virtualCardSv.generateRefundNumber(orderNumber_ToRefund); - seVcRefundItem.setRefundNumber(refundNumber); - seVcRefundItem.setRefundAmount(refundAmount_ToRefund); - seVcRefundItem.setCreateTime(new Date()); - seVcRefundItem.setRefundStatus(RefundItemStateENUM.NO_REFUND.getCode()); - Long refundItemId = virtualCardSv.addRefundItem(seVcRefundItem); - - // 璋冪敤寰俊閫�娆剧敵璇锋帴鍙� - Refund refund = new Refund(); - refund.setTradeNo(orderNumber_ToRefund); - refund.setRefundNo(refundNumber); - refund.setRefund(refundAmount_ToRefund); - BaseResponse rep = payHelper.refunds(refund); - } - - return BaseResponseUtils.buildSuccess(true) ; } - } -- Gitblit v1.8.0