Blame view

service-fee/src/main/java/com/java110/fee/cmd/feeConfig/SaveFeeConfigCmd.java 5.2 KB
88e030b7   王彪总   init project
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  /**
   * 费用配置保存命令类
   * 
   * 该类负责处理费用配置的保存操作,包括参数验证和业务逻辑处理
   * 通过注解@Java110Cmd声明服务代码为"feeConfig.saveFeeConfig"
   * 继承自Cmd基类,实现命令模式的处理流程
   * 
   * @author Java110
   * @version 1.0
   * @since 2023
   */
  package com.java110.fee.cmd.feeConfig;
  
  import com.alibaba.fastjson.JSONObject;
  import com.java110.core.annotation.Java110Cmd;
  import com.java110.core.annotation.Java110Transactional;
  import com.java110.core.context.ICmdDataFlowContext;
  import com.java110.core.event.cmd.Cmd;
  import com.java110.core.event.cmd.CmdEvent;
  import com.java110.core.factory.GenerateCodeFactory;
  import com.java110.dto.fee.FeeConfigDto;
  import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
  import com.java110.po.fee.PayFeeConfigPo;
  import com.java110.utils.exception.CmdException;
  import com.java110.utils.util.Assert;
  import com.java110.utils.util.BeanConvertUtil;
  import com.java110.vo.ResultVo;
  import org.springframework.beans.factory.annotation.Autowired;
  
  @Java110Cmd(serviceCode = "feeConfig.saveFeeConfig")
  public class SaveFeeConfigCmd extends Cmd {
  
      /**
       * 费用配置服务接口,用于操作费用配置数据
       */
      @Autowired
      private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
  
      /**
       * 参数验证方法
       * 
       * 验证请求参数是否完整和有效,包括必填字段检查和业务规则验证
9750b443   王彪总   fix(config): 更新配置...
43
       * 主要验证费用名称在项目内的唯一性
88e030b7   王彪总   init project
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
       * 
       * @param event 命令事件对象,包含事件相关信息
       * @param cmdDataFlowContext 命令数据流上下文,用于获取和设置请求响应数据
       * @param reqJson 请求参数的JSON对象
       * @throws CmdException 当参数验证失败或业务规则不满足时抛出异常
       */
      @Override
      public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
          // 验证必填字段是否存在
          Assert.hasKeyAndValue(reqJson, "feeTypeCd", "必填,请选择费用类型");
          Assert.hasKeyAndValue(reqJson, "feeName", "必填,请填写收费项目");
          Assert.hasKeyAndValue(reqJson, "feeFlag", "必填,请选择费用标识");
          Assert.hasKeyAndValue(reqJson, "startTime", "必填,请选择计费起始时间");
          Assert.hasKeyAndValue(reqJson, "endTime", "必填,请选择计费终止时间");
          Assert.hasKeyAndValue(reqJson, "computingFormula", "必填,请填写附加费用");
          Assert.hasKeyAndValue(reqJson, "squarePrice", "必填,请填写计费单价");
          Assert.hasKeyAndValue(reqJson, "additionalAmount", "必填,请填写附加费用");
9750b443   王彪总   fix(config): 更新配置...
61
          Assert.hasKeyAndValue(reqJson, "communityId", "未包含项目ID");
88e030b7   王彪总   init project
62
63
64
65
66
          Assert.hasKeyAndValue(reqJson, "billType", "未包含出账类型");
          Assert.hasKeyAndValue(reqJson, "paymentCd", "付费类型不能为空");
          Assert.hasKeyAndValue(reqJson, "paymentCycle", "缴费周期不能为空");
          Assert.hasKeyAndValue(reqJson, "state", "状态不能为空");
  
9750b443   王彪总   fix(config): 更新配置...
67
          // 校验费用名称在项目内的唯一性
88e030b7   王彪总   init project
68
69
70
          // 避免重复的费用名称导致管理混乱
          FeeConfigDto feeConfigDto = new FeeConfigDto();
          feeConfigDto.setFeeName(reqJson.getString("feeName"));        // 设置费用名称
9750b443   王彪总   fix(config): 更新配置...
71
          feeConfigDto.setCommunityId(reqJson.getString("communityId")); // 设置项目ID
88e030b7   王彪总   init project
72
73
          feeConfigDto.setIsDefault("F");                               // 设置非默认费用标识
          
9750b443   王彪总   fix(config): 更新配置...
74
          // 查询相同费用名称在项目内的数量
88e030b7   王彪总   init project
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
          int count = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigsCount(feeConfigDto);
  
          // 如果已存在相同名称的费用配置,抛出异常
          if(count > 0){
              throw new CmdException(reqJson.getString("feeName")+"已存在");
          }
  
      }
  
      /**
       * 执行保存费用配置命令
       * 
       * 生成配置ID,转换数据对象并保存费用配置信息
       * 使用事务注解确保数据操作的原子性
       * 
       * @param event 命令事件对象
       * @param cmdDataFlowContext 命令数据流上下文
       * @param reqJson 请求参数的JSON对象
       * @throws CmdException 当保存操作失败时抛出异常
       */
      @Override
      @Java110Transactional
      public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
          // 生成唯一的配置ID
          reqJson.put("configId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_configId));
          // 设置费用配置为非默认配置
          reqJson.put("isDefault", "F");
          
          // 将JSON对象转换为费用配置持久化对象
          PayFeeConfigPo payFeeConfigPo = BeanConvertUtil.covertBean(reqJson, PayFeeConfigPo.class);
  
          // 调用服务保存费用配置,返回影响的行数
          int flag = payFeeConfigV1InnerServiceSMOImpl.savePayFeeConfig(payFeeConfigPo);
  
          // 检查保存是否成功,失败则抛出异常
          if (flag < 1) {
              throw new CmdException("保存费用项失败");
          }
  
          // 设置响应结果为成功
          cmdDataFlowContext.setResponseEntity(ResultVo.success());
      }
  }