using DBUtility;
using Model;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Windows.Forms;
using WebAPI.Models;
using SyntacticSugar.constant;
namespace WebAPI.Controllers.项目管理.工程项目
{
    public class PM_ProjectBillController : ApiController
    {
        public DBUtility.ClsPub.Enum_BillStatus BillStatus;//单据状态(新增,修改,浏览,更新单价,变更)
        private json objJsonResult = new json();
        public DataSet ds = new DataSet();
        public SQLHelper.ClsCN oCN = new SQLHelper.ClsCN();
        public DAL.ClsSc_ICMOBill BillOld = new DAL.ClsSc_ICMOBill();
        string user_LongShan = "";
        string HName_LongShan = "";
        public DAL.ClsPM_WorkPlanMonthBillMain BillNew1 = new DAL.ClsPM_WorkPlanMonthBillMain();   //工作周总结对应单据类
        public DAL.ClsPM_WorkPlanMonthBillMain BillOld1 = new DAL.ClsPM_WorkPlanMonthBillMain();
        public DAL.ClsPM_WorkPlanMonthBillMain BillNew2 = new DAL.ClsPM_WorkPlanMonthBillMain();   //月度阶段计划对应单据类
        public DAL.ClsPM_WorkPlanMonthBillMain BillOld2 = new DAL.ClsPM_WorkPlanMonthBillMain();
        public DAL.ClsPM_CustomerTaskBillMain BillNew3 = new DAL.ClsPM_CustomerTaskBillMain();   //项目需求及问题清单对应单据类
        public DAL.ClsPM_CustomerTaskBillMain BillOld3 = new DAL.ClsPM_CustomerTaskBillMain();
        public DAL.ClsPM_ProjectMoneyBillMain BillNew4 = new DAL.ClsPM_ProjectMoneyBillMain();   //项目费用单对应单据类
        public DAL.ClsPM_ProjectMoneyBillMain BillOld4 = new DAL.ClsPM_ProjectMoneyBillMain();
        public DAL.ClsPM_ProjectBeginBillMain BillNew5 = new DAL.ClsPM_ProjectBeginBillMain();   //项目启动单对应单据类
        public DAL.ClsPM_ProjectBeginBillMain BillOld5 = new DAL.ClsPM_ProjectBeginBillMain();
        public DAL.ClsPM_ProjectEndBillMain BillNew6 = new DAL.ClsPM_ProjectEndBillMain();   //项目验收单对应单据类
        public DAL.ClsPM_ProjectEndBillMain BillOld6 = new DAL.ClsPM_ProjectEndBillMain();
        public DAL.ClsGy_ProjectMoneyBOMBill BillNew7 = new DAL.ClsGy_ProjectMoneyBOMBill();   //项目费用清单对应单据类
        public DAL.ClsGy_ProjectMoneyBOMBill BillOld7 = new DAL.ClsGy_ProjectMoneyBOMBill();
        #region 工程项目 新增/编辑
        #region 工程项目 表头数据
        public class PM_ProjectBill_Main
        {
            public int HInterID;
            public string HBillSubType;
            public string HBillNo;
            public string HProNumber;
            public string HProName;
            public int HCusID;
            public string HCusName;
            public string HBeginDate;
            public string HEndDate;
            public string HDate;
            public int HPMEmpID;
            public string HPMEmpName;
            public int HWorkEmpID;
            public string HWorkEmpName;
            public int HDepEmpID;
            public string HDepEmpName;
            public int HMaterID;
            public string HMaterNumber;
            public string HMaterName;
            public int HPayCusID;
            public string HPayCusName;
            public string HProType;
            public string HRemark;
            public int HOrgID;
            public string HMaker;
            public string HUpdater;
            public string HChecker;
            public string HMakerDate;
            public string HUpdaterDate;
            public string HCheckerDate;
            public string HCloseMan;
            public string HDeleteMan;
            public string HBacker;
            public string HCloseManDate;
            public string HDeleteManDate;
            public string HBackerDate;
            public string HBackRemark;
            public double HSumMoney;
            public double HProMoney;
            public double HWorkMoney;
            public double HOtherMoney;
            public int HConWorkDays;
            public int HDepDays;
            public double HLastMoney;
            public int HProjectClassID;
            public string HBuildComp;
            public string HBuildAddress;
            public string HWorkNo;
            public string HReDate;
            public string HPicNo;
            public string HWorkTask;
            public string HProjectNote;
            public string HContacts;
            public string HContactNumber;
            public int HDeptID;
            public int HSupplierID;                  //分包单位(gy_supllier)
            public int HMangerEmpID;                 //管理员(gy_Employee)
            public string HMaterPlanDate;               //材料计划 
            public int HWorkerID;                    //施工员(gy_Employee)
            public double HPlanWorkTimes;               //计划工期
            public double HRelWorkTimes;                //实际工期
            public string HTestDate;                    //试压日期
            public int HTestCheckerID;               //试压验收人(gy_Employee)
            public string HTestNote;                    //试压记录(富文本)
            public string HSewageDate;                  //排污日期
            public string HWaterSupplyDate;             //通水日期
            public string HWorkNote;                    //竣工资料(富文本)
            public string HWorkProcNote;                //施工完成情况(富文本)
            public double HYuSuanMoney;                 //预算造价
            public double HHeTongMoney;                 //合同造价
            public double HJieSuanMoney;                //结算造价
            public double HShenJiMoney;                 //审计造价
            public double HCaiLiaoMoney;                //材料费
            public double HAnZhuangMoney;               //安装费
            public double HBanZuMoney;                  //班组工费
            public double HYuShouKuanMoney;             //预收款
            public double HGongFeiMoney;                //工费结账
            public double HJieZhangMoney;				//结算结账
            public int HTaskClassID; //任务大类(Gy_TaskClass)
            public int HTaskClassEntryID; //任务项目分类(Gy_TaskClass)
            public string  HTaskAddress; //任务地点 
            public string  HBreakStatus; //损坏情况 
            public string  HWaterLeakage; //漏水量 
            public string  HPipeDiameter; //管径 
            public string  HPipeMaterial; //管道材质 
            public string  HAlarmEmp; //报漏人 
            public string  HAlarmLink; //报漏人联系电话 
            public string  HReceEmp; //受理人 
            public string  HReceTime; //受理时间(年月日时分秒) 
            public double HTaskMaterMoney; //任务材料费 
            public double HTaskSetupMoney; //任务安装费 
            public double HTaskOtherMoney; //任务附属费 
            public double HTaskExamMoney; //任务考核费 
            public double HTaskWorkMoney; //任务工费 
            public bool  HIsAccount; //是否结账(复选框)
            public string  HAccountDate; //结算结账日期 
            public string  HAccountWorkMoneyDate; //工费结账日期 
            public bool HIsCheckExam; //是否审核考核费(复选框)
            public bool HIsCheckWorkMoney; //是否审核工费(复选框)
            public string  HInfoBackTime; //回复时间(年月日时分秒) 
            public string HInfoBackMan; //回复人 
            public string HInfoNote; //回复内容(富文本) 
            public string  HTaskBTime; //任务开始时间(年月日时分秒) 
            public string  HTaskETime; //任务完工时间(年月日时分秒) 
            public string  HTaskNote; //任务详细内容(富文本) 
            public string  HTaskWorkEmp; //工作人员(富文本) 
            public string  HBeginCloseValveTime; //开始关阀时间(年月日时分秒) 
            public string  HEndCloseValveTime; //结束关阀时间(年月日时分秒)
            public long  HCloseValveQty; //关阀只数
            public string  HBeginOpenValveTime; //开始开阀时间(年月日时分秒) 
            public string  HEndOpenValveTime; //结束开阀时间(年月日时分秒) 
            public long HOpenValveQty; //开阀只数
            public string  HValveWorkEmp; //操作人员
            public string  HTaskRemark; //任务备注(富文本)
        }
        #endregion
        #region 工程项目 项目阶段表体数据
        public class PM_ProjectBill_ProjectStage
        {
            public int RowID;
            public int HProjectStageID;
            public string HProjectStageName;
            public string HStageNote;
            public int HPMGoodsID;
            public string HPMGoodsName;
            public bool HIsKey;
            public double HRate;
            public int HEmpID;
            public string HEmpName;
            public int HCheckEmpID;
            public string HCheckEmpName;
            public string HFinishDate;
            public double HWorkDays;
            public string HRemarkSub;
        }
        #endregion
        #region 工程项目 项目成员表体数据
        public class PM_ProjectBill_Employee
        {
            public int RowID;
            public int HEmployeeID;
            public string HEmployeeName;
            public bool HIsPM;
            public double HRate;
            public double HPlanAvgMoney;
            public double HPlanCountMoney;
            public string HRemarkSub;
        }
        #endregion
        #region 工程项目 新增/编辑
        /// 
        /// 新增单据-保存按钮
        ///参数:string sql。
        ///返回值:object。
        /// 
        [Route("PM_ProjectBill/AddBill")]
        [HttpPost]
        public object AddBill([FromBody] JObject sMainSub)
        {
            //获取参数
            var _value = sMainSub["sMainSub"].ToString();
            string msg1 = _value.ToString();
            //开始事务
            oCN.BeginTran();
            //保存主表
            objJsonResult = AddBillMain(msg1);
            if (objJsonResult.code == "0")
            {
                oCN.RollBack();
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = objJsonResult.Message;
                objJsonResult.data = null;
                return objJsonResult;
            }
            oCN.Commit();
            objJsonResult.code = "1";
            objJsonResult.count = 1;
            objJsonResult.Message = "新增单据成功!";
            objJsonResult.data = ds.Tables[0];
            return objJsonResult;
        }
        #endregion
        #region 添加 工程项目 主表
        public json AddBillMain(string msg1)
        {
            string[] sArray = msg1.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            string msg2 = sArray[0].ToString();
            string msg3 = sArray[1].ToString();
            string msg4 = sArray[2].ToString();
            int OperationType = int.Parse(sArray[3].ToString());//数据类型 1添加 3修改 2 复制
            string user = sArray[4].ToString();//用户名
            string HComputerName = SystemInformation.ComputerName; //设备名称
            user_LongShan = sArray[4].ToString();//用户名
            try
            {
                if(OperationType == 1)
                {
                    //判断是否有编辑权限
                    if (!DBUtility.ClsPub.Security_Log("Pm_ProjectBill_add", 1, false, user))
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "无新增权限!";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
                else if(OperationType == 3)
                {
                    //判断是否有编辑权限
                    if (!DBUtility.ClsPub.Security_Log("Pm_ProjectBill_edit", 1, false, user))
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "无编辑权限!";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
                
                msg2 = "[" + msg2.ToString() + "]";
                List mainList = Newtonsoft.Json.JsonConvert.DeserializeObject>(msg2);
                int HYear = int.Parse(mainList[0].HDate.Split('-')[0]);
                int HPeriod = int.Parse(mainList[0].HDate.Split('-')[1]);
                string HBillType = "4750";
                string HBillSubType = mainList[0].HBillSubType;
                int HInterID = mainList[0].HInterID;
                string HDate = mainList[0].HDate;
                string HBillNo = mainList[0].HBillNo;
                int HBillStatus = 1;
                string HRemark = mainList[0].HRemark;
                string HMaker = user;
                string HMakerDate = mainList[0].HMakerDate;
                string HProNumber = mainList[0].HProNumber;
                string HProName = mainList[0].HProName;
                int HCusID = mainList[0].HCusID;
                string HBeginDate = mainList[0].HBeginDate;
                string HEndDate = mainList[0].HEndDate;
                double HSumMoney = mainList[0].HSumMoney;
                double HProMoney = mainList[0].HProMoney;
                double HWorkMoney = mainList[0].HWorkMoney;
                double HOtherMoney = mainList[0].HOtherMoney;
                string HProType = mainList[0].HProType;
                int HPMEmpID = mainList[0].HPMEmpID;
                int HWorkEmpID = mainList[0].HWorkEmpID;
                int HDepEmpID = mainList[0].HDepEmpID;
                double HConWorkDays = mainList[0].HConWorkDays;
                double HDepDays = mainList[0].HDepDays;
                double HLastMoney = mainList[0].HLastMoney;
                int HPayCusID = mainList[0].HPayCusID;
                int HOrgID = mainList[0].HOrgID;
                int HMaterID = mainList[0].HMaterID;
                string HUpdater = mainList[0].HUpdater;
                string HUpdaterDate = mainList[0].HUpdaterDate;
                int HProjectClassID = mainList[0].HProjectClassID;
                string HBuildComp = mainList[0].HBuildComp;
                string HBuildAddress = mainList[0].HBuildAddress;
                string HWorkNo = mainList[0].HWorkNo;
                string HReDate = mainList[0].HReDate;
                string HPicNo = mainList[0].HPicNo;
                string HWorkTask = mainList[0].HWorkTask;
                string HProjectNote = mainList[0].HProjectNote;
                string HContacts = mainList[0].HContacts;
                string HContactNumber = mainList[0].HContactNumber;
                int HDeptID = mainList[0].HDeptID;  //部门
                int HSupplierID = mainList[0].HSupplierID;                      //分包单位(gy_supllier)
                int HMangerEmpID = mainList[0].HMangerEmpID;                    //管理员(gy_Employee)
                string HMaterPlanDate = mainList[0].HMaterPlanDate;             //材料计划 
                int HWorkerID = mainList[0].HWorkerID;                          //施工员(gy_Employee)
                double HPlanWorkTimes = mainList[0].HPlanWorkTimes;             //计划工期
                double HRelWorkTimes = mainList[0].HRelWorkTimes;               //实际工期
                string HTestDate = mainList[0].HTestDate;                       //试压日期
                int HTestCheckerID = mainList[0].HTestCheckerID;                //试压验收人(gy_Employee)
                string HTestNote = mainList[0].HTestNote;                       //试压记录(富文本)
                string HSewageDate = mainList[0].HSewageDate;                   //排污日期
                string HWaterSupplyDate = mainList[0].HWaterSupplyDate;         //通水日期
                string HWorkNote = mainList[0].HWorkNote;                       //竣工资料(富文本)
                string HWorkProcNote = mainList[0].HWorkProcNote;               //施工完成情况(富文本)
                double HYuSuanMoney = mainList[0].HYuSuanMoney;                 //预算造价
                double HHeTongMoney = mainList[0].HHeTongMoney;                 //合同造价
                double HJieSuanMoney = mainList[0].HJieSuanMoney;               //结算造价
                double HShenJiMoney = mainList[0].HShenJiMoney;                 //审计造价
                double HCaiLiaoMoney = mainList[0].HCaiLiaoMoney;               //材料费
                double HAnZhuangMoney = mainList[0].HAnZhuangMoney;             //安装费
                double HBanZuMoney = mainList[0].HBanZuMoney;                   //班组工费
                double HYuShouKuanMoney = mainList[0].HYuShouKuanMoney;         //预收款
                double HGongFeiMoney = mainList[0].HGongFeiMoney;               //工费结账
                double HJieZhangMoney = mainList[0].HJieZhangMoney;				//结算结账
                int HTaskClassID = mainList[0].HTaskClassID; //任务大类(Gy_TaskClass)
                int HTaskClassEntryID = mainList[0].HTaskClassEntryID; //任务项目分类(Gy_TaskClass)
                string HTaskAddress = mainList[0].HTaskAddress; //任务地点 
                string HBreakStatus = mainList[0].HBreakStatus; //损坏情况 
                string HWaterLeakage = mainList[0].HWaterLeakage; //漏水量 
                string HPipeDiameter = mainList[0].HPipeDiameter; //管径 
                string HPipeMaterial = mainList[0].HPipeMaterial; //管道材质 
                string HAlarmEmp = mainList[0].HAlarmEmp; //报漏人 
                string HAlarmLink = mainList[0].HAlarmLink; //报漏人联系电话 
                string HReceEmp = mainList[0].HReceEmp; //受理人 
                string HReceTime = mainList[0].HReceTime; //受理时间(年月日时分秒) 
                double HTaskMaterMoney = mainList[0].HTaskMaterMoney; //任务材料费 
                double HTaskSetupMoney = mainList[0].HTaskSetupMoney; //任务安装费 
                double HTaskOtherMoney = mainList[0].HTaskOtherMoney; //任务附属费 
                double HTaskExamMoney = mainList[0].HTaskExamMoney; //任务考核费 
                double HTaskWorkMoney = mainList[0].HTaskWorkMoney; //任务工费 
                bool HIsAccount = mainList[0].HIsAccount; //是否结账(复选框)
                string HAccountDate = mainList[0].HAccountDate; //结算结账日期 
                string HAccountWorkMoneyDate = mainList[0].HAccountWorkMoneyDate; //工费结账日期 
                bool HIsCheckExam = mainList[0].HIsCheckExam; //是否审核考核费(复选框)
                bool HIsCheckWorkMoney = mainList[0].HIsCheckWorkMoney; //是否审核工费(复选框)
                string HInfoBackTime = mainList[0].HInfoBackTime; //回复时间(年月日时分秒) 
                string HInfoBackMan = mainList[0].HInfoBackMan; //回复人 
                string HInfoNote = mainList[0].HInfoNote; //回复内容(富文本) 
                string HTaskBTime = mainList[0].HTaskBTime; //任务开始时间(年月日时分秒) 
                string HTaskETime = mainList[0].HTaskETime; //任务完工时间(年月日时分秒) 
                string HTaskNote = mainList[0].HTaskNote; //任务详细内容(富文本) 
                string HTaskWorkEmp = mainList[0].HTaskWorkEmp; //工作人员(富文本) 
                string HBeginCloseValveTime = mainList[0].HBeginCloseValveTime; //开始关阀时间(年月日时分秒) 
                string HEndCloseValveTime = mainList[0].HEndCloseValveTime; //结束关阀时间(年月日时分秒)
                long HCloseValveQty = mainList[0].HCloseValveQty; //关阀只数
                string HBeginOpenValveTime = mainList[0].HBeginOpenValveTime; //开始开阀时间(年月日时分秒) 
                string HEndOpenValveTime = mainList[0].HEndOpenValveTime; //结束开阀时间(年月日时分秒) 
                long HOpenValveQty = mainList[0].HOpenValveQty; //开阀只数
                string HValveWorkEmp = mainList[0].HValveWorkEmp; //操作人员
                string HTaskRemark = mainList[0].HTaskRemark; //任务备注(富文本)
                if (OperationType == 2)
                {
                    ds = oCN.RunProcReturn("select * from PM_ProjectBillMain where HBillNo ='" + HBillNo + "'", "PM_ProjectBillMain");
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "单据号重复,请重新输入!";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
                ds = oCN.RunProcReturn("select * from PM_ProjectBillMain where HInterID = " + HInterID + " and HBillNo = '" + HBillNo + "'", "PM_ProjectBillMain");
                if ((OperationType == 1 || OperationType == 2) && ds.Tables[0].Rows.Count == 0)//新增
                {
                    string sql = "insert into PM_ProjectBillMain" +
                        "(HYear,HPeriod,HBillType,HBillSubType,HInterID,HDate,HBillNo,HBillStatus,HRemark,HMaker,HMakeDate,HProNumber,HProName,HCusID,HBeginDate,HEndDate,HSumMoney," +
                        "HProMoney,HWorkMoney,HOtherMoney,HProType,HPMEmpID,HWorkEmpID,HDepEmpID,HConWorkDays,HDepDays,HLastMoney,HPayCusID,HOrgID,HMaterID,HProjectClassID,HBuildComp,HBuildAddress,HWorkNo,HReDate,HPicNo,HWorkTask,HProjectNote,HContacts,HContactNumber" +
                        ",HSupplierID,HMangerEmpID,HMaterPlanDate,HWorkerID,HPlanWorkTimes,HRelWorkTimes,HTestDate,HTestCheckerID,HTestNote,HSewageDate,HWaterSupplyDate,HWorkNote,HWorkProcNote,HYuSuanMoney,HHeTongMoney,HJieSuanMoney,HShenJiMoney,HCaiLiaoMoney,HAnZhuangMoney,HBanZuMoney,HYuShouKuanMoney,HGongFeiMoney,HJieZhangMoney," +
                        "HTaskClassID,HTaskClassEntryID,HTaskAddress,HBreakStatus,HWaterLeakage,HPipeDiameter,HPipeMaterial,HAlarmEmp,HAlarmLink,HReceEmp,HReceTime,HTaskMaterMoney,HTaskSetupMoney,HTaskOtherMoney,HTaskExamMoney,HTaskWorkMoney,HIsAccount,HAccountDate,HAccountWorkMoneyDate,HIsCheckExam,HIsCheckWorkMoney,HInfoBackTime,HInfoBackMan,HInfoNote,HTaskBTime,HTaskETime,HTaskNote,HTaskWorkEmp,HBeginCloseValveTime,HEndCloseValveTime,HCloseValveQty,HBeginOpenValveTime,HEndOpenValveTime,HOpenValveQty,HValveWorkEmp,HTaskRemark,HDeptID)" +
                        "values(" +
                        "" + HYear +
                        "," + HPeriod +
                        ",'" + HBillType +
                        "','" + HBillSubType +
                        "'," + HInterID +
                        ",'" + HDate +
                        "','" + HBillNo +
                        "'," + HBillStatus +
                        ",'" + HRemark +
                        "','" + HMaker +
                        "','" + HMakerDate +
                        "','" + HProNumber +
                        "','" + HProName +
                        "'," + HCusID +
                        ",'" + HBeginDate +
                        "','" + HEndDate +
                        "'," + HSumMoney +
                        "," + HProMoney +
                        "," + HWorkMoney +
                        "," + HOtherMoney +
                        ",'" + HProType +
                        "'," + HPMEmpID +
                        "," + HWorkEmpID +
                        "," + HDepEmpID +
                        "," + HConWorkDays +
                        "," + HDepDays +
                        "," + HLastMoney +
                        "," + HPayCusID +
                        "," + HOrgID +
                        "," + HMaterID +
                        "," + HProjectClassID +
                        ",'" + HBuildComp +
                        "','" + HBuildAddress +
                        "','" + HWorkNo +
                        "','" + HReDate +
                        "','" + HPicNo +
                        "','" + HWorkTask +
                        "','" + HProjectNote +
                        "','" + HContacts +
                        "','" + HContactNumber +
                        "','" + HSupplierID + "'" + 
                        ",'" + HMangerEmpID + "'" + 
                        ",'" + HMaterPlanDate + "'" + 
                        ",'" + HWorkerID + "'" + 
                        ",'" + HPlanWorkTimes + "'" + 
                        ",'" + HRelWorkTimes + "'" + 
                        ",'" + HTestDate + "'" + 
                        ",'" + HTestCheckerID + "'" + 
                        ",'" + HTestNote + "'" + 
                        ",'" + HSewageDate + "'" + 
                        ",'" + HWaterSupplyDate + "'" + 
                        ",'" + HWorkNote + "'" + 
                        ",'" + HWorkProcNote + "'" + 
                        ",'" + HYuSuanMoney + "'" + 
                        ",'" + HHeTongMoney + "'" + 
                        ",'" + HJieSuanMoney + "'" + 
                        ",'" + HShenJiMoney + "'" + 
                        ",'" + HCaiLiaoMoney + "'" + 
                        ",'" + HAnZhuangMoney + "'" + 
                        ",'" + HBanZuMoney + "'" + 
                        ",'" + HYuShouKuanMoney + "'" + 
                        ",'" + HGongFeiMoney + "'" + 
                        ",'" + HJieZhangMoney + "'" +
                        ",'" + HTaskClassID + "'" + ",'" + HTaskClassEntryID + "'" + ",'" + HTaskAddress + "'" + ",'" + HBreakStatus + "'" + ",'" + HWaterLeakage + "'" + ",'" + HPipeDiameter + "'" + ",'" + HPipeMaterial + "'" + 
                        ",'" + HAlarmEmp + "'" +",'" + HAlarmLink + "'" + ",'" + HReceEmp + "'" + ",'" + HReceTime + "'" + ",'" + HTaskMaterMoney + "'" + ",'" + HTaskSetupMoney + "'" + ",'" + HTaskOtherMoney + "'" +
                        ",'" + HTaskExamMoney + "'" + ",'" + HTaskWorkMoney + "'" + ",'" + (HIsAccount?1:0) + "'" + ",'" + HAccountDate + "'" + ",'" + HAccountWorkMoneyDate + "'" + ",'" + (HIsCheckExam ? 1 : 0) + "'" +
                        ",'" + (HIsCheckWorkMoney ? 1 : 0) + "'" + ",'" + HInfoBackTime + "'" + ",'" + HInfoBackMan + "'" + ",'" + HInfoNote + "'" + ",'" + HTaskBTime + "'" +
                        ",'" + HTaskETime + "'" + ",'" + HTaskNote + "'" + ",'" + HTaskWorkEmp + "'" + ",'" + HBeginCloseValveTime + "'" + ",'" + HEndCloseValveTime + "'" +
                        ",'" + HCloseValveQty + "'" + ",'" + HBeginOpenValveTime + "'" + ",'" + HEndOpenValveTime + "'" + ",'" + HOpenValveQty + "'" + ",'" + HValveWorkEmp + "'" + ",'" + HTaskRemark + "','" + HDeptID + "'" +
                        ")";
                    //主表
                    oCN.RunProc(sql);
                    LogService.Write("用户:" + user + ",日期:" + DateTime.Now + ",新增工程项目:" + HBillNo);
                    oCN.RunProc("Insert into System_log (GeginDate, userid, WorkstationName, WorkList, SystemName, NetuserName, State) select GETDATE(),'" + user + "','" + HComputerName + "','" + "新增工程项目:" + HBillNo + "','LMES-工程项目模块','" + DBUtility.ClsPub.IPAddress + "','新增单据'", ref DBUtility.ClsPub.sExeReturnInfo);
                }
                else if (OperationType == 3 || ds.Tables[0].Rows.Count != 0)                    //编辑
                {
                    string sql = "update PM_ProjectBillMain set " +
                        //"HYear = " + HYear +
                        //",HPeriod = " + HPeriod +
                        //",HBillType = '" + HBillType +
                        //"',HBillSubType = '" + HBillSubType +
                        //"',HDate = '" + HDate +
                        "HBillNo = '" + HBillNo +
                        //"',HBillStatus = " + HBillStatus +
                        "',HRemark = '" + HRemark +
                        "',HUpdater = '" + HUpdater +
                        "',HUpdateDate = '" + HUpdaterDate +
                        "',HProNumber = '" + HProNumber +
                        "',HProName = '" + HProName +
                        "',HCusID = " + HCusID +
                        ",HBeginDate = '" + HBeginDate +
                        "',HEndDate = '" + HEndDate +
                        "',HSumMoney = " + HSumMoney +
                        ",HProMoney = '" + HProMoney +
                        "',HWorkMoney = " + HWorkMoney +
                        ",HOtherMoney = " + HOtherMoney +
                        ",HProType = '" + HProType +
                        "',HPMEmpID = " + HPMEmpID +
                        ",HWorkEmpID = " + HWorkEmpID +
                        ",HDepEmpID = " + HDepEmpID +
                        ",HConWorkDays = " + HConWorkDays +
                        ",HDepDays = '" + HDepDays +
                        "',HLastMoney = " + HLastMoney +
                        ",HPayCusID = " + HPayCusID +
                        ",HOrgID = " + HOrgID +
                        ",HMaterID = " + HMaterID +
                        ",HProjectClassID = " + HProjectClassID +
                        ",HBuildComp = '" + HBuildComp +
                        "',HBuildAddress = '" + HBuildAddress +
                        "',HWorkNo = '" + HWorkNo +
                        "',HReDate = '" + HReDate +
                        "',HPicNo = '" + HPicNo +
                        "',HWorkTask = '" + HWorkTask +
                        "',HProjectNote ='" + HProjectNote +
                        "',HContacts ='" + HContacts +
                        "',HContactNumber ='" + HContactNumber +
                        "',HSupplierID = '" + HSupplierID +
                        "',HMangerEmpID = '" + HMangerEmpID +
                        "',HMaterPlanDate = '" + HMaterPlanDate +
                        "',HWorkerID = '" + HWorkerID +
                        "',HPlanWorkTimes = '" + HPlanWorkTimes +
                        "',HRelWorkTimes = '" + HRelWorkTimes +
                        "',HTestDate = '" + HTestDate +
                        "',HTestCheckerID = '" + HTestCheckerID +
                        "',HTestNote = '" + HTestNote +
                        "',HSewageDate = '" + HSewageDate +
                        "',HWaterSupplyDate = '" + HWaterSupplyDate +
                        "',HWorkNote = '" + HWorkNote +
                        "',HWorkProcNote = '" + HWorkProcNote +
                        "',HYuSuanMoney = '" + HYuSuanMoney +
                        "',HHeTongMoney = '" + HHeTongMoney +
                        "',HJieSuanMoney = '" + HJieSuanMoney +
                        "',HShenJiMoney = '" + HShenJiMoney +
                        "',HCaiLiaoMoney = '" + HCaiLiaoMoney +
                        "',HAnZhuangMoney = '" + HAnZhuangMoney +
                        "',HBanZuMoney = '" + HBanZuMoney +
                        "',HYuShouKuanMoney = '" + HYuShouKuanMoney +
                        "',HGongFeiMoney = '" + HGongFeiMoney +
                        "',HJieZhangMoney = '" + HJieZhangMoney +
                        "',HTaskClassID = '" + HTaskClassID + "',HTaskClassEntryID = '" + HTaskClassEntryID + "',HTaskAddress = '" + HTaskAddress + "',HBreakStatus = '" + HBreakStatus + "',HWaterLeakage = '" + HWaterLeakage + "',HPipeDiameter = '" + HPipeDiameter +
                        "',HPipeMaterial = '" + HPipeMaterial + "',HAlarmEmp = '" + HAlarmEmp + "',HAlarmLink = '" + HAlarmLink + "',HReceEmp = '" + HReceEmp + "',HReceTime = '" + HReceTime + "',HTaskMaterMoney = '" + HTaskMaterMoney +
                        "',HTaskSetupMoney = '" + HTaskSetupMoney + "',HTaskOtherMoney = '" + HTaskOtherMoney + "',HTaskExamMoney = '" + HTaskExamMoney + "',HTaskWorkMoney = '" + HTaskWorkMoney + "',HIsAccount = '" + (HIsAccount?1:0) + "',HAccountDate = '" + HAccountDate +
                        "',HAccountWorkMoneyDate = '" + HAccountWorkMoneyDate + "',HIsCheckExam = '" + (HIsCheckExam?1:0) + "',HIsCheckWorkMoney = '" + (HIsCheckWorkMoney?1:0) + "',HInfoBackTime = '" + HInfoBackTime + "',HInfoBackMan = '" + HInfoBackMan + "',HInfoNote = '" + HInfoNote +
                        "',HTaskBTime = '" + HTaskBTime + "',HTaskETime = '" + HTaskETime + "',HTaskNote = '" + HTaskNote + "',HTaskWorkEmp = '" + HTaskWorkEmp + "',HBeginCloseValveTime = '" + HBeginCloseValveTime + "',HEndCloseValveTime = '" + HEndCloseValveTime +
                        "',HCloseValveQty = '" + HCloseValveQty + "',HBeginOpenValveTime = '" + HBeginOpenValveTime + "',HEndOpenValveTime = '" + HEndOpenValveTime + "',HOpenValveQty = '" + HOpenValveQty + "',HValveWorkEmp = '" + HValveWorkEmp + "',HTaskRemark = '" + HTaskRemark + "',HDeptID = '" + HDeptID + "'" +
                        " where HInterID = " + HInterID;
                    oCN.RunProc(sql);
                    //删除子表
                    oCN.RunProc("delete from PM_ProjectBillSub_Emp where HInterID='" + HInterID + "'");
                    oCN.RunProc("delete from PM_ProjectBillSub where HInterID='" + HInterID + "'");
                    //记录日志
                    LogService.Write("用户:" + user + ",日期:" + DateTime.Now + ",修改项目工程:" + HBillNo);
                    oCN.RunProc("Insert into System_log (GeginDate, userid, WorkstationName, WorkList, SystemName, NetuserName, State) select GETDATE(),'" + user + "','" + HComputerName + "','" + "修改项目工程:" + HBillNo + "','LMES-项目工程模块','" + DBUtility.ClsPub.IPAddress + "','修改单据'", ref DBUtility.ClsPub.sExeReturnInfo);
                }
                //保存子表
                objJsonResult = AddBillSub1(msg3, HInterID, HBillNo, OperationType);
                objJsonResult = AddBillSub2(msg4, HInterID, HBillNo, OperationType);
                if (objJsonResult.code == "0")
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = objJsonResult.Message;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
               
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = null;
                objJsonResult.data = null;
                return objJsonResult;
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region 添加工程项目 表体:项目阶段表
        public json AddBillSub1(string msg3, long HInterID, string HBillNo, int OperationType)
        {
            List DetailColl = Newtonsoft.Json.JsonConvert.DeserializeObject>(msg3);
            int i = 0;                                          //作为子表内码
            foreach (PM_ProjectBill_ProjectStage oSub in DetailColl)
            {
                i++;                                            //同一个主表下的子表的内码自增
                int HEntryID = i;
                string HRemark = oSub.HRemarkSub;
                int HProjectStageID = oSub.HProjectStageID;
                string HStageNote = oSub.HStageNote;
                int HPMGoodsID = oSub.HPMGoodsID;
                string HRelationGoods = oSub.HPMGoodsName;
                int HIsKey = oSub.HIsKey?1:0;
                double HRate = oSub.HRate;
                int HEmpID = oSub.HEmpID;
                int HCheckEmpID = oSub.HCheckEmpID;
                string HFinishDate = oSub.HFinishDate;
                double HWorkDays = oSub.HWorkDays;
                string sql = "insert into PM_ProjectBillSub" +
                    "(HInterID,HBillNo_bak,HEntryID,HRemark,HProjectStageID,HStageNote,HPMGoodsID,HRelationGoods,HIsKey,HRate,HEmpID,HCheckEmpID,HFinishDate,HWorkDays) " +
                    "values(" +
                    "" + HInterID +
                    ",'" + HBillNo +
                    "'," + HEntryID +
                    ",'" + HRemark +
                    "'," + HProjectStageID +
                    ",'" + HStageNote +
                    "'," + HPMGoodsID +
                    ",'" + HRelationGoods +
                    "'," + HIsKey +
                    "," + HRate +
                    "," + HEmpID +
                    "," + HCheckEmpID +
                    ",'" + HFinishDate +
                    "'," + HWorkDays +
                    ")";
                oCN.RunProc(sql);
            }
            objJsonResult.code = "1";
            objJsonResult.count = 1;
            objJsonResult.Message = null;
            objJsonResult.data = null;
            return objJsonResult;
        }
        #endregion
        #region 添加工程项目 表体:项目成员表
        public json AddBillSub2(string msg3, long HInterID, string HBillNo, int OperationType)
        {
            List DetailColl = Newtonsoft.Json.JsonConvert.DeserializeObject>(msg3);
            int i = 0;                                          //作为子表内码
            foreach (PM_ProjectBill_Employee oSub in DetailColl)
            {
                i++;                                            //同一个主表下的子表的内码自增
                int HEntryID = i;
                string HRemark = oSub.HRemarkSub;
                int HEmpID = oSub.HEmployeeID;
                int HIsPM = oSub.HIsPM?1:0;
                double HRate = oSub.HRate;
                double HPlanAvgMoney = oSub.HPlanAvgMoney;
                double HPlanCountMoney = oSub.HPlanCountMoney;
                string sql = "insert into PM_ProjectBillSub_Emp" +
                    "(HInterID,HBillNo_bak,HEntryID,HRemark,HEmpID,HIsPM,HRate,HPlanAvgMoney,HPlanCountMoney) " +
                    "values(" +
                    "" + HInterID +
                    ",'" + HBillNo +
                    "'," + HEntryID +
                    ",'" + HRemark +
                    "'," + HEmpID +
                    "," + HIsPM +
                    "," + HRate +
                    "," + HPlanAvgMoney +
                    "," + HPlanCountMoney +
                    ")";
                oCN.RunProc(sql);
            }
            objJsonResult.code = "1";
            objJsonResult.count = 1;
            objJsonResult.Message = null;
            objJsonResult.data = null;
            return objJsonResult;
        }
        #endregion
        #endregion
        #region 工程项目 查询
        /// 
        /// 返回项目阶段列表
        ///参数:string sql。
        ///返回值:object。
        /// 
        [Route("PM_ProjectBill/list")]
        [HttpGet]
        public object getProjectBill(string sWhere, string user)
        {
            try
            {
                List