/***判斷用戶的購物金是否夠扣除*/
        public int returnMsg(OrderMaster om)
        {
            StringBuilder sb = new StringBuilder();
            try
            {
                _bonus = new BonusMasterDao(connString);
                BonusMasterQuery query = new BonusMasterQuery();
                query.master_note = om.Order_Id.ToString();
                query.bonus_type = 1;
                List<BonusMasterQuery> bonusMasterStore = new List<BonusMasterQuery>();
                bonusMasterStore = _bonus.IsExtendBonus(query);

                if (bonusMasterStore.Count > 0)
                {
                    ///用戶購物金
                    sb.AppendFormat("SELECT sum(od.accumulated_bonus) as accumulated_bonus FROM order_detail od,order_slave os WHERE	os.order_id = '{0}'AND	os.slave_id = od.slave_id and od.item_mode<>2; ", om.Order_Id);
                    DataTable _dtbonus = _accessMySql.getDataTable(sb.ToString());
                    sb.Clear();
                    //訂單購物金
                    sb.AppendFormat("select user_id from order_master where order_id='{0}';", om.Order_Id);
                    DataTable _dtUser = _accessMySql.getDataTable(sb.ToString());
                    int deductuser = 0;
                    if (!string.IsNullOrEmpty(_dtUser.Rows[0]["user_id"].ToString()))
                    {
                        deductuser = GetUserBonus(_dtUser.Rows[0]["user_id"].ToString(), 1);
                    }
                    else
                    {
                        return 1;//訂單錯誤!
                    }
                    int orderbonus = string.IsNullOrEmpty(_dtbonus.Rows[0]["accumulated_bonus"].ToString()) ? 0 : Convert.ToInt32(_dtbonus.Rows[0]["accumulated_bonus"]);
                    if (orderbonus > deductuser)
                    {
                        return 99;//消費者購物金餘額不足,無法扣除給予購物金
                    }
                    else
                    {
                        return 100;//不顯示那個信息
                    }
                }
                else
                {
                    return 100;//不顯示那個信息
                }

            }
            catch (Exception ex)
            {
                throw new Exception("OrderCancelMasterDao-->returnMsg" + ex.Message, ex);
            }
        }
        public string Deduct_User_Bonus(int deduct_bonus, string order_id, string user_id)
        {
            BonusMasterQuery b = new BonusMasterQuery();
            BonusRecord br = new BonusRecord();
            Serial s = new Serial();
            _serial = new SerialDao(connString);
            _bonus = new BonusMasterDao(connString);
            List<BonusMaster> store = new List<BonusMaster>();
            List<BonusMaster> store2 = new List<BonusMaster>();
            System.Net.IPAddress[] ips = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList;
            if (ips.Count() > 0)
            {
                b.master_ipfrom = ips[0].ToString();
            }
            StringBuilder sql = new StringBuilder();
            StringBuilder sqlstr = new StringBuilder();
            try
            {
                int bonus_num = deduct_bonus;
                //是否發放購物金 
                b.master_note = order_id;
                b.master_total = uint.Parse(deduct_bonus.ToString());
                b.bonus_type = 1;
                store = _bonus.GetBonus(b);
                if (store.Count == 1)
                {
                    bool user = false;
                    foreach (var item in store)
                    {
                        if (item.master_total == item.master_balance)
                        {//判斷發放的購物金是否使用 
                            user = true;
                            bonus_num = 0;
                        }
                        else
                        {
                            bonus_num = bonus_num - item.master_balance;
                        }
                        b.master_id = item.master_id;
                        b.masterid = item.master_id.ToString() + ",";
                    }
                    s = _serial.GetSerialById(28);
                    uint a = 1;
                    #region 發放購物金扣除
                    if (deduct_bonus - bonus_num > 0)
                    {


                        //先清除bonus_master表裏面的發放的購物金
                        b.master_balance = deduct_bonus - bonus_num;
                        b.master_writer = "訂單取消";
                        sqlstr.Append(_bonus.UpBonusMaster(b));
                        //并記錄到購物金記錄表中
                        sqlstr.Append(_serial.Update(28));
                        br.record_id = uint.Parse(s.Serial_Value.ToString()) + a;
                        a++;
                        br.master_id = b.master_id;
                        br.type_id = 32;
                        br.order_id = uint.Parse(b.master_note);
                        br.record_use = uint.Parse(b.master_balance.ToString());
                        br.record_note = order_id;
                        br.record_writer = "訂單整筆取消";
                        br.record_ipfrom = b.master_ipfrom;
                        sqlstr.Append(_bonus.InsertBonusRecord(br));
                    }
                    if (!user)
                    {//發放購物金被使用 
                        b.user_id = uint.Parse(user_id.ToString());
                        b.masterid = b.masterid.TrimEnd(',');
                        uint order = uint.Parse(b.master_note.ToString());
                        b.master_note = null;
                        b.master_total = 0;
                        b.usebonus = "K";
                        //該用戶剩餘可用購物金 
                        store2 = _bonus.GetBonus(b);

                        foreach (var item in store2)
                        {
                            if (bonus_num > item.master_balance)
                            {
                                b.master_balance = item.master_balance;
                                bonus_num = bonus_num - item.master_balance;
                            }
                            else
                            {
                                b.master_balance = bonus_num;
                                bonus_num = 0;
                            }
                            //變更bonus_master表裏面的發放的購物金
                            b.master_id = item.master_id;
                            sqlstr.Append(_bonus.UpBonusMaster(b));
                            //記錄到購物金記錄表中 
                            sqlstr.Append(_serial.Update(28));
                            br.record_id = uint.Parse(s.Serial_Value.ToString()) + a;
                            a++;
                            br.master_id = b.master_id;
                            br.type_id = 32;
                            br.order_id = order;
                            br.record_use = uint.Parse(b.master_balance.ToString());
                            br.record_note = order_id;
                            br.record_writer = "訂單取消被使用,額外扣除購物金";
                            br.record_ipfrom = b.master_ipfrom;
                            sqlstr.Append(_bonus.InsertBonusRecord(br));

                            if (bonus_num == 0)
                            {
                                break;
                            }
                        }
                    }
                    if (bonus_num > 0)
                    {//該用戶剩餘的購物金不夠扣剩下記錄到表中
                        sqlstr.AppendFormat(@"insert into users_deduct_bonus (deduct_bonus,user_id,createdate,order_id)");
                        sqlstr.AppendFormat(@" values('{0}','{1}','{2}','{3}');", bonus_num, user_id, CommonFunction.GetPHPTime(DateTime.Now.ToString()), order_id);
                    }
                    #endregion
                }
                return sqlstr.ToString();
            }
            catch (Exception ex)
            {
                throw new Exception("OrderReturnlMasterDao-->Deduct_User_Bonus-->" + ex.Message, ex);
            }
        }
Example #3
0
 public BonusMasterMgr(string connectionString)
 {
     _IBonusMasterDao = new BonusMasterDao(connectionString);
     _ISerialDao = new SerialDao(connectionString);
     _mysqlDao = new MySqlDao(connectionString);
 }