package com.dy.pipIrrSell.general; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.common.webUtil.ResultCodeMsg; import com.dy.pipIrrGlobal.pojoBa.BaClient; import com.dy.pipIrrGlobal.pojoSe.SeAudits; import com.dy.pipIrrGlobal.pojoSe.SeGeneral; import com.dy.pipIrrGlobal.voSe.VoGeneral; import com.dy.pipIrrSell.general.dto.DtoGeneral; import com.dy.pipIrrSell.general.qo.QoGeneral; import com.dy.pipIrrSell.general.qo.QoSummary; import com.dy.pipIrrSell.general.qo.QoToAudit; import com.dy.pipIrrSell.result.SellResultCode; 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.web.bind.annotation.*; import java.util.*; /** * @author ZhuBaoMin * @date 2024-01-24 19:01 * @LastEditTime 2024-01-24 19:01 * @Description */ @Slf4j @Tag(name = "总账管理", description = "总账管理") @RestController @RequestMapping(path="general") @RequiredArgsConstructor public class GeneralCtrl { private final GeneralSv generalSv; /** * 根据指定条件获取总账记录 * 查询前先生成未生成的总账记录 * @param vo * @return */ @Operation(summary = "获取总账记录", description = "获取总账记录") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页农户数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = BaClient.class))} ) }) @GetMapping(path = "get_generals") @SsoAop() public BaseResponse>> getOperates(QoGeneral vo){ try { add_general(); QueryResultVo> res = generalSv.getGenerals(vo); if(res.itemTotal > 0) { return BaseResponseUtils.buildSuccess(res); }else { return BaseResponseUtils.buildFail(SellResultCode.No_GENERALS.getMessage()); } } catch (Exception e) { log.error("查询交易记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 生成总账 * 获取未生成总账的交易日期列表(当天的交易记录不生成总账) * 将指定日期的交易记录汇总到总账表 * @return */ public void add_general(){ // 获取未生成总账的交易日期列表(当天的交易记录不生成总账) List> list_operateDate = Optional.ofNullable(generalSv.getDatesOfNotInGenerals()).orElse(new ArrayList<>()); if(list_operateDate.size() > 0) { for(int i = 0; i < list_operateDate.size(); i++) { String operateDate = list_operateDate.get(i).get("operateDate").toString(); // 根据交易日期获取总账记录列表(待生成的) List list_general = Optional.ofNullable(generalSv.getGeneralByOperateDate(operateDate)).orElse(new ArrayList<>()); if(list_general.size() > 0) { for(int j = 0; j < list_general.size(); j++) { SeGeneral general = list_general.get(j); generalSv.addGeneral(general); } } } } } /** * 审核总账 * 1. 修改总账审核状态 * 2. 添加总账审核记录 * @param po * @param bindingResult * @return */ @Operation(summary = "审核总账", description = "审核总账") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "操作结果:true:成功,false:失败(BaseResponse.content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @PostMapping(path = "audit", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse audit(@RequestBody @Valid DtoGeneral po, BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } Long generalId = po.getGeneralId(); Byte auditStatus = po.getAuditStatus(); String auditOpinion = po.getAuditOpinion(); Long operator = po.getOperator(); Date auditTime = new Date(); if(generalId == null) { return BaseResponseUtils.buildFail(SellResultCode.GENERAL_ID_CANNOT_BE_NULL.getMessage()); } /** * 判断总账是否存在 */ if(generalSv.getGeneralById(generalId) == null) { return BaseResponseUtils.buildFail(SellResultCode.GENERAL_NOT_EXIST.getMessage()); } /** * 修改总账审核状态 */ SeGeneral seGeneral = new SeGeneral(); seGeneral.setId(generalId); seGeneral.setAuditStatus(auditStatus); Integer rec_updateGeneral = Optional.ofNullable(generalSv.updateGeneral(seGeneral)).orElse(0); if(rec_updateGeneral == 0) { return BaseResponseUtils.buildFail(SellResultCode.GENERAL_AUDIT_FAIL.getMessage()); } /** * 添加总账审核记录 */ SeAudits seAudits = new SeAudits(); seAudits.setGeneralId(generalId); seAudits.setAuditStatus(auditStatus); seAudits.setAuditOpinion(auditOpinion); seAudits.setOperator(operator); seAudits.setOperateDt(auditTime); Integer rec_addAucits = Optional.ofNullable(generalSv.addAudits(seAudits)).orElse(0); if(rec_addAucits == 0) { return BaseResponseUtils.buildFail(SellResultCode.AUDITS_ADD_FAIL.getMessage()); } return BaseResponseUtils.buildSuccess() ; } /** * 开卡系统交易汇总查询与对账系统交易汇总查询共用接口 * 开卡系统参数:收银员ID、查询起止日期 * 对账系统参数:收银员ID、交易日期 * @param vo * @return */ @Operation(summary = "获得开卡系统交易统计记录", description = "返回开卡系统交易统计记录") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页农户数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = BaClient.class))} ) }) @GetMapping(path = "getSummaries") @SsoAop() public BaseResponse getSummaries(QoSummary vo){ try { Map res = generalSv.getSummaries(vo); return BaseResponseUtils.buildSuccess(res); } catch (Exception e) { log.error("查询交易汇总记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 获取财务对账_交易明细 * @param vo * @return */ @Operation(summary = "获取财务对账_交易明细", description = "获取财务对账_交易明细") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回一页农户数据(BaseResponse.content:QueryResultVo[{}])", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = BaClient.class))} ) }) @GetMapping(path = "get_trade_details") @SsoAop() public BaseResponse getTradeDetails(QoToAudit vo){ try { Map res = Optional.ofNullable(generalSv.getTradeDetails(vo)).orElse(new HashMap()); if(res.size() > 0) { return BaseResponseUtils.buildSuccess(res); }else { return BaseResponseUtils.buildFail(SellResultCode.No_TRADE_DETAILS.getMessage()); } } catch (Exception e) { log.error("查询交易记录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } } }