商品订单修改记录逻辑代码

数据库字段设计
商品表

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值