服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-09-29 564d1fcca01d3c528e283c9feef3ea1a05140e17
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
118
119
120
121
122
123
124
125
126
127
128
using Rhea.Common;
using Microsoft.AspNetCore.Mvc;
using System;
using Tiger.IBusiness;
using System.Linq;
using System.Threading.Tasks;
using Tiger.Model;
using System.Linq.Expressions;
 
namespace Tiger.Api.Controllers.Base
{
    public partial class CacheController : ControllerBase
    {
        /// <summary>
        /// GetCodeRule(ApiAction(Data:RULE_CODE))
        /// 根据条码规则代码返回条码规则对象
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GetCodeRule([FromBody] ApiAction action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache()[action.Data?.ToString() ?? ""]);
            }
            catch (System.Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
 
        /// <summary>
        /// GetCodeRuleType(ApiAction(Data:RULE_TYPE))
        /// 根据规则类型返回条码规则对象列表
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GetCodeRuleType([FromBody] ApiAction action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().Rules.Where(q => q.RULE_TYPE == (action.Data?.ToInt32() ?? -1)).ToList());
            }
            catch (Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
 
        /// <summary>
        /// TryGenerateCode(ApiAction(Data:{ RuleCode : "ruleCode", Args : ["arg1", "arg2"] }))
        /// 尝试生成条码,不保存到数据库
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> TryGenerateCode([FromBody] ApiAction<GenerateCodeEntity> action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().TryGenerate(action.Data?.RuleCode, action.Data?.Args));
            }
            catch (Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
 
        /// <summary>
        /// GenerateCode(ApiAction(Data:{ RuleCode : "ruleCode", Args : ["arg1", "arg2"] }))
        /// 生成条码
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GenerateCode([FromBody] ApiAction<GenerateCodeEntity> action)
        {
            ApiAction response;
            try
            {
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().Generate(action.Data?.RuleCode, action.Data?.Args));
            }
            catch (Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
 
        /// <summary>
        /// VerifyCode(ApiAction(Data:{ Code : "code", RuleCode : "ruleCode", RuleType : 0 }))
        /// 根据规则类型返回条码规则对象列表
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> VerifyCode([FromBody] ApiAction<VerifyCodeEntity> action)
        {
            ApiAction response;
            try
            {
                Expression<Func<BAS_CODE_RULE, bool>> predicate = q => true;
                if (!(action.Data?.RuleCode).IsNullOrEmpty())
                {
                    predicate = predicate.And(q => q.RULE_CODE == action.Data.RuleCode);
                }
                if (!(action.Data?.RuleType).IsNullOrEmpty())
                {
                    predicate = predicate.And(q => q.RULE_TYPE == action.Data.RuleType);
                }
                response = action.GetResponse(DI.Resolve<IDbCacheBus>().GetCodeRuleCache().Verify(action.Data?.Code, predicate.Compile()));
            }
            catch (Exception ex)
            {
                response = action.GetResponse().CatchExceptionWithLog(ex);
            }
            return Ok(response);
        }
    }
}