c#解析类 Evaluator 实现动态流程之Demo

1、假设数据库保存的流程如下:

decimal 每月工作日 = 30M; /*定义每个月的工作天数*/

decimal 病假计薪天数 = 7M; /*定义病假最高的薪天数*/
decimal 超出计薪天数 = 请假天数 - 病假计薪天数; /*计算超出计薪天数*/
decimal 应扣工资 = 0.00M; /*定义应扣工资*/

if (基本工资 > 0 && 岗位工资 > 0 && 请假天数 > 0 && 扣款率 > 0) /*如果传入的参数都不为0 */
{
if (超出计薪天数 > 0)
{
应扣工资 = (((基本工资 + 岗位工资) / 每月工作日) * 超出计薪天数) + ((((基本工资 * 扣款率) / 每月工作日) * 病假计薪天数) + ((岗位工资/每月工作日)* 请假天数));
}
else
{
应扣工资 = (((基本工资 * 扣款率) / 每月工作日) * 请假天数) + ((岗位工资 / 每月工作日)*请假天数);
}
}

return 应扣工资.ToString("0.00");

/// <summary>
/// 计算病假扣款
/// </summary>
/// <param name="BasePay">基本工资</param>
/// <param name="days">请假天数</param>
/// <returns>病假应扣工资</returns>
private string ReckonSickLeaveDeduct(decimal BasePay, decimal PostPay, decimal Days, decimal rateOfDeduct)
{
MethodResults stringChanger = null;
StringBuilder source = new StringBuilder();
source.Append("public string RSickLeaveDeduct(decimal 基本工资, decimal 岗位工资, decimal 请假天数, decimal 扣款率)");
source.Append(Environment.NewLine);
source.Append("{");
source.Append(Environment.NewLine);
source.Append(comdao.GetConstDefine("病假扣款公式").Value);
source.Append(Environment.NewLine);
source.Append("}");
try
{
stringChanger = Evaluator.Eval.CreateVirtualMethod(
new CSharpCodeProvider().CreateCompiler(),
source.ToString(),
"RSickLeaveDeduct",
new CSharpLanguage(),
false);
}
catch (CompilationException ce)
{
Logger.Instance("Exception").Error(ce.Message);
return "0.00";
}

try
{
string s = (string)stringChanger.Invoke(new object[] { BasePay, PostPay, Days, rateOfDeduct });
return s;
}
catch (System.Reflection.TargetInvocationException tie)
{
Logger.Instance("Exception").Error("Method-Thrown Exception: " + Environment.NewLine + tie.InnerException.ToString());
return "0.00";
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值