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