商品訂單修改記錄邏輯代碼

數據庫字段設計
商品表

CREATE TABLE `rht_dealer_order_goods` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `pid` int(11) DEFAULT NULL COMMENT '訂單id',
  `goods_id` int(11) DEFAULT '0' COMMENT '商品id',
  `goods_no` varchar(50) DEFAULT '' COMMENT '商品貨號',
  `pro_spec` varchar(255) DEFAULT '' COMMENT '商品規格',
  `pro_name` varchar(100) DEFAULT NULL COMMENT '商品名稱',
  `unit` varchar(20) DEFAULT '' COMMENT '計量單位',
  `carton_size` varchar(50) DEFAULT '' COMMENT '箱規',
  `goods_num` int(11) DEFAULT NULL COMMENT '數量',
  `supplier_cost` decimal(11,2) DEFAULT '0.00' COMMENT '供貨價',
  `discount` decimal(11,2) DEFAULT '0.00' COMMENT '折扣比率',
  `discount_amount` decimal(11,2) DEFAULT '0.00' COMMENT '折扣金額',
  `is_del` tinyint(4) DEFAULT '0' COMMENT '是否刪除 0未刪除 1已刪除',
  `create_time` int(11) DEFAULT NULL COMMENT '創建時間',
  `update_time` int(11) DEFAULT NULL COMMENT '修改時間',
  `create_time_auto` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '自動創建時間  CURRENT_TIMESTAMP',
  `update_time_auto` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '自動修改時間  CURRENT_TIMESTAMP',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=580 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

日誌記錄表

CREATE TABLE `rht_dealer_order_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `pid` bigint(20) DEFAULT NULL COMMENT '關聯表id',
  `audit_id` bigint(20) DEFAULT NULL COMMENT '審覈人id',
  `audit_name` varchar(100) DEFAULT NULL COMMENT '審覈人名稱',
  `operation_log` text COMMENT '操作內容記錄表',
  `back_id` int(11) DEFAULT NULL COMMENT '駁回指定人id',
  `create_time` int(11) DEFAULT NULL COMMENT '創建時間,時間戳格式',
  `update_time` int(11) DEFAULT NULL COMMENT '修改時間 時間戳格式',
  `create_time_auto` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '自動創建時間',
  `update_time_auto` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '自動修改時間',
  `step` int(11) DEFAULT NULL COMMENT '[100-200 審覈記錄步驟][200-300 抄送記錄步驟][300-400 集團流程步驟]',
  `is_result` int(11) DEFAULT '0' COMMENT '審覈結果 0未審批 1同意 2拒絕',
  `is_read` tinyint(4) DEFAULT '0' COMMENT '是否已讀 0未讀 1已讀',
  `comment` varchar(255) DEFAULT '' COMMENT '審覈意見',
  `is_del` tinyint(4) DEFAULT '0' COMMENT '是否刪除 0否 1是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

修改記錄的邏輯代碼

/**
     * 比對數據
     * @param $dealer_order_old array() 原訂單數據
     * @param $dealer_order_new  array() 新訂單數據
     * @param $goods_old array()  原商品數據
     * @param $goods_new array() 新商品數據
     *
     * @return array
     */
    protected function comparisonData($dealer_order_old,$dealer_order_new,$goods_old,$goods_new)
    {
        unset($dealer_order_new['open']);
        unset($dealer_order_new['progress_bar']);
        unset($dealer_order_new['audit_time']);
        unset($dealer_order_new['update_time']);
        unset($dealer_order_new['create_time']);

        //記錄修改字符
        $operation_log = array();
        $dealer_order_fields =$this->table_fields('rht_dealer_order')['data']['list'];
        $goods_fields = $this->table_fields('rht_dealer_order_goods')['data']['list'];
        //訂單新老數據比對
        foreach ($dealer_order_new as $key => $value){
            if($value != $dealer_order_old[$key]){
                $operation_log[] = '['.$dealer_order_fields[$key]. ']由['.$dealer_order_old[$key].']修改爲['.$value.']';
            }
        }
        //商品新老數據比對
        if(empty($goods_old))
        {
            return ['code'=>0,'info'=>'該訂單沒有商品'];
        }
        //這段感覺多餘了
        if(empty($goods_new))
        {
            return ['code'=>1,'info'=>'訂單數據比對成功','data'=>['operation_log'=>json_encode($operation_log,JSON_UNESCAPED_UNICODE),'goods_del'=>array(),'goods_update'=>array()]];
        }
        //array_column 取出某列值作爲數組鍵名
        $goods_arr = array_column($goods_old,null,'id');
        $goods_new_arr = array_column($goods_new,null,'goods_id');
        $goods_update = array();
        $goods_del = array();
        //商品修改記錄
        foreach ($goods_arr as $k =>$v)
        {
            if(!isset($goods_new_arr[$k]))//判斷是否被刪除
            {
                $operation_log[$v['goods_no']][] = '商品['.$v['pro_name'].']被刪除';
                $goods_del[] = $v['id'];
            }else{
                $str = '';
                foreach($goods_new_arr[$k] as $ko =>$vo)
                {
                    if($vo!=$v[$ko])
                    {
                        if(!in_array($v['id'],$goods_update))
                        {
                            array_push($goods_update,$v['id']);
                        }
                        $operation_log[$v['goods_no']][] = $str.'['.$goods_fields[$ko].']由['.$v[$ko].']修改爲['.$vo.']';
                    }
                }
            }
        }
        //整理商品修改數據
        $goods_update_arr = array();
        foreach ($goods_update as $v)
        {
            $row = $goods_new_arr[$v];
            $row['update_time']  = time();
            $goods_update_arr[] = $row;
        }

        return ['code'=>1,'info'=>'訂單數據比對成功','data'=>['operation_log'=>json_encode($operation_log,JSON_UNESCAPED_UNICODE),'goods_del'=>$goods_del,'goods_update'=>$goods_update_arr]];

    }

    /**
     * 獲取數據表 字段名
     * @param  $table_name
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public  function table_fields($table_name)
    {
        $table = Db::name('information_schema.columns')->field('column_name,column_comment')->where('table_name',$table_name)->select();
        foreach ($table as $v)
        {
            $arr[$v['column_name']] = $v['column_comment'];
        }

        return ['code'=>1,'info'=>'成功取出字段名','data'=>['list'=>$arr]];
    }

展示界面數據獲取控制器代碼部分

$log_arr = Db::table('rht_dealer_order_log')->where('pid',$id)->where([['step','>',100],['step','<',200]])->select();
        $follow = Db::table('rht_dealer_order_log')->where('pid',$id)->where([['step','>',300],['step','<',400]])->select();
        if($log_arr){
            $this->assign('follow',$follow);
            $this->assign('result',$log_arr);
        }else{
            $result = array();
            $this->assign($result);
        }

展示界面數據獲取前端html代碼部分

<div id="log2" style="display: none;">
            {empty name='result'}
            <div>還沒有修改記錄!</div>
            {else}
            <ul class="layui-timeline">
                {foreach $result as $key=>$vo} {php}$op = json_decode($vo['operation_log'],true);{/php}
                <li class="layui-timeline-item">
                    <i class="layui-icon layui-timeline-axis">{if $key eq count($follow)-1}&#xe756;{else}&#xe63f;{/if}</i>
                    <div class="layui-timeline-content layui-text">
                        <strong class="layui-timeline-title">{$vo.update_time_auto|default='--'}</strong>
                        <p>{$vo.audit_name|default='--'}</p>
                        <ul>
                            {if condition ="empty($op)"}
                            <li>無修改記錄</li>
                            {else} {foreach $op as $k =>$v} {if condition="is_numeric($k)"}
                            <li>{$v}</li>
                            {else}
                            <li>商品({$k})</li>
                            <ul>
                                {foreach $v as $kk =>$vk}
                                <li>{$vk}</li>
                                {/foreach}
                            </ul>
                            {/if} {/foreach} {/if}
                        </ul>
                    </div>
                </li>
                {/foreach} {foreach $follow as $key=>$vo} {php}$op = json_decode($vo['operation_log'],true);{/php}
                <li class="layui-timeline-item">
                    <i class="layui-icon layui-timeline-axis">{if $key eq count($follow)-1}&#xe756;{else}&#xe63f;{/if}</i>
                    <div class="layui-timeline-content layui-text">
                        <p>{$vo.audit_name|default='--'}</p>
                    </div>
                </li>
                {/foreach}
            </ul>
            {/empty}
        </div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章