model = new \app\common\model\MateApply();
$this->table = 'mate_apply';
}
/**
* 项目仓库出库记录
*
* @author wst
* @date 2021/9/10 8:37
*/
public function back(){
if(request()->isAjax()){
//分页参数
$length = input('rows',10,'intval'); //每页条数
$page = input('page',1,'intval'); //第几页
$start = ($page - 1) * $length; //分页开始位置
//排序
$sortRow = input('sidx','id','trim'); //排序列
$sort = input('sord','desc','trim'); //排序方式
$order = $sortRow.' '.$sort;
$title = input('title','','trim');
if($title){
$map[] = ['sn','like','%'.$title.'%'];
}
$enable = input('enable','','trim');
if($enable != ''){
$map[] = ['enable','=',$enable];
}
$map[] = ['org_id','=',$this->orgId];
$map[] = ['type','=',2];
$map= empty($map) ? true: $map;
//数据查询
$lists =db($this->table)
->where($map)->limit($start,$length)
->order($order)->select();
foreach ($lists as $k=>$v){
$lists[$k]['userName'] = db('user')
->where('id',$v['user_id'])
->value('real_name');
}
//数据返回
$totalCount = db($this->table)->where($map)->count();
$totalPage = ceil($totalCount/$length);
$result['page'] = $page;
$result['total'] = $totalPage;
$result['records'] = $totalCount;
$result['rows'] = $lists;
return json($result);
}else{
$this->assign('meta_title','出库记录');
return $this->fetch();
}
}
/**
* 新增出库
*/
public function add(){
if(request()->isPost()){
$res = $this->model->updates($this->userId);
if($res){
$this->success('操作成功',url('back'));
}else{
$this->error($this->model->getError());
}
}else{
$meta_title = '新增出库';
$this->assign('meta_title',$meta_title);
return $this->fetch();
}
}
//出库详情
public function detail($id){
$info = (new \app\common\model\MateApply())->getInfo($id);
if(!$info) $this->error('记录不存在');
$this->assign('info',$info);
return $this->fetch();
}
public function import(){
return $this->fetch();
}
/**
* 下载点模板
*/
public function downloadtem(){
set_time_limit(0);
ini_set("memory_limit","512M");
$fileName = '出库单模板.xlsx';
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$worksheet->setTitle("出库单模板");
$arr = array('A','B','C');
foreach($arr as $k=>$v){
$worksheet->getStyle($v)->getAlignment()->setWrapText(true);//换行
$worksheet->getStyle($v.'1')->getFont()->setBold(true);
$worksheet->getColumnDimension($v)->setWidth(18);
$worksheet->getStyle($v.'3')->getFont()->setBold(true);
}
$worksheet->setCellValueByColumnAndRow(1,1,'出库人');
$worksheet->setCellValueByColumnAndRow(2,1,'联系电话');
$worksheet->setCellValueByColumnAndRow(3,1,'备注');
$worksheet->setCellValueByColumnAndRow(1,3,'物品编号');
$worksheet->setCellValueByColumnAndRow(2,3,'数量');
ob_end_clean();//清除缓冲区,避免乱码
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$fileName.'"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output'); //文件通过浏览器下载
}
public function importexcel(){
set_time_limit(0);
ini_set("memory_limit", -1);
ob_flush();//清空缓存
flush();//刷新缓存
$orgId = $this->orgId;
if(!request()->file()) {
exit('请上传文件');
}
$file = request()->file('file');
//获取文件后缀
$e = explode('.',$_FILES['file']['name']);
$ext = $e[count($e)-1];
$newArr=['xls','xlsx'];
if(!in_array($ext,$newArr)){
exit('文件格式不正确');
}
// 移动到框架应用根目录/uploads/ 目录下
$info = $file->validate([ 'size'=>config('app.max_upload_file_size') ])
->move(env('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads'. DIRECTORY_SEPARATOR . 'files');
if(!$info){
exit('文件上传失败');
}
$img = './uploads/files/' . $info->getSaveName();
$filePath = str_replace('\\', '/', $img);
$data = ExcelUtil::read($filePath,['c1','c2','c3']);
if(!$data && count($data) <= 2){
exit('未上传数据');
}
$name = trim($data[0]['c1']);
$phone = trim($data[0]['c2']);
$remark = trim($data[0]['c3']);
if(empty($name)){
exit('未填写出库人');
}
if(empty($phone)){
exit('未填写联系电话');
}
Db::startTrans();
try{
$curTime = date("Y-m-d H:i:s");
$applyId = Db::name('mate_apply')->insertGetId([
'org_id' => $this->orgId,
'create_time' => $curTime,
'user_id' => $this->userId,
'sn' => get_unique_id(),
'remark' => $remark,
'name' => $name,
'phone' => $phone,
'type' => 2
]);
if(!$applyId){
\exception('操作失败');
}
$arr = [];
foreach ($data as $k=>$v){
if($k < 2){
continue;
}
if(empty($v['c1'])){
$msg = "第".($k+1)."行,物品编号未输入";
\exception($msg);
}
if(empty($v['c2']) || $v['c2'] <= 0){
$msg = "第".($k+1)."行,数量不正确";
\exception($msg);
}
// 重新计算平均价
$info = Db::name('mate_goods')->where('id',$v['c1'])->find();
if(!$info){
$msg = "第".($k+1)."行,物品编号不正确";
\exception($msg);
}
// 重新计算平均价
$info = Db::name('mate_goods')->where('id',$v['c1'])->find();
if(!$info){
$msg = "第".($k+1)."行,物品编号不正确";
\exception($msg);
}
echo "第".($k+1)."行,物品信息正确
";
$ret = Db::name('mate_goods')->where('id',$v['c1'])->update([
'nums' => $info['nums'] - $v['c2'],
'update_time' => $curTime
]);
if(!$ret){
\exception('操作失败');
}
$arr[] = [
'apply_id' => $applyId,
'goods_id' => $k,
'nums' => $v['c2'],
'price' => $info['price']
];
}
$ret = Db::name('mate_apply_goods')->insertAll($arr);
if($ret != count($arr)){
\exception('操作失败');
}
Db::commit();
echo "导入成功
";
}catch (\Exception $e){
Db::rollback();
echo "".$e->getMessage()."
";
}
}
}