悟空crm二次开发 增加采购管理模块功能 程序开发

需求管理:

<?php
namespace app\pur\controller;

use app\admin\controller\ApiCommon;
use phpDocumentor\Reflection\Types\False_;
use think\Cache;
use think\Hook;
use think\Request;
use think\Db;
use app\crm\model\NumberSequence;
use app\crm\traits\AutoNumberTrait;

class Order extends ApiCommon
{
    
    
    use AutoNumberTrait;

    /**
     * 用于判断权限
     * @permission 无限制
     * @allow 登录用户可访问
     * @other 其他根据系统设置
     **/
    public function _initialize()
    {
    
    
        $action = [
            'permission' => ['exceldownload', 'setfollow', 'delete', 'select', 'productSelect', 'comSelect'],
            'allow' => ['read', 'system', 'count', 'poolauthority', 'level']
        ];
        Hook::listen('check_auth', $action);
        $request = Request::instance();
        $a = strtolower($request->action());
        if (!in_array($a, $action['permission'])) {
    
    
            parent::_initialize();
        } else {
    
    
            $param = Request::instance()->param();
            $this->param = $param;
        }
    }

    /**
     * 列表
     * @return
     * @author Michael_xu
     */
    public function index()
    {
    
    
        $model = model('Order');
        $param = $this->param;
        $userInfo = $this->userInfo;
        $param['user_id'] = $userInfo['id'];
        $data = $model->getDataList($param);
        return resultArray(['data' => $data]);
    }

    // 获取销售单
    public function select(){
    
    
        $model = model('Order');
        $param = $this->param;
        
        $map = [];
        if(isset($param['status'])){
    
    
            $map['status'] = $param['status'];
        }

        $data = $model->where($map)->field('id, name')->order('id desc')->select();
        return resultArray(['data' => $data?$data:[]]);
    }

    // 获取销售单产品
    public function productSelect(){
    
    
        $model = model('OrderProductcom');
        $param = $this->param;
        
        $map = [];
        if(isset($param['order_id']) && $param['order_id']){
    
    
            $map['order_id'] = $param['order_id'];
        }else{
    
    
            $map['order_id'] = -1;
        }
        if(isset($param['com_status'])){
    
    
            $map['status'] = $param['com_status'];
        }

        $data = $model->where($map)->field('product_id as id, product_name as name')->order('id desc')->group('product_id')->select();
        return resultArray(['data' => $data?$data:[]]);

        return resultArray(['data' => $data?$data:[]]);
    }

销售单
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
组件
在这里插入图片描述
在这里插入图片描述

<?php
/*技术二次开发  */
  
    

    /**
     * 添加
     * @param
     * @return
     * @author Michael_xu
     */
    public function save()
    {
    
    
        $model = model('Order');
        $param = $this->param;
        $userInfo = $this->userInfo;
        $param['create_user_id'] = $userInfo['id'];

        # 自动设置编号
        $numberInfo = [];
        if (empty($param['sn'])) {
    
    
            $numberInfo = $this->getAutoNumbers(12);
            if (empty($numberInfo['number'])) return resultArray(['error' => '请填写合同编号!']);
            $param['sn'] = $numberInfo['number'];
        }

        if ($res = $model->createData($param)) {
    
    
            # 更新crm_number_sequence表中的last_date、create_time字段
            if (!empty($numberInfo['data'])) (new NumberSequence())->batchUpdate($numberInfo['data']);

            return resultArray(['data' => $res]);
        } else {
    
    
            return resultArray(['error' => $model->getError()]);
        }
    }

    /**
     * 编辑
     * @param
     * @return
     * @author Michael_xu
     */
    public function update()
    {
    
    
        $model = model('Order');
        $param = $this->param;
        $userInfo = $this->userInfo;
        //数据详情
        $data = $model->getDataById($param['id']);
        if (!$data) {
    
    
            return resultArray(['error' => $model->getError()]);
        }

        # 自动设置编号
        $numberInfo = [];
        if (empty($param['sn'])) {
    
    
            $numberInfo = $this->getAutoNumbers(12);
            if (empty($numberInfo['number'])) return resultArray(['error' => '请填写合同编号!']);
            $param['sn'] = $numberInfo['number'];
        }

        if ($model->updateDataById($param, $param['id'])) {
    
    
            # 更新crm_number_sequence表中的last_date、create_time字段
            if (!empty($numberInfo['data'])) (new NumberSequence())->batchUpdate($numberInfo['data']);
            
            return resultArray(['data' => '编辑成功']);
        } else {
    
    
            return resultArray(['error' => $model->getError()]);
        }
    }

    /**
     * 删除
     * @param
     * @return
     * @author Michael_xu
     */
    public function delete()
    {
    
    
        $model = model('Order');
        $param = $this->param;
        $userInfo = $this->userInfo;

        $permission = checkPerByAction('pur', 'order', 'delete');
        if ($permission == false) {
    
    
            return resultArray(['error' => '无权操作']);
        }

        $delIds = $param['id'];

        if ($delIds) {
    
    
            $delRes = $model->delDatas($delIds);
            if (!$delRes) {
    
    
                return resultArray(['error' => $model->getError()]);
            }
        }
        
        return resultArray(['data' => '删除成功']);
    }

    /**
     * 导出
     * @param
     * @return
     * @author Michael_xu
     */
    public function excelExport()
    {
    
    
        $param = $this->param;
        $userInfo = $this->userInfo;
        $param['user_id'] = $userInfo['id'];
        $action_name = '导出';
        // $action_name = '导出全部';
        // if ($param['customer_id']) {
    
    
        //     $param['customer_id'] = ['condition' => 'in', 'value' => $param['customer_id'], 'form_type' => 'text', 'name' => ''];
        //     $action_name = '导出选中';
        // }
        $excelModel = new \app\admin\model\Excel();
        // 导出的字段列表
        $fieldModel = new \app\admin\model\Field();
        $field_list = $param['fieldList'];
        // 文件名
        $file_name = '销售单_' . date('Ymd');

        $model = model('Order');
        $temp_file = $param['temp_file'];
        unset($param['temp_file']);
        $page = $param['page'] ?: 1;
        unset($param['page']);
        unset($param['export_queue_index']);
        RecordActionLog($userInfo['id'], 'pur_order', 'excelexport', $action_name, '', '', '导出销售单');
        return $excelModel->batchExportCsv($file_name, $temp_file, $field_list, $page, function ($page, $limit) use ($model, $param, $field_list) {
    
    
            $param['page'] = $page;
            $param['limit'] = $limit;
            $data = $model->getDataList($param);
            $data['list'] = $model->exportHandle($data['list'], $field_list, 'pur_order');
            return $data;
        });

    }

}
// 获取销售单组件
    public function comSelect(){
    
    
        $model = model('OrderProductcom');
        $param = $this->param;
        
        $map = [];
        if(isset($param['order_id']) && $param['order_id']){
    
    
            $map['order_id'] = $param['order_id'];
        }else{
    
    
            $map['order_id'] = -1;
        }
        if(isset($param['product_id']) && $param['product_id']){
    
    
            $map['product_id'] = $param['product_id'];
        }else{
    
    
            $map['product_id'] = -1;
        }
        if(isset($param['com_status'])){
    
    
            $map['status'] = $param['com_status'];
        }

        $data = $model->where($map)->field('com_id as id, com_name as name')->order('id desc')->select();
        return resultArray(['data' => $data?$data:[]]);
    }
/**
     * 详情
     * @param
     * @return
     * @author Michael_xu
     */
    public function read()
    {
    
    
        $model = model('Order');
        $param = $this->param;
        $userInfo = $this->userInfo;
        $data = $model->getDataById($param['id'], $userInfo['id']);
        if (!$data) {
    
    
            return resultArray(['error' => $model->getError()]);
        }
        return resultArray(['data' => $data]);
    }

角色:采购人员
功能菜单——供应商:供应商列表展示、录入供应商信息,实际开发建议借用客户表和联系人表,只需要对原来的客户区分一下是终端客户还是供应商。
功能菜单——采购单:采购列表展示、录入采购信息
录入采购信息时先选择未生产的订单→产品→组件,然后录入原料采购的相关信息,达到关联的目的
注意:录入时组件所需的材种必须和原料材种匹配,来料长度>组件长度,来料宽度和高度-组件宽度和高度≥-2mm,单个组件成本价=原料进价(元/立方)原料长原料宽*原料高÷(原料长度÷组件长度得到的整数)

猜你喜欢

转载自blog.csdn.net/withkai44/article/details/129869289