Beispiel #1
0
        /// <summary>
        /// 服务编辑
        /// </summary>
        /// <param name="ser"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool EditService(ivt_service ser, long userId)
        {
            ivt_service_dal dal     = new ivt_service_dal();
            ivt_service     service = dal.FindById(ser.id);
            ivt_service     serOld  = dal.FindById(ser.id);

            service.update_time         = Tools.Date.DateHelper.ToUniversalTimeStamp();
            service.update_user_id      = userId;
            service.name                = ser.name;
            service.description         = ser.description;
            service.invoice_description = ser.invoice_description;
            service.sla_id              = ser.sla_id;
            service.vendor_account_id   = ser.vendor_account_id;
            service.period_type_id      = ser.period_type_id;
            service.unit_cost           = ser.unit_cost;
            service.unit_price          = ser.unit_price;
            service.cost_code_id        = ser.cost_code_id;
            service.is_active           = ser.is_active;

            var desc = OperLogBLL.CompareValue <ivt_service>(serOld, service);

            if (!string.IsNullOrEmpty(desc))
            {
                dal.Update(service);
                OperLogBLL.OperLogUpdate(desc, service.id, userId, DTO.DicEnum.OPER_LOG_OBJ_CATE.IVT_SERVICE, "编辑服务");
            }
            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// 设置邮件模板默认
        /// </summary>
        /// <param name="id"></param>
        /// <param name="type"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool SetDefault(long id, int type, long userId)
        {
            var tmpl = dal.FindNoDeleteById(id);

            if (tmpl == null || tmpl.is_system_default == 1)
            {
                return(false);
            }

            sys_quote_email_tmpl old;
            var dft = dal.FindSignleBySql <sys_quote_email_tmpl>($"select * from sys_quote_email_tmpl where is_system_default=1 and cate_id={type}");

            if (dft != null)
            {
                old = dal.FindById(dft.id);
                dft.is_system_default = 0;
                dft.update_time       = Tools.Date.DateHelper.ToUniversalTimeStamp();
                dft.update_user_id    = userId;
                dal.Update(dft);
                OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_quote_email_tmpl>(old, dft), dft.id, userId, DicEnum.OPER_LOG_OBJ_CATE.QUOTE_TEMP, "取消邮件模板默认");
            }

            old = dal.FindById(tmpl.id);
            tmpl.is_system_default = 1;
            tmpl.update_time       = Tools.Date.DateHelper.ToUniversalTimeStamp();
            tmpl.update_user_id    = userId;
            dal.Update(tmpl);
            OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_quote_email_tmpl>(old, tmpl), tmpl.id, userId, DicEnum.OPER_LOG_OBJ_CATE.QUOTE_TEMP, "设置邮件模板默认");

            return(true);
        }
Beispiel #3
0
        /// <summary>
        /// 编辑工作流规则
        /// </summary>
        /// <param name="workflow"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool EditWorkflow(sys_workflow workflow, long userId)
        {
            sys_workflow wf    = dal.FindById(workflow.id);
            sys_workflow wfOld = dal.FindById(workflow.id);

            if (wf.workflow_object_id != workflow.workflow_object_id)   // 编辑不能修改对象类型
            {
                return(false);
            }

            wf.update_time      = Tools.Date.DateHelper.ToUniversalTimeStamp();
            wf.update_user_id   = userId;
            wf.name             = workflow.name;
            wf.description      = workflow.description;
            wf.is_active        = workflow.is_active;
            wf.use_default_tmpl = workflow.use_default_tmpl;
            wf.notify_tmpl_id   = workflow.notify_tmpl_id;
            wf.notify_subject   = workflow.notify_subject;
            wf.event_json       = workflow.event_json;
            wf.condition_json   = workflow.condition_json;
            wf.update_json      = workflow.update_json;

            string desc = OperLogBLL.CompareValue <sys_workflow>(wfOld, wf);

            if (!string.IsNullOrEmpty(desc))
            {
                dal.Update(wf);
                OperLogBLL.OperLogUpdate(desc, wf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.WORKFLOW_RULE, "编辑工作流规则");
            }

            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// 取消提交工时表
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="resourceId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool CancleSubmitWorkEntry(DateTime startDate, long resourceId, long userId)
        {
            var weList = GetWorkEntryListByStartDate(startDate, resourceId);

            if (weList.Count == 0)
            {
                return(false);
            }

            sdk_work_entry_report_dal rptDal = new sdk_work_entry_report_dal();

            var find = rptDal.FindSignleBySql <sdk_work_entry_report>($"select * from sdk_work_entry_report where resource_id={resourceId} and start_date='{startDate}' and delete_time=0");

            if (find == null || find.status_id != (int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL)
            {
                return(false);
            }

            sdk_work_entry_report reportOld = rptDal.FindById(find.id);

            find.status_id      = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.HAVE_IN_HAND;
            find.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
            find.update_user_id = userId;
            find.submit_time    = find.update_time;
            find.submit_user_id = userId;
            rptDal.Update(find);
            OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry_report>(reportOld, find), find.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表取消提交");

            return(true);
        }
Beispiel #5
0
        /// <summary>
        /// 工时表提交
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="resourceId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool SubmitWorkEntry(DateTime startDate, long resourceId, long userId)
        {
            var weList = GetWorkEntryListByStartDate(startDate, resourceId);
            //if (weList.Count == 0)
            //    return false;

            sdk_work_entry_report     report = new sdk_work_entry_report();
            sdk_work_entry_report_dal rptDal = new sdk_work_entry_report_dal();

            var find = rptDal.FindSignleBySql <sdk_work_entry_report>($"select * from sdk_work_entry_report where resource_id={resourceId} and start_date='{startDate}' and delete_time=0");

            if (find != null && find.status_id != (int)DicEnum.WORK_ENTRY_REPORT_STATUS.HAVE_IN_HAND && find.status_id != (int)DicEnum.WORK_ENTRY_REPORT_STATUS.REJECTED)
            {
                return(false);
            }

            if (find == null)
            {
                report.id             = rptDal.GetNextIdCom();
                report.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                report.update_time    = report.create_time;
                report.create_user_id = userId;
                report.update_user_id = userId;
                report.resource_id    = resourceId;
                report.start_date     = startDate;
                report.end_date       = startDate.AddDays(6);
                report.status_id      = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL;
                report.submit_time    = report.create_time;
                report.submit_user_id = userId;
                rptDal.Insert(report);
                OperLogBLL.OperLogAdd <sdk_work_entry_report>(report, report.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表提交");

                foreach (var we in weList)
                {
                    var weOld = dal.FindById(we.id);
                    we.update_time          = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    we.update_user_id       = userId;
                    we.work_entry_report_id = report.id;
                    dal.Update(we);
                    OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry>(weOld, we), we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "工时表提交");
                }
            }
            else
            {
                sdk_work_entry_report reportOld = rptDal.FindById(find.id);
                find.status_id      = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL;
                find.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                find.update_user_id = userId;
                find.submit_time    = find.update_time;
                find.submit_user_id = userId;
                rptDal.Update(find);
                OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry_report>(reportOld, find), find.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表提交");
            }

            return(true);
        }
Beispiel #6
0
        /// <summary>
        /// 工时表审批
        /// </summary>
        /// <param name="ids">,号分割的多个工时表id</param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public int ApproveWorkEntryReport(string ids, long userId)
        {
            int appCnt  = 0;
            var rptDal  = new sdk_work_entry_report_dal();
            var logDal  = new tst_work_entry_report_log_dal();
            var reports = rptDal.FindListBySql($"select * from sdk_work_entry_report where id in({ids}) and status_id={(int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL} and delete_time=0");

            if (reports == null || reports.Count == 0)
            {
                return(appCnt);
            }

            var user = new UserResourceBLL().GetResourceById(userId);

            foreach (var report in reports)
            {
                // 判断用户是否在当前可以审批工时表
                int tier = GetWorkEntryReportCurrentApproveTier(report.id);
                if (tier == 3)
                {
                    continue;
                }
                var aprvResList = GetApproverList((long)report.resource_id);
                tier++;
                if (user.security_level_id == 1 || aprvResList.Exists(_ => _.tier == tier && _.approver_resource_id == userId)) // 用户是管理员或用户可以审批下一级
                {
                    tst_work_entry_report_log log = new tst_work_entry_report_log();
                    log.id = logDal.GetNextIdCom();
                    log.work_entry_report_id = report.id;
                    log.oper_user_id         = userId;
                    log.oper_type_id         = (int)DicEnum.WORK_ENTRY_REPORT_OPER_TYPE.APPROVAL;
                    log.oper_time            = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    log.tier = tier;

                    logDal.Insert(log);
                    OperLogBLL.OperLogAdd <tst_work_entry_report_log>(log, log.id, userId, DicEnum.OPER_LOG_OBJ_CATE.WORK_ENTRY_REPORT_LOG, "工时表审批");

                    appCnt++;

                    if (aprvResList.Count == 0 || aprvResList.Max(_ => _.tier) == tier)    // 是最后一级审批人
                    {
                        var rptOld = rptDal.FindById(report.id);
                        report.status_id       = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.PAYMENT_BEEN_APPROVED;
                        report.update_time     = Tools.Date.DateHelper.ToUniversalTimeStamp();
                        report.update_user_id  = userId;
                        report.approve_time    = report.update_time;
                        report.approve_user_id = userId;
                        rptDal.Update(report);
                        OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry_report>(rptOld, report), report.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表审批");
                    }
                }
            }

            return(appCnt);
        }
Beispiel #7
0
        /// <summary>
        /// 编辑库存产品
        /// </summary>
        /// <param name="pdt"></param>
        /// <param name="sn"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool EditIvtProduct(ivt_warehouse_product pdt, string sn, long userId)
        {
            ivt_warehouse_product product    = dal.FindById(pdt.id);
            ivt_warehouse_product productOld = dal.FindById(pdt.id);

            if (product == null)
            {
                return(false);
            }
            product.reference_number = pdt.reference_number;
            product.bin = pdt.bin;
            product.quantity_minimum = pdt.quantity_minimum;
            product.quantity_maximum = pdt.quantity_maximum;
            product.quantity         = pdt.quantity;
            product.update_time      = Tools.Date.DateHelper.ToUniversalTimeStamp();
            product.update_user_id   = userId;

            string desc = OperLogBLL.CompareValue <ivt_warehouse_product>(productOld, product);

            if (!string.IsNullOrEmpty(desc))
            {
                dal.Update(product);
                OperLogBLL.OperLogUpdate(desc, product.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品");
            }

            if (product.quantity != productOld.quantity)      // 修改库存数量记录库存转移
            {
                var transferDal = new ivt_transfer_dal();
                var trsf        = new ivt_transfer();
                trsf.id                = dal.GetNextIdCom();
                trsf.create_time       = Tools.Date.DateHelper.ToUniversalTimeStamp();
                trsf.create_user_id    = userId;
                trsf.update_time       = trsf.create_time;
                trsf.update_user_id    = userId;
                trsf.quantity          = product.quantity - productOld.quantity;
                trsf.type_id           = (int)DicEnum.INVENTORY_TRANSFER_TYPE.MANUAL;
                trsf.product_id        = product.product_id;
                trsf.from_warehouse_id = (long)product.warehouse_id;
                trsf.notes             = "";
                transferDal.Insert(trsf);
                OperLogBLL.OperLogAdd <ivt_transfer>(trsf, trsf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "新增库存转移");
            }

            //OperLogBLL.OperLogUpdate<ivt_warehouse_product>(product, productOld, product.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品");

            string sql = $"update ivt_warehouse_product_sn set delete_user_id={userId},delete_time={Tools.Date.DateHelper.ToUniversalTimeStamp()} where warehouse_product_id={product.id}";

            dal.ExecuteSQL(sql);

            SaveProductSn(sn, product.id, userId);

            return(true);
        }
Beispiel #8
0
        /// <summary>
        /// 停用工作流规则
        /// </summary>
        /// <param name="id"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool SetWorkflowInactive(long id, long userId)
        {
            sys_workflow wf = dal.FindById(id);

            if (wf.is_active == 0)
            {
                return(true);
            }

            sys_workflow wfOld = dal.FindById(id);

            wf.is_active      = 0;
            wf.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
            wf.update_user_id = userId;
            dal.Update(wf);
            OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_workflow>(wfOld, wf), id, userId, DicEnum.OPER_LOG_OBJ_CATE.WORKFLOW_RULE, "停用工作流规则");

            return(true);
        }
Beispiel #9
0
        /// <summary>
        /// 更新员工信息
        /// </summary>
        /// <param name="data"></param>
        /// <param name="userId"></param>
        /// <param name="resourceId"></param>
        /// <returns></returns>
        public ERROR_CODE Update(SysUserAddDto data, long userId, long resourceId)
        {
            // 检查邮箱和手机号是否重复
            sys_resource findRes;

            if (string.IsNullOrEmpty(data.sys_res.mobile_phone))
            {
                findRes = _dal.FindSignleBySql <sys_resource>($"select * from sys_resource where email='{data.sys_res.email}' and id<>{data.sys_res.id} and delete_time=0");
            }
            else
            {
                findRes = _dal.FindSignleBySql <sys_resource>($"select * from sys_resource where (email='{data.sys_res.email}' or mobile_phone='{data.sys_res.mobile_phone}') and id<>{data.sys_res.id} and delete_time=0");
            }
            if (findRes != null)
            {
                return(ERROR_CODE.SYS_NAME_EXIST);
            }

            var resOld = GetResourceById(resourceId);

            data.sys_res.update_user_id = userId;
            data.sys_res.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
            var desc = OperLogBLL.CompareValue <sys_resource>(resOld, data.sys_res);

            if (!string.IsNullOrEmpty(desc))
            {
                _dal.Update(data.sys_res);
                OperLogBLL.OperLogUpdate(desc, data.sys_res.id, userId, OPER_LOG_OBJ_CATE.RESOURCE, "编辑员工");
            }

            var userDal = new sys_user_dal();
            var userOld = userDal.FindById(resourceId);

            if (userOld.password != data.sys_user.password)
            {
                data.sys_user.password = new Tools.Cryptographys().SHA1Encrypt(data.sys_user.password);
            }
            desc = OperLogBLL.CompareValue <sys_user>(userOld, data.sys_user);
            if (!string.IsNullOrEmpty(desc))
            {
                userDal.Update(data.sys_user);
                OperLogBLL.OperLogUpdate(desc, data.sys_user.id, userId, OPER_LOG_OBJ_CATE.RESOURCE, "编辑员工");
            }


            // 员工每天工作时间
            var dal = new sys_resource_availability_dal();
            var ava = dal.FindSignleBySql <sys_resource_availability>($"select * from sys_resource_availability where resource_id={resourceId} and delete_time=0");

            if (ava == null)
            {
                data.availability.id             = dal.GetNextIdCom();
                data.availability.resource_id    = resourceId;
                data.availability.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                data.availability.update_time    = data.availability.create_time;
                data.availability.create_user_id = userId;
                data.availability.update_user_id = userId;
                dal.Insert(data.availability);
            }
            else
            {
                data.availability.id             = ava.id;
                data.availability.resource_id    = resourceId;
                data.availability.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                data.availability.update_user_id = userId;
                data.availability.create_time    = ava.create_time;
                data.availability.create_user_id = ava.create_user_id;
                dal.Update(data.availability);
            }

            // 员工休假-额外时间
            sys_resource_additional_time_dal timeDal = new sys_resource_additional_time_dal();

            if (data.addTime1 != null)
            {
                var time1 = timeDal.FindSignleBySql <sys_resource_additional_time>($"select * from sys_resource_additional_time where resource_id={resourceId} and period_year={data.addTime1.period_year.Value}");
                if (time1 == null)
                {
                    data.addTime1.id          = timeDal.GetNextIdCom();
                    data.addTime1.resource_id = resourceId;
                    timeDal.Insert(data.addTime1);
                }
                else
                {
                    time1.time_vacation = data.addTime1.time_vacation;
                    time1.time_personal = data.addTime1.time_personal;
                    time1.time_sick     = data.addTime1.time_sick;
                    time1.time_float    = data.addTime1.time_float;
                    timeDal.Update(time1);
                }
            }
            if (data.addTime2 != null)
            {
                var time2 = timeDal.FindSignleBySql <sys_resource_additional_time>($"select * from sys_resource_additional_time where resource_id={resourceId} and period_year={data.addTime2.period_year.Value}");
                if (time2 == null)
                {
                    data.addTime2.id          = timeDal.GetNextIdCom();
                    data.addTime2.resource_id = resourceId;
                    timeDal.Insert(data.addTime2);
                }
                else
                {
                    time2.time_vacation = data.addTime2.time_vacation;
                    time2.time_personal = data.addTime2.time_personal;
                    time2.time_sick     = data.addTime2.time_sick;
                    time2.time_float    = data.addTime2.time_float;
                    timeDal.Update(time2);
                }
            }

            return(ERROR_CODE.SUCCESS);
        }
Beispiel #10
0
        /// <summary>
        /// 编辑工时
        /// </summary>
        /// <param name="weList">编辑后的工时列表</param>
        /// <param name="batchId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool EditWorkEntry(List <sdk_work_entry> weList, long batchId, long userId)
        {
            var bll = new TimeOffPolicyBLL();
            tst_timeoff_balance_dal balDal = new tst_timeoff_balance_dal();
            var weListOld = GetWorkEntryByBatchId(batchId);

            if (weListOld[0].approve_and_post_user_id != null) // 已审批提交不能编辑
            {
                return(false);
            }

            foreach (var we in weListOld)
            {
                if (weList.Exists(_ => _.start_time == we.start_time))  // 原工时被编辑
                {
                    var weOld  = dal.FindById(we.id);
                    var weEdit = weList.Find(_ => _.start_time == we.start_time);
                    we.internal_notes = weEdit.internal_notes;
                    we.summary_notes  = weEdit.summary_notes;
                    we.hours_worked   = weEdit.hours_worked;
                    we.hours_billed   = weEdit.hours_billed;
                    we.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    we.update_user_id = userId;
                    var desc = OperLogBLL.CompareValue <sdk_work_entry>(weOld, we);
                    if (!string.IsNullOrEmpty(desc))
                    {
                        dal.Update(we);
                        OperLogBLL.OperLogUpdate(desc, we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "编辑工时");

                        if (we.task_id == (long)CostCode.Sick && we.hours_worked != weOld.hours_worked)  // 病假需要在假期余额表修改记录
                        {
                            bll.UpdateTimeoffBalance(we.resource_id.Value, Tools.Date.DateHelper.TimeStampToUniversalDateTime(we.start_time.Value), (CostCode)we.task_id);
                            //var balance = bll.UpdateTimeoffBalance((long)we.resource_id, Tools.Date.DateHelper.TimeStampToDateTime((long)we.start_time), (decimal)weOld.hours_billed - (decimal)we.hours_billed);
                            //var bal = balDal.FindSignleBySql<tst_timeoff_balance>($"select * from tst_timeoff_balance where object_id={we.id}");
                            //bal.balance = bal.balance + ((decimal)we.hours_billed - (decimal)weOld.hours_billed);
                            //balDal.Update(bal);
                        }
                    }
                    weList.Remove(weEdit);
                }
                else    // 原工时被删除
                {
                    we.delete_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    we.delete_user_id = userId;
                    dal.Update(we);
                    OperLogBLL.OperLogDelete <sdk_work_entry>(we, we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "编辑工时删除");

                    if (we.task_id == (long)CostCode.Sick)  // 病假需要在假期余额表删除记录
                    {
                        bll.UpdateTimeoffBalance(we.resource_id.Value, Tools.Date.DateHelper.TimeStampToUniversalDateTime(we.start_time.Value), (CostCode)we.task_id);
                        //var balance = bll.UpdateTimeoffBalance((long)we.resource_id, Tools.Date.DateHelper.TimeStampToDateTime((long)we.start_time), (decimal)we.hours_billed);
                        //balDal.ExecuteSQL($"delete from tst_timeoff_balance where object_id={we.id}");
                    }
                }
            }
            foreach (var we in weList)  // 剩余需要新增
            {
                we.id             = dal.GetNextIdCom();
                we.batch_id       = batchId;
                we.resource_id    = weListOld[0].resource_id;
                we.cost_code_id   = weListOld[0].cost_code_id;
                we.task_id        = weListOld[0].task_id;
                we.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                we.update_time    = we.create_time;
                we.create_user_id = userId;
                we.update_user_id = userId;

                dal.Insert(we);
                OperLogBLL.OperLogAdd <sdk_work_entry>(we, we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "编辑工时新增");

                if (we.task_id == (long)CostCode.Sick)  // 病假需要在假期余额表添加记录
                {
                    bll.UpdateTimeoffBalance(we.resource_id.Value, Tools.Date.DateHelper.TimeStampToUniversalDateTime(we.start_time.Value), (CostCode)we.task_id);
                    //var balance = bll.UpdateTimeoffBalance((long)we.resource_id, Tools.Date.DateHelper.TimeStampToDateTime((long)we.start_time), 0 - (decimal)we.hours_billed);
                    //tst_timeoff_balance bal = new tst_timeoff_balance();
                    //bal.object_id = we.id;
                    //bal.object_type_id = 2214;
                    //bal.task_id = we.task_id;
                    //bal.balance = balance + (decimal)we.hours_billed;
                    //balDal.Insert(bal);
                }
            }

            return(true);
        }
Beispiel #11
0
        /// <summary>
        /// 新增编辑自定义字段
        /// </summary>
        /// <param name="cate"></param>
        /// <param name="udf"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool EditUdf(DicEnum.UDF_CATE cate, UserDefinedFieldDto udf, long userId)
        {
            if (udf.id == 0)
            {
                return(AddUdf(cate, udf, userId));
            }

            var dal   = new sys_udf_field_dal();
            var field = dal.FindNoDeleteById(udf.id);

            if (field == null)
            {
                return(false);
            }

            field.col_comment           = udf.name;
            field.description           = udf.description;
            field.data_type_id          = udf.data_type;
            field.default_value         = udf.default_value;
            field.is_protected          = udf.is_protected;
            field.is_required           = udf.required;
            field.is_encrypted          = udf.is_encrypted;
            field.is_visible_in_portal  = udf.is_visible_in_portal;
            field.crm_to_project_udf_id = udf.crm_to_project;
            field.sort_order            = udf.sort_order;
            field.is_active             = udf.is_active;
            field.display_format_id     = udf.display_format;
            field.decimal_length        = udf.decimal_length;
            field.update_user_id        = userId;
            field.update_time           = Tools.Date.DateHelper.ToUniversalTimeStamp();

            var fieldOld = dal.FindById(field.id);
            var desc     = OperLogBLL.CompareValue <sys_udf_field>(fieldOld, field);

            if (!string.IsNullOrEmpty(desc))
            {
                dal.Update(field);
                OperLogBLL.OperLogUpdate(desc, field.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED, "编辑自定义字段");
            }

            var listDal = new sys_udf_list_dal();
            var list    = dal.FindListBySql <sys_udf_list>($"select * from sys_udf_list where udf_field_id={field.id} and status_id=0 and delete_time=0");

            //var find=udf.list.Find(_=>_.is_default==1)
            foreach (var ufv in udf.list)
            {
                var find = list.Find(_ => _.id == ufv.id);
                if (find == null)
                {
                    sys_udf_list val = new sys_udf_list();
                    val.id             = listDal.GetNextIdCom();
                    val.is_default     = ufv.is_default;
                    val.name           = ufv.name;
                    val.sort_order     = ufv.sort_order;
                    val.udf_field_id   = udf.id;
                    val.status_id      = 0;
                    val.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now);
                    val.update_time    = val.create_time;
                    val.create_user_id = field.create_user_id;
                    val.update_user_id = val.create_user_id;
                    listDal.Insert(val);

                    OperLogBLL.OperLogAdd <sys_udf_list>(val, val.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "新增自定义字段值");
                }
                else
                {
                    if (find.is_default != ufv.is_default)
                    {
                        find.is_default     = ufv.is_default;
                        find.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now);
                        find.update_user_id = userId;

                        var old = listDal.FindById(find.id);
                        listDal.Update(find);
                        OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_udf_list>(old, find), find.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "编辑自定义字段值");
                    }
                    list.Remove(find);
                }
            }

            foreach (var ufv in list)
            {
                ufv.delete_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                ufv.delete_user_id = userId;
                listDal.Update(ufv);
                OperLogBLL.OperLogDelete <sys_udf_list>(ufv, ufv.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "删除自定义字段值");
            }

            return(true);
        }
Beispiel #12
0
        /// <summary>
        /// 取消配送
        /// </summary>
        /// <param name="costPdtIds">成本产品id</param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public string PurchaseUnShip(string costPdtIds, long userId)
        {
            ctt_contract_cost_product_dal cstPdtDal = new ctt_contract_cost_product_dal();
            var pdtList = cstPdtDal.FindListBySql <ctt_contract_cost_product>($"select * from ctt_contract_cost_product where id in({costPdtIds})");

            if (pdtList == null || pdtList.Count == 0)
            {
                return("");
            }

            ctt_contract_cost_dal        costDal     = new ctt_contract_cost_dal();
            ivt_transfer_dal             tsfDal      = new ivt_transfer_dal();
            ctt_contract_dal             cttDal      = new ctt_contract_dal();
            pro_project_dal              proDal      = new pro_project_dal();
            sdk_task_dal                 tskDal      = new sdk_task_dal();
            ivt_warehouse_product_sn_dal lctPdtSnDal = new ivt_warehouse_product_sn_dal();
            ivt_transfer_sn_dal          tsfSnDal    = new ivt_transfer_sn_dal();

            foreach (var pdt in pdtList)
            {
                // 修改成本产品状态
                var pdtOld = cstPdtDal.FindById(pdt.id);
                pdt.status_id      = (int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.PENDING_DISTRIBUTION;
                pdt.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                pdt.shipping_time  = null;
                pdt.update_user_id = userId;
                cstPdtDal.Update(pdt);
                OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost_product>(pdtOld, pdt), pdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CTT_CONTRACT_COST_PRODUCT, "成本产品配送");

                // 修改成本状态
                var cost = costDal.FindById(pdt.contract_cost_id);
                if (cost.status_id == (int)DicEnum.COST_STATUS.ALREADY_DELIVERED)
                {
                    var costOld = costDal.FindById(pdt.contract_cost_id);
                    cost.status_id      = (int)DicEnum.COST_STATUS.PENDING_DELIVERY;
                    cost.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    cost.update_user_id = userId;
                    costDal.Update(cost);
                    OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost>(costOld, cost), cost.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CONTRACT_COST, "取消配送修改成本状态");
                }

                // 新建库存转移信息
                ivt_transfer tsf = new ivt_transfer();
                tsf.id             = tsfDal.GetNextIdCom();
                tsf.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                tsf.update_user_id = userId;
                tsf.create_time    = tsf.update_time;
                tsf.create_user_id = userId;
                tsf.type_id        = (int)DicEnum.INVENTORY_TRANSFER_TYPE.PROJECT;
                tsf.product_id     = (long)cost.product_id;
                tsf.quantity       = 0 - pdt.quantity;
                if (cost.contract_id != null)
                {
                    tsf.to_account_id = cttDal.FindById((long)cost.contract_id).account_id;
                }
                else if (cost.project_id != null)
                {
                    tsf.to_account_id = proDal.FindById((long)cost.project_id).account_id;
                }
                else if (cost.task_id != null)
                {
                    tsf.to_account_id = tskDal.FindById((long)cost.task_id).account_id;
                }
                tsf.to_contract_id    = cost.contract_id;
                tsf.to_project_id     = cost.project_id;
                tsf.to_task_id        = cost.task_id;
                tsf.from_warehouse_id = (long)pdt.warehouse_id;
                tsfDal.Insert(tsf);
                OperLogBLL.OperLogAdd <ivt_transfer>(tsf, tsf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "取消配送新建库存转移");


                // 保存库存数修改
                var lctPdt = dal.FindSignleBySql <ivt_warehouse_product>($"select * from ivt_warehouse_product where product_id={cost.product_id} and warehouse_id={(long)pdt.warehouse_id} and delete_time=0");
                if (lctPdt != null)
                {
                    var lctPdtOld = dal.FindById(lctPdt.id);
                    lctPdt.quantity       = lctPdt.quantity + pdt.quantity;
                    lctPdt.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    lctPdt.update_user_id = userId;
                    dal.Update(lctPdt);
                    OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ivt_warehouse_product>(lctPdtOld, lctPdt), lctPdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品库存数");

                    var sns = costDal.FindListBySql <string>($"select sn from ctt_contract_cost_product_sn where contract_cost_product_id={pdt.id} and delete_time=0");
                    if (sns == null || sns.Count == 0)
                    {
                        continue;
                    }

                    foreach (var sn in sns)
                    {
                        ivt_warehouse_product_sn lctPdtSn = new ivt_warehouse_product_sn();
                        lctPdtSn.id                   = lctPdtSnDal.GetNextIdCom();
                        lctPdtSn.create_time          = Tools.Date.DateHelper.ToUniversalTimeStamp();
                        lctPdtSn.create_user_id       = userId;
                        lctPdtSn.update_time          = lctPdtSn.create_time;
                        lctPdtSn.update_user_id       = userId;
                        lctPdtSn.warehouse_product_id = lctPdt.id;
                        lctPdtSn.sn                   = sn;
                        lctPdtSnDal.Insert(lctPdtSn);
                        OperLogBLL.OperLogAdd <ivt_warehouse_product_sn>(lctPdtSn, lctPdtSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_SN, "取消配送产品新增库存产品串号");

                        ivt_transfer_sn tsfSn = new ivt_transfer_sn();
                        tsfSn.id             = tsfSnDal.GetNextIdCom();
                        tsfSn.sn             = sn;
                        tsfSn.transfer_id    = tsf.id;
                        tsfSn.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                        tsfSn.create_user_id = userId;
                        tsfSn.update_time    = tsfSn.create_time;
                        tsfSn.update_user_id = userId;
                        tsfSnDal.Insert(tsfSn);
                        OperLogBLL.OperLogAdd <ivt_transfer_sn>(tsfSn, tsfSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER_SN, "取消配送产品新增转移产品串号");
                    }
                }
            }

            return("");
        }
Beispiel #13
0
        /// <summary>
        /// 配送
        /// </summary>
        /// <param name="costPdtIds">成本产品id</param>
        /// <param name="isEditSaleOrder">是否修改销售订单状态</param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public string PurchaseShip(string costPdtIds, bool isEditSaleOrder, long userId)
        {
            ctt_contract_cost_product_dal cstPdtDal = new ctt_contract_cost_product_dal();
            var pdtList = cstPdtDal.FindListBySql <ctt_contract_cost_product>($"select * from ctt_contract_cost_product where id in({costPdtIds})");

            if (pdtList == null || pdtList.Count == 0)
            {
                return("");
            }

            foreach (var pdt in pdtList)
            {
                if (pdt.status_id != (int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.PENDING_DISTRIBUTION)
                {
                    return("状态为“待配送”的成本产品才能配送");
                }
            }

            ctt_contract_cost_dal        costDal     = new ctt_contract_cost_dal();
            ivt_transfer_dal             tsfDal      = new ivt_transfer_dal();
            ctt_contract_dal             cttDal      = new ctt_contract_dal();
            pro_project_dal              proDal      = new pro_project_dal();
            sdk_task_dal                 tskDal      = new sdk_task_dal();
            ivt_warehouse_product_sn_dal lctPdtSnDal = new ivt_warehouse_product_sn_dal();
            ivt_transfer_sn_dal          tsfSnDal    = new ivt_transfer_sn_dal();

            foreach (var pdt in pdtList)
            {
                var pdtOld = cstPdtDal.FindById(pdt.id);
                pdt.status_id      = (int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.DISTRIBUTION;
                pdt.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                pdt.shipping_time  = pdt.update_time;
                pdt.update_user_id = userId;
                cstPdtDal.Update(pdt);
                OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost_product>(pdtOld, pdt), pdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CTT_CONTRACT_COST_PRODUCT, "成本产品配送");

                var cost = costDal.FindById(pdt.contract_cost_id);
                var cnt  = dal.FindSignleBySql <int>($"select count(0) from ctt_contract_cost_product where contract_cost_id={pdt.contract_cost_id} and status_id<>{(int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.DISTRIBUTION} and delete_time=0");
                if (cnt == 0)   // 产品全部已配送,修改成本状态
                {
                    var costOld = costDal.FindById(pdt.contract_cost_id);
                    cost.status_id      = (int)DicEnum.COST_STATUS.ALREADY_DELIVERED;
                    cost.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    cost.update_user_id = userId;
                    costDal.Update(cost);
                    OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost>(costOld, cost), cost.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CONTRACT_COST, "修改成本状态已配送");
                }

                ivt_transfer transfer = new ivt_transfer();
                transfer.id                = tsfDal.GetNextIdCom();
                transfer.create_time       = Tools.Date.DateHelper.ToUniversalTimeStamp();
                transfer.create_user_id    = userId;
                transfer.update_time       = transfer.create_time;
                transfer.update_user_id    = userId;
                transfer.product_id        = (long)cost.product_id;
                transfer.type_id           = (int)DicEnum.INVENTORY_TRANSFER_TYPE.PROJECT;
                transfer.from_warehouse_id = (long)pdt.warehouse_id;
                transfer.quantity          = pdt.quantity;
                if (cost.contract_id != null)
                {
                    transfer.to_account_id = cttDal.FindById((long)cost.contract_id).account_id;
                }
                else if (cost.project_id != null)
                {
                    transfer.to_account_id = proDal.FindById((long)cost.project_id).account_id;
                }
                else if (cost.task_id != null)
                {
                    transfer.to_account_id = tskDal.FindById((long)cost.task_id).account_id;
                }
                transfer.to_contract_id = cost.contract_id;
                transfer.to_project_id  = cost.project_id;
                transfer.to_task_id     = cost.task_id;
                tsfDal.Insert(transfer);
                OperLogBLL.OperLogAdd <ivt_transfer>(transfer, transfer.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "产品配送转移库存");

                // 保存库存数修改
                var lctPdt = dal.FindSignleBySql <ivt_warehouse_product>($"select * from ivt_warehouse_product where product_id={cost.product_id} and warehouse_id={(long)pdt.warehouse_id} and delete_time=0");
                if (lctPdt != null)
                {
                    var lctPdtOld = dal.FindById(lctPdt.id);
                    lctPdt.quantity       = lctPdt.quantity - pdt.quantity;
                    lctPdt.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    lctPdt.update_user_id = userId;
                    dal.Update(lctPdt);
                    OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ivt_warehouse_product>(lctPdtOld, lctPdt), lctPdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品库存数");

                    var sns = costDal.FindListBySql <string>($"select sn from ctt_contract_cost_product_sn where contract_cost_product_id={pdt.id} and delete_time=0");
                    if (sns == null || sns.Count == 0)
                    {
                        continue;
                    }

                    foreach (var sn in sns)
                    {
                        var lctPdtSn = lctPdtSnDal.FindSignleBySql <ivt_warehouse_product_sn>($"select * from ivt_warehouse_product_sn where sn='{sn}' and warehouse_product_id={lctPdt.id}");
                        lctPdtSn.delete_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                        lctPdtSn.delete_user_id = userId;
                        lctPdtSnDal.Update(lctPdtSn);
                        OperLogBLL.OperLogDelete <ivt_warehouse_product_sn>(lctPdtSn, lctPdtSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_SN, "配送产品删除库存产品串号");

                        ivt_transfer_sn tsfSn = new ivt_transfer_sn();
                        tsfSn.id             = tsfSnDal.GetNextIdCom();
                        tsfSn.sn             = sn;
                        tsfSn.transfer_id    = transfer.id;
                        tsfSn.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                        tsfSn.create_user_id = userId;
                        tsfSn.update_time    = tsfSn.create_time;
                        tsfSn.update_user_id = userId;
                        tsfSnDal.Insert(tsfSn);
                        OperLogBLL.OperLogAdd <ivt_transfer_sn>(tsfSn, tsfSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER_SN, "配送产品新增转移产品串号");
                    }
                }
            }

            return("");
        }
Beispiel #14
0
        /// <summary>
        /// 库存产品转移
        /// </summary>
        /// <param name="ivtProductId">库存产品id</param>
        /// <param name="targetLocation">目标仓库id</param>
        /// <param name="count">转移数</param>
        /// <param name="sns">序列号</param>
        /// <param name="note">备注</param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool TransferProduct(long ivtProductId, long targetLocation, int count, string sns, string note, long userId)
        {
            var ivtPdtSource = dal.FindById(ivtProductId);      // 转移的源仓库库存产品

            if (count <= 0 || count > ivtPdtSource.quantity)
            {
                return(false);
            }

            // 修改源库存产品
            var ivtPdtSourceOld = dal.FindById(ivtProductId);

            ivtPdtSource.quantity       = ivtPdtSource.quantity - count;
            ivtPdtSource.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
            ivtPdtSource.update_user_id = userId;
            string desc = OperLogBLL.CompareValue <ivt_warehouse_product>(ivtPdtSourceOld, ivtPdtSource);

            dal.Update(ivtPdtSource);
            OperLogBLL.OperLogUpdate(desc, ivtPdtSource.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "库存转移减少库存");

            // 修改或新增目标库存产品
            var ivtPdtTarget = dal.FindSignleBySql <ivt_warehouse_product>(
                $"select * from ivt_warehouse_product where product_id={ivtPdtSource.product_id} and warehouse_id={targetLocation} and delete_time=0"); // 转移的目标仓库库存产品

            if (ivtPdtTarget == null)
            {
                ivtPdtTarget                  = new ivt_warehouse_product();
                ivtPdtTarget.id               = dal.GetNextIdCom();
                ivtPdtTarget.create_time      = Tools.Date.DateHelper.ToUniversalTimeStamp();
                ivtPdtTarget.create_user_id   = userId;
                ivtPdtTarget.update_time      = ivtPdtTarget.create_time;
                ivtPdtTarget.update_user_id   = userId;
                ivtPdtTarget.warehouse_id     = targetLocation;
                ivtPdtTarget.product_id       = ivtPdtSource.product_id;
                ivtPdtTarget.quantity_minimum = ivtPdtSource.quantity_minimum;
                ivtPdtTarget.quantity_maximum = ivtPdtSource.quantity_maximum;
                ivtPdtTarget.quantity         = count;

                dal.Insert(ivtPdtTarget);
                OperLogBLL.OperLogAdd <ivt_warehouse_product>(ivtPdtTarget, ivtPdtTarget.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "库存转移增加库存");
            }
            else
            {
                var ivtPdtTargetOld = dal.FindById(ivtPdtTarget.id);
                ivtPdtTarget.quantity       = ivtPdtTarget.quantity + count;
                ivtPdtTarget.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                ivtPdtTarget.update_user_id = userId;
                desc = OperLogBLL.CompareValue <ivt_warehouse_product>(ivtPdtTargetOld, ivtPdtTarget);
                dal.Update(ivtPdtTarget);
                OperLogBLL.OperLogUpdate(desc, ivtPdtTarget.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "库存转移增加库存");
            }

            // 记录库存转移
            var transferDal = new ivt_transfer_dal();
            var trsf        = new ivt_transfer();

            trsf.id                = dal.GetNextIdCom();
            trsf.create_time       = Tools.Date.DateHelper.ToUniversalTimeStamp();
            trsf.create_user_id    = userId;
            trsf.update_time       = trsf.create_time;
            trsf.update_user_id    = userId;
            trsf.quantity          = count;
            trsf.type_id           = (int)DicEnum.INVENTORY_TRANSFER_TYPE.INVENTORY;
            trsf.product_id        = ivtPdtSource.product_id;
            trsf.from_warehouse_id = (long)ivtPdtSource.warehouse_id;
            trsf.to_warehouse_id   = targetLocation;
            trsf.notes             = note;
            transferDal.Insert(trsf);
            OperLogBLL.OperLogAdd <ivt_transfer>(trsf, trsf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "新增库存转移");

            if (!string.IsNullOrEmpty(sns))     // 库存转移序号
            {
                var snTrsfDal = new ivt_transfer_sn_dal();
                var snDal     = new ivt_warehouse_product_sn_dal();
                var snList    = snDal.FindListBySql($"select * from ivt_warehouse_product_sn where id in({sns}) and delete_time=0");
                if (snList.Count != count)
                {
                    return(true);
                }
                foreach (var psn in snList)
                {
                    // 修改库存产品序列号所属库存产品
                    var psnOld = snDal.FindById(psn.id);
                    psn.warehouse_product_id = ivtPdtTarget.id;
                    psn.update_time          = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    psn.update_user_id       = userId;
                    snDal.Update(psn);
                    OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ivt_warehouse_product_sn>(psnOld, psn), psn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_SN, "库存转移修改库存产品序号");

                    // 移库产品序列号
                    ivt_transfer_sn tsn = new ivt_transfer_sn();
                    tsn.id             = snTrsfDal.GetNextIdCom();
                    tsn.create_time    = Tools.Date.DateHelper.ToUniversalTimeStamp();
                    tsn.create_user_id = userId;
                    tsn.update_time    = tsn.create_time;
                    tsn.update_user_id = userId;
                    tsn.transfer_id    = trsf.id;
                    tsn.sn             = psn.sn;
                    snTrsfDal.Insert(tsn);
                    OperLogBLL.OperLogAdd <ivt_transfer_sn>(tsn, tsn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER_SN, "库存转移新增移库产品序列号");
                }
            }

            return(true);
        }