悟空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,单个组件成本价=原料进价(元/立方)原料长原料宽*原料高÷(原料长度÷组件长度得到的整数)

二次开发 技术交流 QQ扫一扫

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
悟空CRM采用全新的前后端分离模式,本仓库代码中已集成前端vue打包后文件,可免去打包操作 如需调整前端代码,请单独下载前端代码,前端代码在根目录的ux文件夹中 主要技术栈 核心框架:jfinal3.8 缓存:redis 数据库连接池:Druid 工具类:hutool,fastjson,poi-ooxml 定时任务:jfinal-cron 项目构建工具:maven Web容器:tomcat,jetty,undertow(默认) 前端MVVM框架:Vue.JS 2.5.x 路由:Vue-Router 3.x 数据交互:Axios UI框架:Element-UI 2.6.3 安装说明 配置java运行环境,redis环境,mysql环境将目录doc下的72crm.sql导入到数据库,修改resources/config/erpsnow-config.txt下的数据库以及redis的配置文件undertow启动端口号在resources/config/undertow.txt下修改jetty启动端口号在Application.java中修改 部署说明 本项目JDK要求JDK8及以上 一、Tomcat部署 javax.servlet javax.servlet-api 4.0.1 provided 取消以上代码的注释,将jetty和undertow的引用注释掉,将packaging从jar改为war然后运行maven package命令,将war包放在tomcat/webapps目录下 二、Jetty部署 com.jfinal jetty-server 2019.3 provided 取消以上代码的注释,将tomcat和undertow的引用注释掉,将packaging改为jar其他同Undertow 三、Undertow(默认) com.jfinal jfinal-undertow 1.5 取消以上代码的注释,将jetty和undertow的引用注释掉,将packaging改为jar运行 maven package。将上述打包命令生成的 zip 文件上传到服务器并解压,将目录下的 72crm.sh/72crm.bat 放到解压后的目录下,运行即可 更换启动方式jetty和undertow时,需要更改Application.java中的启动文件 前端部署 安装node.js 前端部分是基于node.js上运行的,所以必须先安装node.js,版本要求为6.0以上 使用npm安装依赖 下载悟空CRM9.0前端代码; 可将代码放置在后端同级目录frontend,执行命令安装依赖: npm install 修改内部配置 修改请求地址或域名:config/dev.env.js里修改BASE_API(开发环境服务端地址,默认localhost) 修改自定义端口:config/index.js里面的dev对象的port参数(默认8080,不建议修改) 运行前端 npm run dev 注意:前端服务启动,默认会占用8080端口,所以在启动前端服务之前,请确认8080端口没有被占用。 程序运行之前需搭建好Server端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linlinlove2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值